Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расбираюсь с LCD
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Midas
Открыл один из примеров протеуса 7 для работы с LCD

А там в инициалазации портов МК есть некоторые строки, что они означают? А то чо-то я недопетреваю зачем это всё так писать! 07.gif


DDRD |= (1<<PD7);
PORTD &= ~(1<<PD7);


Зарание всем большое спасибо a14.gif !
=AVR=
DDRD |= (1<<PD7);
Это означает "поставить в "1" ТОЛЬКО тот бит DDRD, который отвечает за ногу PD7 (т.е. настроить PORTD.7 на выход), а конфигурацию остальных ног порта D оставить без изменений.

PORTD &= ~(1<<PD7);
А это означает "сбросить в "0" только ногу PD7, не трогая остальные ноги порта D".

В обоих примерах используются логические операции ("ИЛИ" = "|" в первом, "И" = "&" и "НЕ" = "~" во втором) вместо более очевидных операций присваивания - например, DDRD = (1<<PD7);. Такая операция тоже выставит нужный бит в "1", но зато сбросит остальные 7 бит в "0", а этого в данной ситуации как раз и не нужно.

ВЫРАЖЕНИЕ (1<<PD7) тождественно константе 0x80, т.к. символу PD7 в соответствующем .h-файле присвоено значение 7 (т.е. 1 << 7 = 0x80). Так "громоздко" пишут, во-первых, для того, чтобы не заморачиваться с запоминанием-упоминанием численных значений, а во-вторых, для того, чтобы получить требуемый результат вне зависимости от величины этого численного значения. Такая запись означает "константа, у которой в "1" установлен(ы) тот(те) бит(ы), номер(а) которого(ых) стоят справа от "<<""
HARMHARM
Цитата(=AVR= @ Sep 9 2007, 20:08) *
Такая запись означает "константа, у которой в "1" установлен(ы) тот(те) бит(ы), номер(а) которого(ых) стоят справа от "<<""

На самом деле в операции << справа указывается количество позиций сдвига, и несколько бит таким образом указать не удастся. Установить биты 3 и 5 можно так:
Код
5<<3

биты 8 и 12:
Код
0x11<<8
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.