//EX21AVR ATmega8A USART//author: QI小米粥//data;2018.4.8//发送数据55和AA连续不断的#include#includeunsigned char rdata;
unsigned char flag;
void delay(void)
{
int a,b;
for(a=0;a<200;a++)
{
for(b=0;b<200;b++)
{}
}
}
void io_init(void)
{
DDRC=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);//选择9位数据位
UCSRB &=~BIT(1);//RXB8用不着就置为初始值
UCSRB &=~BIT(0);//TXB用不着也设置为初始值
UCSRA &=~BIT(1);//正常不倍速的模式
UCSRA &=~BIT(0);//正常不倍速的模式
// SREG |=BIT(7);
}
void usart_t(unsigned char tdata)
{
while(!(UCSRA&BIT(5)))//检测是不是空寄存器
{}
UDR=tdata;
while(!(UCSRA&BIT(6)))//检查是不是传送完毕
{}
PORTC ^=BIT(0);
}
void main(void)
{
io_init();
usart_init();
rdata=0x01;
flag=1;
while(1)
{
usart_t(rdata);
delay();
delay();
if(flag)
{
rdata <<=1;
if(rdata&BIT(7))
{flag=0;}
}
else
{
rdata >>=1;
if(rdata&BIT(0))
{flag=1;}
}
}
}
网友评论