Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

472 Микроконтроллеры AVR от азов программирования... Для того, чтобы прерывание раньше времени не запустило процесс обмена информацией в канале USART, флаг глобального разрешения прерываний должен быть сброшен (все прерывания заблокированы) до окончания процесса инициализации. Перед тем, как выполнять переинициализацию с изменением скорости передачи информации или формата кадра, убедитесь, что в момент изме ­ нения значений регистров конфигурации все процессы обмена инфор ­ мацией уже завершены. Для проверки того, что передатчик закончил передачу всех данных, используется флаг ТХС. Для проверки того, что в приемном буфере нет непрочитанных данных, используется флаг RXC. Внимание. Если флаг ТХС используется для этой цели, то он должен сбрасы ­ ваться перед каждой передачей (прежде, чем записан UDR). Ниже приведено два примера (листинги 6.5 и 6.6) простых программ инициализации USART. Одна программа написана на Ассемблере, а вто ­ рая — на СИ. Обе программы идентичны по выполняемым функциям. В примерах устанавливается асинхронный режим работы (прерывания не используются) и фиксированный формат кадра. Скорость передачи информации задается как параметр функции. В программе на Ассемблере параметр, определяющий скорость передачи информации, перед вызовом подпрограммы помещается в пару реги ­ стров R17: R16. Листинг 6.5. Пример на языке Ассемблер USART.Init: ; Установка скорости передачи out UBRRH, г17 out UBRRL, r16 ; Включение приемника и передатчика ldi г16, (1«RXEN) | (1«TXEN) out UCSRB,r16 ; Установка формата кадра: 8 бит данных, 2 стоповых бита ldi г16, (1«USBS) I (3«UCSZ0) out UCSRC, r16 ret Листинг 6.6. Пример на языке СИ (Code Vision) #define RXEN 4 #define TXEN 3 ffdefine USBS 3 #define UCSZO 1 void USART_Init( unsigned int baud )

RkJQdWJsaXNoZXIy MTExODQxMg==