Спойлер
/** USARTATMEGA8.c
*
*/
#include <avr/io.h>
#define F_CPU 4000000
#define BAUD 9600L // Скорость обмена данными
#define UBRRL_value (F_CPU/(BAUD*16))-1
unsigned char Danue=0;
int main(void)
{
/*Настраиваем соответствующий порт передачи на выход*/
PORTD|=(1<<PD1);
/*Устанавливаем бит разрешение передачи*/
UCSRB|=(1<<TXEN);
//Переходим в регистр UCSRC
UCSRC|=(1<<URSEL);
//Размер передоваемого слова выставляем на 8 бит.*/
UCSRC|=(1<<UCSZ1)|(1<<UCSZ0);
//Выбираем режим работы ассинхронный
UCSRC&=~(1<<UMSEL);
//Проверка на четность выставляем в ноль
UCSRC&=~(1<<UPM1)&(1<<UPM0);
//Количество стоп битов также ставим 1
UCSRC&=~(1<<USBS);
//Устанавливают скорость передачи в бодах
UCSRC&=~(1<<URSEL);//Переходим в регистр UBRR;
UBRRL=UBRRL_value;//Младший бит
UBRRH=0x00;//Старший бит
/*Передаем наши данные через UDR всего один раз. */
//UDR=0x45;
while(1)
{
//Проверяем флаг UDRE — флаг опустошения регистра передатчика,
//устанавливается в 1 при пустом буфере передатчика — UDR значит можно передовать;
if ((Danue==0)&&(UCSRA|(1<<UDRE)))
{ //Отправляем только один раз
Danue++;
UDR=0x45;
}
if ((Danue==1)&&(UCSRA|(1<<UDRE)))
{ //Отправляем только один раз
UDR=0x53;
Danue++;
}
}
}




