КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример на Сиvoid USART_Transmit( unsigned int data ) { /* Ждать очистки буфера передатчика */
while (!( UCSRA & ( 1<<UDRE ));
/* Скопировать 9-й бит данных из г17 в ТХВВ */
UCSRB &= ~ ( 1 << TXB8 );
if (data & 0x10O)
UCSRB |= ( 1 << TXB8 );
/* Загрузить младший байт данных в буфер, начать передачу */ UDR = data;
}
Приём данных Работа приемника разрешается установкой бита RXENn регистра UCSRnB.При установке бита RXDn подключается к приёмнику USART и начинает функционировать как вход независимо от установок регистров управления портом. Если используется синхронный режим работы, переопределяется также функционирование вывода ХСК (ХСКn). Прием данных начинается сразу же после обнаружения приемником корректного старт-бита. Каждый бит содержимого кадра затем считывается с частотой, определяемой установками контроллера скорости передачи или тактовым сигналом ХСК (ХСКn). Считанные биты данных последовательно помещаются в сдвиговый регистр приемника до обнаружения первого стоп-бита кадра. После этого содержимое сдвигового регистра пересылается в буфер приемника, из которого принятое значение может быть получено путем чтения регистра данных модуля. При использовании 9-битных слов данных значение старшего бита может быть определено по состоянию флага RXS (RXSn) регистра UCSRB (UCSRnB). Причем содержимое старшего бита данных должно быть считано до обращения к регистру данных. Это связано с тем, что флаг RX8 (RXS8n) отображает значение старшего бита слова данных кадра, находящегося на верхнем уровне буфера приемника, состояние которого при чтении регистра данных изменится. Если во время приема кадра была включена схема контроля четности, она вычисляет бит четности для всех битов принятого слова данных и сравнивает его с принятым битом четности. Результат проверки запоминается в буфере приемника вместе с принятым словом данных и стоп-бита-ми. Наличие или отсутствие ошибки контроля четности может быть затем определено по состоянию флага UPE (UPEn). Этот флаг устанавливается в 1» если следующее слово, которое может быть прочитано из буфера, имеет ошибку контроля четности. При выключенном контроле четности флаг UPE (UPEn) всегда читается как 0. Блок приемника модулей USART имеет еще два флага, показывающих состояние обмена, — флаг ошибки кадрирования FE (FЕn) и флаг переполнения DOR (DORn). Флаг FE (FЕn) устанавливается в 1, если значение первого стоп-бита принятого кадра не соответствует требуемому, т. е. равно 0. Флаг DOR (DORn) индицирует потерю данных из-за переполнения буфера приемника. Этот флаг устанавливается в 1 в случае приема старт-бита нового кадра при заполненных буфере и сдвиговом регистре приемника. Установленный флаг DOR (DORn) означает, что между прошлым байтом, считанным из регистра UDR, и байтом, считанным в данный момент, произошла потеря одного или нескольких кадров. Обратите внимание на то, что все флаги ошибок буферизуются вместе со словом данных, т. е. соответствующие биты регистра UCSRA (UCSRhA) относятся к кадру, слово данных которого будет прочитано при следующем обращении к регистру данных UDR (UDRn). Поэтому состояние этих флагов должно быть считано веред обращением к регистру данных. Кроне того, для совместимости с будущими устройствами рекомендуется при записи в регистр UCSRA (UCSRnА) сбрасывать соответствующие этим флагам биты записываемого значения в 0. Для индикации состояния приемника в модулях USART используется флаг прерывания «прием завершен» RXC (RXCn) регистра UCSRA (UCSRnA). Этот флаг устанавливается в 1 при наличии в буфере приемника непрочитанных данных и сбрасывается в 0 при опустошении буфера (после считывания всех находящихся в нем данных). Выключение приемника осуществляется сбросом бита RXEN (RXENn) регистра UCSRB (UCSRnB). В отличие от передатчика, приемник выключается сразу же после сброса бита, а значит, кадр, принимаемый в этот момент, теряется. Кроме того, при выключении приемника очищается его буфер, т. е. теряются также все непрочитанные данные. При выключенном приемнике вывод RXD (RXDn) может использоваться как контакт ввода/вывода общего назначения. Пример подпрограммы приема по интерфейсу USART приведен ниже. Как и в предыдущем примере, здесь используется опрос флага прерывания.
|