美文网首页
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