




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机C程序延时精度研究 在单片机应用中,经常会遇到需要短时间延时的情况,一般都是几十到几百s,并且需要很高的精度(比如用单片机驱动DS18B20时,误差容许的范围在十几s以内,不然很容易出错);而某些情况下延时时间较长,用计时器往往有点小题大做。另外在特殊情况下,计时器甚至已经全部用于其他方面的定时处理,此时就只能使用软件定时了1。 1 C语言程序延时Keil C51的编程语言常用的有2种: 一种是汇编语言;另一种是C 语言。用汇编语言写单片机程序时,精确时间延时是相对容易解决的。比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 s,51单片机的指令周期是晶振频率的1/12,即一个机器周期为1 s;“MOV R0,#X”需要2个机器周期,DJNZ也需要2个机器周期,单循环延时时间t=2X+3(X为装入寄存器R0的时间常数)2。这样,存入R0里的数初始化为8即可,其精度可以达到1 s。用这种方法,可以非常方便地实现512 s以下时间的延时。如果需要更长时间,可以使用两层或更多层的嵌套,当然其精度误差会随着嵌套层的增加而成倍增加。虽然汇编语言的机器代码生成效率很高,但可读性却并不强,复杂一点的程序就更难读懂;而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,且C 语言还可以嵌入汇编程序来解决高时效性的代码编写问题。就开发周期而言,中大型软件的编写使用C 语言的开发周期通常要比汇编语言短很多,因此研究C语言程序的精确延时性能具有重要的意义3。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。2 单层循环延时精度分析下面是进行s级延时的while程序代码。延时函数:void delay1(unsigned char i) while(i );主函数:void main() while(1) delay1(i);使用Keil C51的反汇编功能,延时函数的汇编代码如下:C:0x00E6AE07MOVR6,0x07C:0x00E81FDECR7C:0x00E9EEMOVA,R6C:0x00EA70FAJNZC:00E6C:0x00EC22RET图1 断点设置位置图通过对i赋值为10,在主程序中图1所示的位置设置断点。经过测试,第1次执行到断点处的时间为457 s,再次执行到该处的时间为531 s,第3次执行到断点处的时间为605 s,10次while循环的时间为74 s,整个测试结果如图2所示。图2 使用i-方式测试仿真结果图通过对汇编代码分析,时间延迟t=7X+4(其中X为i的取值)。测试表明,for循环方式虽然生成的代码与用while语句不大一样,但是这两种方法的效率几乎相同。C语言中的自减方式有两种,前面都使用的是i-的方式,能不能使用-i方式来获得不同的效果呢?将前面的主函数保持不变,delay1函数修改为下面的方式:void delay1(unsigned char i) while(-i);同样进行反汇编,得到如下结果:C:0x00E3DFFEDJNZR7,C:00E3C:0x00E522RET比较发现,-i的汇编代码效率明显高于i-方式。由于只有1条语句DJNZ,执行只需要2个时钟周期, 1个时钟周期按1 s计算,其延时精度为2 s;另外,RET需要2个时钟周期,能够达到汇编语言代码的效率。按前面的测试条件进行测试,第1次执行到断点处的时间为437 s,再次执行到该处的时间为465 s,第3次执行到断点处的时间为493 s,10次while循环的时间为28 s,整个测试结果如图3所示。图3 使用-i方式测试仿真结果图调整i的取值,i取8时延时时间为24 s,i取9时延时时间为26 s。通过分析得出,10次循环为28 s是由于外层循环造成的,其精度可以达到2 s。在设计时应该考虑参数传递和RET语句执行所需要的时间周期。实验分析发现,for语句使用-i方式,同样能够达到与汇编代码相同的精度。i取不同值时延时仿真结果如图4所示。图4 i取不同值时延时仿真结果图3 多重嵌套下的C程序延时在某些情况下,延时较长,仅使用单层循环方式是不能完成的。此时,只能使用多层循环方式,那么多重循环条件下,C程序的精度如何呢?下面是一个使用for语句实现1 s延时的函数。延时函数void delay1s(void) for(k=100;k0;k-) /定时1 sfor(i=20;i0;i-)for(j=248;j0;j-);主函数调用延时函数代码段:while(1) delay1s();scond+=1;为了直接衡量这段代码的效果,利用Keil C找出这段代码产生的汇编代码:C:0x00B37002JNZC:00B7C:0x00B5150CDEC0x0CC:0x00B7E50DMOVA,0x0DC:0x00B9450CORLA,0x0CC:0x00BB70DEJNZC:009BC:0x00BDE50BMOVA,0x0BC:0x00BF150BDEC0x0BC:0x00C17002JNZC:00C5C:0x00C3150ADEC0x0AC:0x00C5E50BMOVA,0x0BC:0x00C7450AORLA,0x0AC:0x00C970CAJNZC:0095C:0x00CB22RET分析汇编代码,其他汇编代码使用的不是DJNZ跳转方式,而是DEC和JNZ语句来实现循环判断。1条JNZ指令要花费2个时钟周期,3条指令就需要6个机器周期,MOV指令和DEC指令各需要1小时钟周期,1个时钟周期按1 s算,其精度最多达到8 s,最后加上一条LCALL和一条RET语句,所以整个延时精度较差4。利用Keil C的测试工具,在一处设置一个断点。第1次执行到中断处的时间为0.000 513 s,第2次执行到中断处的时间为1.000 922 s,时间延迟为1.000 409 s,测试结果如图5所示。对于上面的3种循环嵌套,循环次数为10020248=496 000,每次循环的时间约为2 s。图5 三重嵌套循环1 s实现时间测试结果为获取与汇编语言延时的差距,同样进行1 s的延时,程序代码段如下:LCALL DELY1SINC SecondDELY1S:MOV R5,#100D2:MOV R6,#20D1:MOV R7,#248DJNZ R7,DJNZ R6,D1DJNZ R5,D2RET通过Keil C51测试,其实际延迟时间为0.997 943 s。虽然C语言实现延时方式的汇编代码复杂度增加,但是与汇编语言实现的方式性能差距并不大。4 总结汇编语言在实时性方面具有较大的优越性,虽然使用Keil C51可以在C语言程序中嵌入汇编代码,但是复杂度明显提高。实验证明,只要合理地运用C语言,在延时编程方面就可以达到与汇编语言相近的精度。为了获得精确的时间延迟,可通过Keil C工具的仿真功能,调整延迟量,从而得到较理想的结果。参考文献1 InfiniteSpace Studio/isjfk. 51单片机KeilC延时程序的简单研究EB/OL.2 沈舷. 延时程序延时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3D建模软件产品全球代理权许可合同
- 酒店行业管理培训基地场地租赁及课程安排合同
- 2025广东合同法自考试题及答案
- 2025年建筑工程类机械员-专业管理实务参考题库含答案解析(5卷)
- 2025年学历类自考公共课高等数学(工本)-英语(二)参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)计算机与网络技术基础-电子商务概论参考题库含答案解析(5卷)
- 2025年学历类自考专业(法律)税法-中国法制史参考题库含答案解析(5卷)
- 2025年学历类自考专业(法律)环境与资源保护法-知识产权法参考题库含答案解析(5卷)
- 保育员幼儿安全培训内容课件
- 2025年学历类自考专业(法律)国际经济法概论-税法参考题库含答案解析(5卷)
- GB/T 32486-2016舞台LED灯具通用技术要求
- GB/T 13452.2-2008色漆和清漆漆膜厚度的测定
- 锚杆工程隐蔽验收记录
- 整套教学课件《现代心理与教育统计学》研究生
- 油漆安全技术说明书(MSDS)
- 基层医院如何做好临床科研课件
- RBA(原EICC)ERT应急准备与响应培训课件
- 核电质量保证培训讲义课件
- 食品安全知识竞赛参考题库500题(含答案)
- 河西走廊课件
- 药店医保网络安全应急管理制度
评论
0/150
提交评论