美文网首页
EX21AVR ATmega8A USART transmit

EX21AVR ATmega8A USART transmit

作者: 山前雨1 | 来源:发表于2018-06-14 10:35 被阅读2次

//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;}

}

}

}

相关文章

网友评论

      本文标题:EX21AVR ATmega8A USART transmit

      本文链接:https://www.haomeiwen.com/subject/kybeeftx.html