Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PORT+DDR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
RomanRom
Предположим, что надо перевести один из разрядов регистров PORTB и DDRB из нуля в единицу. Какой из операторов PORTB |= (1<<PB3); или DDRB |= (1<<PB3); надо ставить вначале? Или это без разницы или есть какой-то электрический нюанс?
SPS
Цитата(RomanRom @ Mar 10 2005, 12:48)
Предположим, что надо перевести один из разрядов регистров PORTB и DDRB из нуля в единицу. Какой из операторов PORTB |= (1<<PB3);  или DDRB |= (1<<PB3); надо ставить вначале?  Или это без разницы или есть какой-то электрический нюанс?
*


Запись 1 в DDRX переключает вывод МК как выход.
Запись 1 или 0 в PORTX - выходной сигнал, при условии DDRX=1

Поэтому целесообразно выполнять вышеуказанную последовательность.

Если DDRX = 0 - вывод устанавливается как вход.
В этом случае данные читаются из порта PINX, где X= A,B,C,D...
pitman
Разница принципиальная, обусловлена архитектурой контроллера. Советую очень внимательно почитать datasheet на свой контроллер. Там много интересного.

DDRB |= (1<<PB3) пин конфигурим на выход

по умолчанию если его не трогали до этого он сразу даст на выходе ноль

PORTB |= (1<<PB3)

Даст на выходе единицу.
belax
Цитата(RomanRom @ Mar 10 2005, 13:48)
Предположим, что надо перевести один из разрядов регистров PORTB и DDRB из нуля в единицу. Какой из операторов PORTB |= (1<<PB3);  или DDRB |= (1<<PB3); надо ставить вначале?  Или это без разницы или есть какой-то электрический нюанс?
*


Рассмотрим два случая:

1) PORTB=1
После этого у тебя на выводе будет 5В (так как подтягивающий резистор вклбчился), но нога по прежнему работает на вход. Могут сработать прерывания для соответсвующих выводов.
2) DDRB=1
После этого у тебя будут 5в на выходе и ножка будет уже работать на выход


-----------------------

1) DDRB=1
После этого у тебя будут 0в на выходе и ножка будет уже работать на выход
2)PORTB=1
5в на выходе.

Вывод: Экономически более целесобразно использовать 1 вариант, так как во втором варианте у тебя сначало выход переключаеться в 0, потом в 1, а в первом сразу в единицу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.