下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AVRUSART(UART)发送中断程序使用缓冲器系统功能使用USART发送数据,需要一定时间,若是用传统方法,等发送完再处理其它任务(如语句while(!(UCSRA&0x40));),那么,将大大降低了高速的AVR的执行效率!AVR会等到“花都谢了〜”那么怎样处理才可以解决低速串口与高速AVR之间的矛盾呢?可以采用开辟发送缓冲区的做法:当AVR需要发送数据时,如果USART口不空闲或者发送缓冲区还有待发送的数据,就将数据放入发送缓冲器中(如果缓冲器未满),AVR不必等待,可以转去执行其它任务。而后,等USART的硬件发送完一个数据后产生中断,由中断服务程序负责将发送缓冲器中数据依次送出。发送缓冲器数据结构的设计:循环队列,由读、写2个指针及一个队列计数器控制,用于判断当前写入数据、读出数据在队列中的位置,并判断队列是否为空,是否已满。程序设计时需注意,为了防止处理冲突,在对数据缓冲器的读、写过程中,要将中断关闭,避免错误产生,从而提高程序的可靠性。硬件设计AVR主控电路原理图
rNTnrPDZ乏TNTL/FD0吁反&3目KPVPCS可8渺LED控制电路原理图软件设计//目标系统:基于AVR单片机//应用软件:ICCAVR/*01010101010101010101010101010101010101010101010101010101010101010101实验内容:使用USART的发送中断功能,并使用缓冲解决高速AVR与低速串口之间的矛盾硬件连接:将PB口的LED指示灯使能开关切换到"ON”状态。注意事项:(1) 若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘(2) 请详细阅读:光盘根目录下的“产品资料开发板实验板SMK系列SMK1632说明资料”10101010101010101010101010101010101010101010101010101010101010101010*/#include<iom16v.h>#include"D:ICC_HCmmICC.H"#defineDISP_PORTPORTB#defineDISP_DDRDDRB#defineTX_BUFFER_SIZE255#defineUDREMPTY(1<<UDRE)uint8tx_buffer[TX_BUFFER_SIZE],tx_wr_index=0,tx_rd_index=0,tx_counter=0;/* 程序名称:UART初始化程序程序功能:初始化UART为:8位,9.6K,接收中断注意事项:基于7.3728M晶振提示说明:晶振不要买到假的,要不然,调不出来还以为电脑有鬼!输入:返回: */voiduart0_init(void){UCSRB=0x00;//disablewhilesettingbaudrateUCSRA=0x00;//U2X=0,不加倍数率UCSRC=0x86;//8位UBRRL=47;//setbaudratelo,波特率为9.6KUBRRH=0x00;//setbaudratehiUCSRB=0x58;//发送中断允许,接收缓冲自动清空,接收允许}/* 程序名称:UART发送中断服务程序程序功能:注意事项:提示说明:输入:返回: */#pragmainterrupt_handleruart0_tx_isr:14voiduart0_tx_isr(void){if(tx_counter)//如果缓冲区有数据则进入发送程序{tx_counter一;UDR=tx_buffer[tx_rd_index];if(++tx_rd_index==TX_BUFFER_SIZE)//如果缓冲区读指针满tx_rd_index=0;〃读指针置0}}/* 程序名称:程序功能:UART发送程序注意事项:提示说明:输入:返回: */voiduart0_putchar(uint8c){while(tx_counter==TX_BUFFER_SIZE);//如果缓冲区满则等待CLI();if(tx_counter||((UCSRA&UDR_EMPTY)==0))〃如果缓冲区有数据或者UDR不空闲{tx_buffer[tx_wr_index]=c;〃将数据写入缓冲if(++tx_wr_index==TX_BUFFER_SIZE)//如果已经写满tx_wr_index=0;//写指针置0tx_counter++;}else〃如果缓冲区没有数据且UDR空闲UDR=c;〃没什么事就发了吧SEI();}/* 程序名称:程序功能:注意事项:提示说明:输入:返回: */voidmcu_init(void){CLI();uart0_init();MCUCR=0x00;GICR=0x00;TIMSK=0x00;//timerinterruptsourcesSEI();//re-enableinterrupts}/* 程序名称:程序功能:注意事项:没什么好说的。。。提示说明:输入:返回:*/voidmain(){uint8sendChar=0;mcu_init();DISP_DDR=0xFF;while(1){uart0_putchar(sendChar);〃发送数据,数据为变量sendChardelay50us(20);DISP_PORT=tx_counter;//显示发送区数据量}}系统调试缓冲区数据量tx_counter的值取决于AVR的发送频率及UART的波特率。假定UART的波特率一定,若是AVR的发送频率过高,低速的UART的发送速度将跟不上,导致缓冲区数据量tx_counter不断增加。用LED指示tx_counter,将可以观察到向上加的现象。改变UART初始化语句:UBRRL=47;将“47”改为“40”、“60”、“80”,从而改变UART的波特率。可以看到波特率越高,数据量tx_counter向上加的速
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026黑龙江哈尔滨启航劳务派遣有限公司派遣到哈尔滨工业大学商学院招聘建设考试备考题库及答案解析
- 2026年梅河口市事业单位公开招聘工作人员(含高层次人才、专项招聘高校毕业生)(1号)(116人)建设笔试参考题库及答案解析
- 2026浙江宁波钱湖控股有限公司招聘派遣制人员2人建设笔试备考题库及答案解析
- 2026年县乡教师选调考试《教育学》考前冲刺测试卷附答案详解(a卷)
- 2026江苏南京大学SZXZ2026-016先进制造学院助理招聘建设笔试备考题库及答案解析
- 2026年伊春市直属公立医院引进(招聘)高层次专业技术人才和急需紧缺人才133人建设笔试模拟试题及答案解析
- 2026山东青岛西海岸新区教育体育系统招聘74人建设笔试备考试题及答案解析
- 2025年注册岩土工程师之《岩土基础知识》考前冲刺练习题库及参考答案详解ab卷
- 2026年4月重庆市荣昌区人民医院感染性疾病科艾滋病门诊数据统计员招聘1人建设笔试备考题库及答案解析
- 2026年齐齐哈尔市中医医院招聘65人建设考试备考题库及答案解析
- 中国天眼简介
- 脑血管介入科进修汇报
- DB3205∕T 1096-2023 智能网联汽车测试驾驶员能力要求
- 卡迪滚筒洗衣机 GO4 DF86说明书
- 荆门市东宝区社区工作者招聘笔试真题2024
- DB64∕ 266-2018 建筑工程资料管理规程
- 财务软件使用管理制度
- 2024年江苏省南京市事业单位考试《综合知识和能力素质》真题库及答案
- 厦门市湖里区离婚协议书
- T/CSBME 065-2023医用敷料材料聚氨酯泡沫卷材
- 土石方工程场地平整施工方案
评论
0/150
提交评论