Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h> //для работы с прерываниями
unsigned char flag;//флаг успешного приема сообщения
ISR(USART_RXC_vect )
{
unsigned char data,status;
data = UDR0; //читаем регистр данных
status=UCSR0A; //читаем регистр флагов UCSRA в переменную status
flag=1;//поднять флаг приема данных
}//конец приема по uart
void UART_Send_Char(unsigned char c)
{//передача символа по UART
while (!(UCSR0A&(1<<UDRE0))) ;
UDR0 = c;
}
void UART_Send_Str(char str[])
{//передача строки по UART
unsigned char i = 0;
while (str[i]!='\0')
{
UART_Send_Char(str[i]);
i++;
}
}
int main(void)
{
ChipConfig();//конфигурация мк
UART_Init();//инициализация UART
flag=0; //сбросить флаг успешного приема
sei(); // Глобально разрешаем прерывания
UART_Send_Str("MKPROG.RU"); //передать строку
while(1)
{//начало бесконечного цикла
if(flag)
{
UART_Send_Str("priem"); //передать строку
flag=0;
}
}//конец бесконечного цикла
}//конец программы
void UART_Init(void)
{
UBRR0H = 0; //UBRR = 8000000/(16*9600) – 1 = 51 (при 8мгц)
UBRR0L = 0x67; //скорость обмена 9600 бод (0x67 при 16мгц)
UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);//разр. прерыв при приеме, разр приема, разр передачи.
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);//размер слова – 8 бит (UCSR0C регистр формата пакета)
//UCSR0A = 0; //очистить все флаги
UDR0 = 0; //обнулить регистр uart
}
void ChipConfig (void)
{// конфигурация Мк
PORTB=0x00; //Обнуление портов
PORTC=0x00;
PORTD=0x00;
DDRB=0b11111111; //все линии на выход
DDRC=0b11111110; //PC0 на вход. Вход ADC0
DDRD=0b11110010; //PD2 и PD3 на вход (кнопки Power и Level) PD0 RX вход
}


