Белов, А.В. Микроконтроллеры 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 )
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==