历史上的今天
今天是:2025年05月18日(星期日)
2018年05月18日 | AVR USART接收中断程序
2018-05-18 来源:eefocus
使用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); } }
上一篇:AVR 看门狗使用
史海拾趣
|
“2010年全国职业院校技能大赛”高职组“嵌入式产品开发竞赛” 1.竞赛目的 促进校企合作,引导企业参与赛项设计、提供技术支持和后援保障,推动工学结合人才培养模式的改革与创新,引导高职教育在嵌入式技术高速发展背景下的相应专业领域的教学改革与专业调整。检验高职学生在嵌 ...… 查看全部问答> |
|
用的立宇泰的2440,现在USB无线网卡可以上网(连到实验室的无线路由上),摄像头能实时采集图像,也能抓一帧图片保存在开发板上,现在想把采集到的数据上传到实验室的服务器上,应该如何实现呢,本人新手,希望大家指教.… 查看全部问答> |
|
本人刚开始接触evc,不知道怎么用模拟器调试应用程序,下面的信息是我按Ctrl+F5后得到的图片,望各位帮忙介绍一下 Access denied or unable to locate some local and remote output files. Please reset the device and rebuild your project. ...… 查看全部问答> |
|
本人初用430串口,有如下问题请教: 1. 不知在哪种情况下产生接收中断,书上也没明确说,是否接收到一个低电平就中断,我在实验时在P3.5加低电平没有中断产生; 2. 发送中断要做些什么事?因为写发送缓冲都是在其它非中断程序里写的。 ...… 查看全部问答> |
|
本人比较菜,对硬件懂的不多,最近想自己做个6416最小系统板,手里有个合众达SEED-560plus的仿真器,以前是用在642试验箱上的,不知道可否用在6416上呢?假如能用,该怎么用呢?是在电脑上装上驱动就可以吗?望大侠指教一二啊… 查看全部问答> |




