新闻中心

EEPW首页>嵌入式系统>设计应用> Keil C51精确延时程序设计

Keil C51精确延时程序设计

作者: 时间:2013-05-16 来源:网络 收藏


2时间的计算
在开发过程中,经常需要知道代码执行的时间,以确定时间。在单片机开发中经常使用硬件或中的一些功能来确定时间。下面通过在频率12 MHz晶振下的一些实例进行分析。
2.1 利用示波器确定延时时间
单片机系统开发应用中,经常用示波器来确定代码执行的时间,如在延时后面进行IO口中的某位电平翻转,用示波器来观察IO中某位输出的标准PWM波形来确定延时时间,但是此方法必须是用来计算延时时间为毫秒级别的延时程序,否则会存在误差因为在进行IO口电平翻转和程序执行结束跳转到while函数入口,需要占几μm的时间。例如上面介绍的for循环编写的延时程序中,假设实参为249,则△t=3×249+5×(249+1)+5=2 002μs≈2 ms。
c.JPG
将上述代码经编译后生成HEX文件,写入单片机中,利用Proteus中的虚拟示波器观察P1.0后波形的变化。

本文引用地址://m.amcfsurvey.com/article/170502.htm

d.JPG


从图1的PWM波形可以看出,高电平或者低电平占的时间分别为2 ms,即为以上延时程序所执行的时间,由于示波器精度的问题,存在误差为2μs。所以用这种方法确定延时时间,会存在一定误差。
2.2 利用确定延时时间
2.2.1C51反汇编
对于经验丰富的开发者,可以利用Keil C51中反汇编的功能,仔细分析C语言转化成的汇编代码,从而也可以计算出代码执行所需的时间,得出延时时间。在Keil C51中编写好程序后,按ctrl+F5进入软件调试状态,然后点击工具栏的view → disassembly window,即可看到编译生成的汇编代码。例如2.1中例子的汇编代码为:
e.JPG
分析上面的汇编代码,可以看出调用delay函数时,先执行MOV R7,#0xF9然后执行LACALL跳转到delay函数的入口处,一共占用3个机器周期。而地址0x000F到0x0013的指令一共被执行了250次,0x0015到0x0016的语句被执行了249次。最后执行PET语句,占用2个机器周期。则delay函数的执行时间△t=3×249+5×250+5=2 002μs。另外从上述汇编语句中可以看出,P1=P1^0x01相当于汇编中XRL direct,#data指令,占用2个机器周期。
2.2.2 Keil C51软件调试模式
在开发过程中,还可以利用Keil C51编译器中的断点调试功能来模拟执行延时代码所需的时间。上述举例进入软件调试状态后如图2所示。

f.JPG

c语言相关文章:c语言教程


尘埃粒子计数器相关文章:尘埃粒子计数器原理
晶振相关文章:晶振原理
燃气报警器相关文章:燃气报警器原理


评论


相关推荐

技术专区

关闭