Obyasnite plis

Kovalenko Oleg
Offline
Зарегистрирован: 13.10.2020

int S = 0;

int D = 0;
void setup(){
DDRD &= ~B00001100;
  DDRB |= B00111111;
  DDRC |= B00111111;
  DDRD |= B11110000;
Serial.begin(9600);
}
uint8_t i = 0;
void loop(){
  if(((PIND >> 3)&1)==0) {
    S ++;  D = 0;
  }  
  if (((PIND >> 2)&1)==0){
    D++;   S = 0;
  }
  if ((S % 2)==0) {
    i++;  
  }
  if ((D % 2)==0) {
    i--;   
  }
  uint8_t led_on = i % 16;
  uint16_t leds = 1 << led_on;
  PORTB = PORTB & 0x00 | (leds >> 0  )& 0x3f;
  PORTC = PORTC & 0x00 | (leds >> 6  )& 0x3f;
  PORTD = PORTD & 0x00 | ((leds >> 12 )& 0x0f)<<4;
  delay(250);
}
 
 
 
 
Что это значит!?!?!?
Гриша
Offline
Зарегистрирован: 27.04.2014
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kovalenko Oleg пишет:

Что это значит!?!?!?

Это текст программы, предположительно, для AVR

Kovalenko Oleg
Offline
Зарегистрирован: 13.10.2020
int S = 0;

int D = 0;
void setup(){
DDRD &= ~B00001100;
  DDRB |= B00111111;
  DDRC |= B00111111;
  DDRD |= B11110000;
Serial.begin(9600);
}
uint8_t i = 0;
void loop(){
  if(((PIND >> 3)&1)==0) {
    S ++;  D = 0;
  }  
  if (((PIND >> 2)&1)==0){
    D++;   S = 0;
  }
  if ((S % 2)==0) {
    i++;  
  }
  if ((D % 2)==0) {
    i--;   
  }
  uint8_t led_on = i % 16;
  uint16_t leds = 1 << led_on;
  PORTB = PORTB & 0x00 | (leds >> 0  )& 0x3f;
  PORTC = PORTC & 0x00 | (leds >> 6  )& 0x3f;
  PORTD = PORTD & 0x00 | ((leds >> 12 )& 0x0f)<<4;
  delay(250);
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А это правильно вставленный текст программы, предположительно, для AVR

nik182
Offline
Зарегистрирован: 04.05.2015

Ну где то на каждое второе вподряд нажатие кнопок весело мигать светодиодиками и щелкать релюшками подключенными ко всем портам ардуины, кроме кнопочных.

Kovalenko Oleg
Offline
Зарегистрирован: 13.10.2020

nik182 пишет:
Ну где то на каждое второе вподряд нажатие кнопок весело мигать светодиодиками и щелкать релюшками подключенными ко всем портам ардуины, кроме кнопочных.

Спасибо

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Есть такая штука интересная.
Называется поисковая система.
Ну скажем пусть будет Google.
Открываешь страницу http://google.com
В строке запроса пишешь:"DDRD" или "PIND" или , что там ещё непонятно.
Открываешь один из результатов поиска.
Читаешь, просвещаешься.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

nik182 пишет:
Ну где то на каждое второе вподряд нажатие кнопок весело мигать светодиодиками и щелкать релюшками подключенными ко всем портам ардуины, кроме кнопочных.

У вас с такими общий язык ?
Вопрос был:"что это значит ?", а не :"как работает этот код ?".
Однако ответ устроил

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:
У вас с такими общий язык ? Вопрос был:"что это значит ?", а не :"как работает этот код ?". Однако ответ устроил

Ща тебе ТС ответит, что суть вопроса должна быть ясна любому умному человеку :) А иных он беспокоится не просил :)))

Во, гляди-ка - я так и знал. минус он тебе уже поставил :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Kovalenko Oleg пишет:

  PORTB = PORTB & 0x00 | (leds >> 0  )& 0x3f;
  PORTC = PORTC & 0x00 | (leds >> 6  )& 0x3f;
  PORTD = PORTD & 0x00 | ((leds >> 12 )& 0x0f)<<4;

Высокие отношения!

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ЕвгенийП пишет:

Kovalenko Oleg пишет:

  PORTB = PORTB & 0x00 | (leds >> 0  )& 0x3f;
  PORTC = PORTC & 0x00 | (leds >> 6  )& 0x3f;
  PORTD = PORTD & 0x00 | ((leds >> 12 )& 0x0f)<<4;

Высокие отношения!

Это вообще без поллитры расшифровывается ?

В первом случае :тупо младшие 6 бит выставляются в 1 старшие 2 остаются без изменений
Проще записать PORTB&=0x3f;
Во втором : младшие шесть выставляются в 1
Ещё проще: PORTB=0x3f
В третьем: старшие 4 в 1: PORTB=0xf0;

Какой вообще в этом смысл ?

uint8_t led_on = i % 16;
uint16_t leds = 1 << led_on;
А это что за ересь ?
Зачем 16-битная переменная, если она больше 4 бит значение никогда не примет?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А

PORTB & 0x00 ...

это поэзия, друг мой. Без поллитры тут вообще делать нечего.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ЕвгенийП пишет:

А

PORTB & 0x00 ...

это поэзия, друг мой. Без поллитры тут вообще делать нечего.

Да там всё такое.

Автор кода сашамайоров в начале(середине) пути ?

Гриша
Offline
Зарегистрирован: 27.04.2014

а мне больше всего нравится строка 30... странно, почему ее не разделили на 5 разных строк...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

А

PORTB & 0x00 ...

это поэзия, друг мой. Без поллитры тут вообще делать нечего.

может оно стремительно работает, за один такт?

я в avr не в зуб ногой, но в интеле логические операторы флаги затрагивают