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

474 Микроконтроллеры AVR от азов программирования... Прежде чем использовать приведенные функции, нужно инициализи ­ ровать USART. В программе на Ассемблере данные, предназначенные для передачи, помещаются в регистр R16. Функция ожидает, пока освободится буфер передачи. Для этого слу ­ жит цикл проверки флага UDRE регистра UCSRA. Когда буфер окажется пустым, процесс ожидания прерывается, и подпрограмма записывает в него данные. Листинг 6.7. Пример на языке Ассемблер USART_Transmit : , Ожидаем, пока очистится буфер передачи sbis UCSRA,UDRE rjmp USART_Transmit . Помещаем данные (из г16) в буфер Начинается передача out UDR, N6 ret Листинг 6.8. Пример на языке СИ (Code Vision) #define UDRE 5 void USART_Transmit( unsigned char data ) /* Ожидаем, пока очистится буфер передачи */ while ( '( UCSRA & (1«UDRE)) ); /* Помещаем данные в буфер. Начинается передача */ UDR = data, } Посылка кадра данных длиной 9 бит Если используется 9-разрядное слово данных (UCSZ = 7), то девятый раз ­ ряд должен быть помещен в бит ТХВ8 регистра UCSRB прежде, чем младшие восемь битов будут записаны в регистр UDR. В следующих программных примерах (листинги 6.9 и 6.10) показана функция передачи информации, состоящей из 9-битового слова. В программе на Ассемблере передаваемые данные должны быть записаны в регистровую пару R17:R16. Листинг 6.9. Пример на языке Ассемблер USART_Transmit : ; Ожидаем, пока очистится буфер передачи sbis UCSRA,UDRE rjmp USART_Transmit ; Копируем 9-й бит из г17 в ТХВ8 cbi UCSRB, ТХВ8 sbrc г17,0 sbi UCSRB, ТХВ8

RkJQdWJsaXNoZXIy MTExODQxMg==