Шаблон и пример работы с UART для attiny2313 AVR

Для отладки устройств на микроконтроллерах всегда необходимо знать как происходит выполнение программы прошивки.
Я сам часто использую встроенный модуль UART в микроконтроллерах AVR для получения информации что же происходит внутри микроконтроллера.
Данный пример программы работы с UART приводится для микроконтроллера attiny2313. Хочу сразу оговориться, что код программы для attiny2313 и atmega8 не совместимы. То есть если вы прошьете код от attiny2313 в микроконтроллер atmega8 он просто не будет работать. Регистры микроконтроллера не совпадают с atmega8.

  1. #include <avr/io.h>
  2.  
  3. void USART_Init( unsigned int baudrate );
  4. unsigned char USART_Receive( void );
  5. void USART_Transmit( unsigned char data );
  6.  
  7. int main( void ) //Главная функция
  8. {
  9. USART_Init( 47 ); //Скорость соединения 19200 бит/с
  10. for(;;) //Вечный цикл
  11. {
  12. USART_Transmit( USART_Receive() ); //Отправка принятого символа назад
  13. }
  14. }
  15.  
  16.  
  17. void USART_Init( unsigned int baudrate ) //Функция инициализации USART
  18. {
  19. UBRRH = (unsigned char) (baudrate>>8);
  20. UBRRL = (unsigned char) baudrate;
  21. UCSRA = (1<<U2X); //Удвоение скорости
  22. UCSRB = ( ( 1 << RXEN ) | ( 1 << TXEN ) ); //Разрешение на прием и н апередачу через USART
  23. UCSRC = (1<<USBS) | (3<<UCSZ0);
  24. }
  25.  
  26.  
  27. unsigned char USART_Receive( void ) //Функция приема данных
  28. {
  29. while ( !(UCSRA & (1<<RXC)) ); //Ожидание приема символа
  30. return UDR; //Возврат символа
  31. }
  32.  
  33. void USART_Transmit( unsigned char data ) //Функция отправки данных
  34. {
  35. while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
  36. UDR = data; //Начало передачи данных
  37. }

В коде несколько программ:
- программа инициализации,
- программа отправки данных,
- программа приема данных.