#c #avr
#c #avr
Вопрос:
Я только начинаю. Наберитесь немного терпения для моих вопросов. Я наткнулся на список программы, в которой появляется следующее утверждение:
DDRB amp;= ~((1 lt;lt; DDB0) | (1 lt;lt; DDB1) | (1 lt;lt; DDB2));
Мое предположение: учитывая, что при запуске микроконтроллер по умолчанию имеет все биты DDRB, установленные на 0, я получаю:
DDRB amp; = ~ ((1 lt;lt; 0) | (1 lt;lt; 0) | (1 lt;lt; 0)); ===gt;gt; DDRB amp; = ~ ((1) | (1) | (1));
что отличается от комента автора. Где я ошибаюсь? 2 # вопрос: рассказ
volatile uint8_t portbhistory = 0xFF; changedbits = PINB ^ portbhistory;
второе утверждение не равно:
changedbits = ~ PINB;
какие изменения? спасибо тем, кто хочет мне ответить.
Комментарии:
1.
DDBx
скорее всего, это битовые индексы, а не битовые значения.2. спасибо Эухенио Ш., это то, что я хотел знать. Теперь все правильно. Можете ли вы ответить и на второй вопрос? Спасибо
Ответ №1:
Нет, это так DDRB amp; = ~ ((1 lt;lt; 0) | (1 lt;lt; 1) | (1 lt;lt; 2));
DDB0, DDB1, DDB2-это разрядные числа, определенные в файле заголовка.
#define DDB0 0 #define DDB1 1 /* ... actual values may be different */
Заявление:
DDRB amp;= ~((1 lt;lt; DDB0) | (1 lt;lt; DDB1) | (1 lt;lt; DDB2));
нули DDB0
DDB1
и DDB2
биты.
DDRB |= (1 lt;lt; DDB0) | (1 lt;lt; DDB1) | (1 lt;lt; DDB2);
наборы DDB0
DDB1
и DDB2
биты.
DDRB ^= (1 lt;lt; DDB0) | (1 lt;lt; DDB1) | (1 lt;lt; DDB2);
переключает DDB0
DDB1
amp; DDB2
биты (устанавливает их значение на противоположное).
Комментарии:
1. Да,
(1 lt;lt; DDB0) | (1 lt;lt; DDB1) | (1 lt;lt; DDB2)
это создание маски .2. gt;DDB0, DDB1, DDB2-это разрядные числа, определенные в файле заголовка. #определить DDB0 0 #определить DDB1 1 /* … фактические значения могут отличаться */ спасибо, что мне не хватало этой части. Спасибо