AVR应用笔记 AVR单片机笑傲江湖 AVR USART(UART)接收中断程序

AVR USART(UART)接收中断程序

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

   使用AVR的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示!


硬件设计


AVR主控电路原理图(点击图片放大,不需要放大镜!

LED控制电路原理图(点击图片放大,不需要放大镜!



软件设计

下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

//目标系统: 基于AVR单片机
//应用软件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
实验内容:
USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。
----------------------------------------------------------------------
硬件连接: 
将MCU.RXD与MCU.TXD使用短路帽短接,将PB口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------
注意事项:
(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘
(2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#include <iom16v.h>
#include "D:\ICC_H\CmmICC.H"

#define DISP_PORT PORTB
#define DISP_DDR  DDRB

/*--------------------------------------------------------------------
程序名称:UART初始化程序
程序功能:初始化UART为:8位,9.6K,接收中断
注意事项:基于7.3728M晶振
提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼!
输    入:
返    回:
--------------------------------------------------------------------*/
void uart0_init(void)
{
    UCSRB = 0x00;   //disable while setting baud rate
    UCSRA = 0x00;   //U2X = 0,不加倍数率
    UCSRC = 0x86;   //8位
    UBRRL = 47;     //set baud rate lo,波特率为9.6K
    UBRRH = 0x00;   //set baud rate hi
    UCSRB = 0x98;   //接收中断允许,接收缓冲自动清空,接收允许
}
/*--------------------------------------------------------------------
程序名称:UART接收中断服务程序
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
    DISP_PORT = UDR;//显示接收到的数据
//用串口调试助手发送数据,则单片机端显示数据对应的ASCII值,如:接收到"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));   //等待发送结束
        UCSRA|=0x40;            //清除发送结束标志位
        delay50ms(4);
    }
}


系统调试

短接RXD与TXD能接收到自己发送的数据,断开短接没有接收到数据。
系统不断发送数据:0,1,2。。。若正常接收,将收到0,1,2。。。。
用LED作数据指示,LED往上加,说明系统程序正常执行。

 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

AVR USART(UART)接收中断程序

——