реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PORT+DDR, Си
RomanRom
сообщение Mar 10 2005, 10:48
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 231
Регистрация: 14-02-05
Пользователь №: 2 635



Предположим, что надо перевести один из разрядов регистров PORTB и DDRB из нуля в единицу. Какой из операторов PORTB |= (1<<PB3); или DDRB |= (1<<PB3); надо ставить вначале? Или это без разницы или есть какой-то электрический нюанс?
Go to the top of the page
 
+Quote Post
SPS
сообщение Mar 10 2005, 11:33
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 8-02-05
Из: Ukraine
Пользователь №: 2 501



Цитата(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...
Go to the top of the page
 
+Quote Post
pitman
сообщение Mar 10 2005, 13:46
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 3-03-05
Пользователь №: 3 029



Разница принципиальная, обусловлена архитектурой контроллера. Советую очень внимательно почитать datasheet на свой контроллер. Там много интересного.

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

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

PORTB |= (1<<PB3)

Даст на выходе единицу.
Go to the top of the page
 
+Quote Post
belax
сообщение Apr 5 2005, 18:58
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 21-03-05
Из: Москва
Пользователь №: 3 570



Цитата(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, а в первом сразу в единицу.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th July 2025 - 13:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016