Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > UART и запись в порт


Автор: xelax 6.6.2006, 14:11
Такой ламерский вопрос. Передаю - принимаю данные через UART он же порт E пин 1-2 и тут (предположим в прерывании от таймера) мне необходимо изменить значение пина 4 порта E. Если я тупо 
Код

PORTE |= 0x10;


испортит ли мне это обмен через UART? Если да, то есть ли иные способы изменить значение пина? 

Автор: ManiaK 6.6.2006, 15:09
Цитата(xelax @  6.6.2006,  14:11 Найти цитируемый пост)
испортит ли мне это обмен через UART? Если да, то есть ли иные способы изменить значение пина? 

Выполнение данной команды по своему смыслу уже предполагает: выставление только пятого бита в порту.
Ни один другой бит порта трогаться не будет.

Если тебя терзают сомнения по поводу того, что чип сначала должон прочитать порт, потом изменить, а потом записать, то можешь быть спокоен: каждому порту должен соответствовать регистр защёлок, который не зависит от того, какой уровень в данный момент на самом порту есть. Чтение производится как раз от туда. 

Автор: PILOT 6.6.2006, 19:41
Объяснение правильное. В ассемблере правильно это будет выглядеть так (опять же, если пользоваться асмом, то вопросов не возникаетsmile ) :
Код

   ClI;
   In   R16,PortE; возможно нужно LdS пользоваться, не помню
   OrI   R16,$10;
   Out   PortE,R16;
   SeI;


СУВ.  

Автор: xelax 8.6.2006, 08:58
А что собственно защёлкивается в этом регистре защёлок?
Это первый вопрос. 

Получается таким образом что ли, разрешая UART, у порта E теряют свою функциональность два разряда. И порт E становится 6-разрядным ;)? 
Это второй вопрос. 

Автор: PILOT 9.6.2006, 16:57
Порты всегда 8-ми разрядные, только те выводы, которые используются как альтернативные не могут быть записаны.

То что ты хочешь увидеть на порту ты записываешь в защелку, она хранит то что ты выдал в порт, а вот физическое состояние выводов порта можно получить считывая не Port, a PIN.

СУВ. 

Автор: Woodoo 14.6.2006, 01:20
мой тебе совет: поставь авр студио - там все прекрасно можно проверить за пару минут!
На счет портов (на сколько помню) -  если ты используешь альтернативню функцию порта (в тваем случае - UART), то функция порта афтоматом отключается (вот  точно не помню, патамучто в таймере1 для етого надо спец. биты выставлять, а в уарт вроде не надо). Это все можно прочитать в пдф на проц 8) .
Да и вот, для разъясненее мелочей: при использованиии альтернативной ф-ции порта, не регистр DDRx, не регистр PORTx ни как не влияют на то что будет установлено ны ножке проца, т.е. чтобы ты не выводил в порт (твоё PORTE |= 0x10;) - никакого результата не даст. 

Автор: xelax 14.6.2006, 09:32
Всем откликнувшимся спасибо. Разобрался. Всё работает как надо ;) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)