микроконтроллер avr для управления регистрами

#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 /* … фактические значения могут отличаться */ спасибо, что мне не хватало этой части. Спасибо