Код: Выделить всё
#include <avr/io.h>//Библиотека ввода/вывода
#include <stdio.h>
#include <avr/interrupt.h>//Библиотека прерываний
//Прототипы подпрограмм
void USART_Transmit( unsigned char data );
void USART_Init( unsigned int ubrr);
//Подпрограмма обработки прерывания
ISR(USART_RXC_vect)
{
int b;
b = UDR0;
// Выполняем обработку принятого байта
if (b=='1')//Если приняли "1"
{
USART_Transmit('R');//Отправляем букву "R"
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку
}
else//Если нет
if (b=='2')//Если приняли "2"
{
USART_Transmit('L');//Отправляем букву "L"
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку
}
}
void USART_Init( unsigned int ubrr)//Инициализация модуля USART
{
/* Задаем скорость работы USART */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Разрешаем прием и передачу по USART */
UCSR0B=(1<<RXEN0)|( 1<<TXEN0);
UCSR0B |= (1<<RXCIE0);
/* Устанавливаем формат данных 8 бит данных, 1 стоп бита */
//UCSR0C=0x86;// Инициализация именно для ATmega8
UCSR0C = (1<<USBS0)|(3<<UCSZ10);//USBSn 0-1 stop bit 1-2 stop bit;
}
void USART_Transmit( unsigned char data ) //Функция отправки данных
{
while ( !(UCSR0A & (1<<UDRE0)) ); //Ожидание опустошения буфера приема
UDR0 = data; //Начало передачи данных
}
int main(void)//главная программа
{
//Скорость USART 115200 при кварцевом генераторе 16MHz
USART_Init (8);
USART_Transmit('O');//Передаем при включении
USART_Transmit('k');//сообщение "Ok!", что свидетельствует
USART_Transmit('!');//о правильно работе программы
USART_Transmit(0x0d);//переход в начало строки
USART_Transmit(0x0a);//переход на новую строку
sei();//разрешаем глобально прерывания
while(1)//вечный цикл
{//тут пусто
}
}


