苏州奥联电子科技有限公司
当前位置: 苏州奥联电子科技有限公司 » 单片机

AVR USART接收中断程序

分类:单片机 发布:2018年05月18日 22:11 浏览:652次 Tag:

使用AVR的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示。 
USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。

#include

#define DISP_PORT PORTB

#define DISP_DDR  DDRB


/*

程序功能:初始化UART为:8位,9.6K,接收中断

注意事项:基于7.3728M晶振  

程序名称:UART初始化程序

*/

void uart0_init (void)

{

    UCSRB = 0x00;   //disable while setting baud rate

    UCSRA = 0x00;   //U2X = 0,不加倍数率

    UCSRC = 0x86;   //固定的

    /*  设置帧格式 : 8 个数据位 , 2 个停止位 */

    //UCSRC = (1<

    UBRRL = 47;     //set baud rate lo,波特率为9.6K   

    //UBRRL=(fosc/16/(baud+1))%256; fosc是晶振,baud为波特率

    UBRRH = 0x00;   //set baud rate hi

    UCSRB = 0x98;   //接收中断允许,接收缓冲自动清空,接收允许  

}

/*程序名称:UART接收中断服务程序*/

#pragma interrupt_handler uart0_rx_isr:12

void uart0_rx_isr(void)

{

  DISP_PORT = UDR;//显示接收到的数据

                  //如:接收到"1",显示0X31

//delay50ms(1);

}


void mcu_init(void)

{

    CLI(); 

    uart0_init();

    MCUCR = 0x00;

    GICR  = 0x00;

    TIMSK = 0x00;   //timer interrupt sources

    SEI();          //re-enable interrupts

}

void main()

{

    uint8 counter=0;


    mcu_init();


    DISP_DDR=0xFF;


    while(1)

    {

        UDR=counter++;          //发送数据,数据为变量counter

        while(!(UCSRA&0x40));   //等待发送结束

         //Bit 6 – TXC: USART  发送结束

//发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时

//TXC 置位。执行发送结束中断时 TXC 标志自动清零,

//也可以通过写 1 进行清除操作。

        UCSRA|=0x40;            //清除发送结束标志位 

        delay50ms(4);

    }

}



相关文章
 
资讯栏目
最新资讯
资讯排行
 

在线咨询