EX22AVR ATmega8A USART receive
//EX21AVR ATmega8A USART//author: QI小米粥//data;2018.4.8//发送数据55和AA连续不断的#include#includeunsigned char rdata;
unsigned char flag;
void io_init(void)
{
DDRB=0XFF;
}
void usart_init(void)
{
UCSRC |=BIT(7);//选择UCSRC进行操作
UCSRC &=~BIT(6);//异步模式
UCSRC &=~BIT(5);//奇偶校验禁止
UCSRC &=~BIT(4);
UCSRC &=~BIT(3);//一个stop bit
UCSRC |=BIT(2);//选择8位数据位
UCSRC |=BIT(1);
UCSRC &=~BIT(0);//异步模式直接设置0
UCSRC =0x86;
UBRRL =0x31;//波特率设置为1250
UBRRH=0X00;
//UBRRL=0X31;
UCSRB |=BIT(7);//接受完成中断
UCSRB &=~BIT(6);//发送完成中断
UCSRB &=~BIT(5);//数据寄存器空中断
UCSRB |=BIT(4);//接受使能
UCSRB |=BIT(3);//发送使能
UCSRB &=~BIT(2);//选择8位数据位
UCSRB &=~BIT(1);//RXB8用不着就置为初始值
UCSRB &=~BIT(0);//TXB用不着也设置为初始值
UCSRA &=~BIT(1);//正常不倍速的模式
UCSRA &=~BIT(0);//正常不倍速的模式
SREG |=BIT(7);
}
#pragma interrupt_handler usart_r:12
unsigned char usart_r(void)
{
while(!(UCSRA&(BIT(7))));
PORTB=UDR;
return UDR;
}
void main(void)
{
io_init();
usart_init();
while(1);
}