| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
ICCAVR генератор кода - неправильная последовательность инициализации порта
12.08.2010, 13:21
|
|
|
Временная регистрация
Регистрация: 09.11.2007
Сообщений: 56
Сказал спасибо: 12
Сказали Спасибо 10 раз(а) в 6 сообщении(ях)
|
ICCAVR генератор кода - неправильная последовательность инициализации порта
Здравствуйте,
сгенерировал на ICCAVR 6.2 с помощью встроенного визарда начальный код для инициализации порта (для Tiny13). По условию нулевой пин должен быть сконфигурирован как Output, и его начальное значение должно быть 1 (High). Все остальные оставляем как Input.
Сгенерирован следующий код инициализации:
|
Цитата:
|
PORTB = 0x01;
DDRB = 0x01;
|
Вопрос: почему сначала присваивается значение порту а затем определяется его направление (DDRB)? Ведь, по идее должно быть наоборот.
Это баг или фича?
|
|
|
|
12.08.2010, 13:50
|
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
|
Re: ICCAVR генератор кода - неправильная последовательность инициализации порта
Сообщение от andruha-d
|
|
Ведь, по идее должно быть наоборот.Это баг или фича?
|
Если будет наоборот, то на пару тактов пин станет выходом с нулевым состоянием. По моему, такого в программе не просилось.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
12.08.2010, 19:17
|
|
|
Временная регистрация
Регистрация: 09.11.2007
Сообщений: 56
Сказал спасибо: 12
Сказали Спасибо 10 раз(а) в 6 сообщении(ях)
|
Re: ICCAVR генератор кода - неправильная последовательность инициализации порта
Как бы понятно, но выходит, что порту, настроенному на Input можно программно присвоить значение (0/1) и он его где-то запомнит и затем, после смены направленности, подхватит и самовольно выставит уровень, который был в предыдущей инкарнации? А как быть, если в момент, когда порт был Input ему на вход подавался уровень, не совпадающий с планируемым после смены DDRx выходным уровнем? Кто победит - программное присвоение или внешний сигнал?
Если развить тему, то можно в режиме Input подать на порт извне некий логический уровнь, затем сменить DDRx на Output и порт автоматом выставит на выход ранее поданный сигнал? А я ведь тоже этого не просил при смене DDRx.
Последний раз редактировалось andruha-d; 12.08.2010 в 19:20.
|
|
|
|
12.08.2010, 23:00
|
|
|
Временная регистрация
Регистрация: 09.11.2007
Сообщений: 56
Сказал спасибо: 12
Сказали Спасибо 10 раз(а) в 6 сообщении(ях)
|
Re: ICCAVR генератор кода - неправильная последовательность инициализации порта
Сообщение от lvadia
|
|
это выходной регистр....или я не понял вопрос?)
|
Аха! Точно, я как-то не обратил внимание. Большое спасибо.
|
|
|
|
12.08.2010, 23:17
|
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
|
Re: ICCAVR генератор кода - неправильная последовательность инициализации порта
Сообщение от andruha-d
|
|
Как бы понятно, но выходит, что порту, настроенному на Input можно программно присвоить значение (0/1) и он его где-то запомнит
|
Он его запомнит не где-то, а в регистре PORTx. Этот порт - если в режиме input - то 1 означает "подперт на Vcc", а 0 - "бесконечное" входное сопротивление. Смотрите даташит внимательно!
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:11.
|
|