- 5
- 0
- 约3.21千字
- 约 4页
- 2017-08-24 发布于重庆
- 举报
延时精度研究.doc
在单片机应用中,经常会遇到需要短时间延时的情况,一般都是几十到几百μ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,0x07 C:0x00E81FDECR7 C:0x00E9EEMOVA,R6 C:0x00EA70FAJNZC:00E6 C: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(voi
您可能关注的文档
- 工程车辆电子技术总结全.doc
- 工程造价-本科毕业设计论文模板.doc
- 工艺流程+高速钢及各种特殊钢的制程和假冒产品的特征和区分.doc
- 工艺设计参数.doc
- 巧析线性电路之节点分析法.doc
- 差分电路与桥式电路的区别.doc
- 差动放大电路工作原理.doc
- 差动滑轮的省力原理.doc
- 差动试验中可视化编程的应用.doc
- 差序格局差序格局与法治的应用.doc
- 2025广东广州市天河区拟招聘英语实习老师1人备考题库附答案.docx
- 2025广东广州市天河区城市管理第二保洁所招聘编外工作人员4人笔试备考试卷附答案解析.docx
- 2025广东广州市越秀区流花街道办事处招聘综合事务中心辅助人员1人笔试历年题库附答案解析.docx
- 2025广东广州市花都区新雅街清初级中学招聘临聘教师1人备考历年题库带答案解析.docx
- 2025广东广州市天河区城市管理第二保洁所招聘编外工作人员4人笔试备考试卷带答案解析.docx
- 江苏省盐城市东台市三仓镇区中学2026届八年级数学第一学期期末教学质量检测试题含解析.doc
- 2025广东广州市天河区城市管理第二保洁所招聘编外工作人员4人备考题库带答案解析.docx
- 江苏省盐城市亭湖区2026届数学八上期末考试试题含解析.doc
- 安徽省蚌埠市淮上区2026届数学八年级第一学期期末达标检测模拟试题含解析.doc
- 2025广东广湛城旅游轮有限公司招聘备考历年题库附答案解析.docx
最近下载
- 某县纪委书记、监委主任2025年度民主生活会对照检查材料.docx VIP
- 项目8 物料识别系统搭建教学设计 高教版 传感器技术应用(双色).doc VIP
- 时政分享(修订版).pptx VIP
- 花椒管理技术课件.pptx
- 青岛版小学六年级科学上册全套一至五单元含填空大题-完整版全册.pdf VIP
- 2024年09月06日省环境评审中心账号高地500千伏输变电工程环境影响报告书技术评估报告.pdf VIP
- 2025年高一必修一生物期末考试卷及答案.doc VIP
- 武汉大学抬头信签纸.docx VIP
- 双曲线的焦半径圆性质探索过程.doc VIP
- (22页PPT)机房搬迁服务解决方案.pptx VIP
原创力文档

文档评论(0)