欢迎来到天天文库
浏览记录
ID:15417326
大小:86.00 KB
页数:5页
时间:2018-08-03
《avr usart(uart)发送中断程序 使用缓冲器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AVRUSART(UART)发送中断程序使用缓冲器系统功能使用USART发送数据,需要一定时间,若是用传统方法,等发送完再处理其它任务(如语句while(!(UCSRA&0x40));),那么,将大大降低了高速的AVR的执行效率!AVR会等到“花都谢了~”那么怎样处理才可以解决低速串口与高速AVR之间的矛盾呢?可以采用开辟发送缓冲区的做法:当AVR需要发送数据时,如果USART口不空闲或者发送缓冲区还有待发送的数据,就将数据放入发送缓冲器中(如果缓冲器未满),AVR不必等待,可以转去执行其它任务。而后,等USART的硬件发送完一个数据后产生中断,由中断服
2、务程序负责将发送缓冲器中数据依次送出。发送缓冲器数据结构的设计:循环队列,由读、写2个指针及一个队列计数器控制,用于判断当前写入数据、读出数据在队列中的位置,并判断队列是否为空,是否已满。程序设计时需注意,为了防止处理冲突,在对数据缓冲器的读、写过程中,要将中断关闭,避免错误产生,从而提高程序的可靠性。硬件设计 AVR主控电路原理图LED控制电路原理图软件设计//目标系统:基于AVR单片机//应用软件:ICCAVR/*01010101010101010101010101010101010101010101010101010101010101010101-
3、---------------------------------------------------------------------实验内容:使用USART的发送中断功能,并使用缓冲解决高速AVR与低速串口之间的矛盾----------------------------------------------------------------------硬件连接:将PB口的LED指示灯使能开关切换到"ON"状态。---------------------------------------------------------------------
4、-注意事项:(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘(2)请详细阅读:光盘根目录下的“产品资料开发板实验板SMK系列SMK1632说明资料”----------------------------------------------------------------------10101010101010101010101010101010101010101010101010101010101010101010*/#include#include"D:ICC_HCmmICC.H"#defin
5、eDISP_PORTPORTB#defineDISP_DDRDDRB#defineTX_BUFFER_SIZE255#defineUDR_EMPTY(1<6、振提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼!输入:返回:--------------------------------------------------------------------*/voiduart0_init(void){UCSRB=0x00;//disablewhilesettingbaudrateUCSRA=0x00;//U2X=0,不加倍数率UCSRC=0x86;//8位UBRRL=47;//setbaudratelo,波特率为9.6KUBRRH=0x00;//setbaudratehiUCSRB=0x58;//发7、送中断允许,接收缓冲自动清空,接收允许}/*--------------------------------------------------------------------程序名称:UART发送中断服务程序程序功能:注意事项:提示说明:输入:返回:--------------------------------------------------------------------*/#pragmainterrupt_handleruart0_tx_isr:14voiduart0_tx_isr(void){if(tx_counter)//如果缓冲8、区有数据则进入发送程序{tx_counter--;UDR=tx_buffer[t
6、振提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼!输入:返回:--------------------------------------------------------------------*/voiduart0_init(void){UCSRB=0x00;//disablewhilesettingbaudrateUCSRA=0x00;//U2X=0,不加倍数率UCSRC=0x86;//8位UBRRL=47;//setbaudratelo,波特率为9.6KUBRRH=0x00;//setbaudratehiUCSRB=0x58;//发
7、送中断允许,接收缓冲自动清空,接收允许}/*--------------------------------------------------------------------程序名称:UART发送中断服务程序程序功能:注意事项:提示说明:输入:返回:--------------------------------------------------------------------*/#pragmainterrupt_handleruart0_tx_isr:14voiduart0_tx_isr(void){if(tx_counter)//如果缓冲
8、区有数据则进入发送程序{tx_counter--;UDR=tx_buffer[t
此文档下载收益归作者所有