Хелпикс

Главная

Контакты

Случайная статья





DDRD &= ~(1<<2);



В данном случае результат сдвига единицы на две позиции влево инвертируется с помощью операции побитного инвертирования, обозначаемой значком " ~ ".

При инверсии мы получаем вместо нулей единички, а вместо единичек - нули. Эта логическая операция иначе называется операцией НЕ (английское название NOT).

Таким образом, при побитном инвертировании 00000100 мы получаем 11111011. (Подробнее о работе с числами в микроконтроллере см. во врезке ниже. )

Получившееся число с помощью операции побитного логического умножения & умножается на число, хранящееся в регистре DDRD, и результат записывается в регистр DDRD.

При логическом умножении 0*0=0, 0*1=0, 1*1=1. Операцию логического умножения иначе называют операцией И (английское название AND).

То есть сдвинутая нами влево на две позиции единичка превращается при инвертировании в ноль и умножается на соответствующий бит, хранящийся в регистре DDRD. При умножении на ноль мы получаем ноль. Таким образом, бит PD2 становится равным нулю.


Кроме логических операций И, ИЛИ, НЕ существует также операция " исключающее ИЛИ" (английское название XOR). Она обозначается значком ^. При исключающем ИЛИ значение бита, к которому " прибавляется" единичка, изменяется на противоположное. Например, 110011 ^ 11010 = 101001.

 

Следует добавить, что работа с числами в 8-битном микроконтроллере проходит с использованием 8-битных регистров. Перед вычислениями аргумент помещается в один из специальных регистров, с которыми напрямую может работать арифметико-логическое устройство (АЛУ). Например, перед выполнением команды DDRD & = ~(1< < 2) аргумент помещается во вспомогательный регистр микроконтроллера. Содержимое такого регистра будет выглядеть как 11111011. После этого осуществляется операция побитного умножения, что дает во втором бите регистра DDRD значение 0.
Спасибо участникам форума Олегу (oleg) и VCOM за появление этого комментария и корректирование статьи.

 

 

 

После того как направление передачи данных у порта сконфигурировано, можно присвоить порту значение, которое будет храниться в соответствующем регистре PORTx.
PORTx - регистр порта, где x обозначает имя порта.

Если вывод сконфигурирован как выход, то единичка в соответствующем бите регистра PORTx формирует на выводе сигнал высокого уровня, а ноль - сигнал низкого уровня.

Если же вывод сконфигурирован как вход, то единичка в соответствующем бите регистра PORTx подключает к выводу внутренний подтягивающий pull-up резистор, который обеспечивает высокий уровень на входе при отсутствии внешнего сигнала.

Установить " 1" на всех выводах порта D можно следующим образом.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.