在编写单片机程序时,经常会用到延时函数,除了定时器外,我们经常会用到for循环来实现延时。如下所示: void delay()
{ unsigned int i;
for(i=0; i<200;i++);
}
对于延时时间要求不严格的地方我们可以大约估算一下,但有时候要求比较严格,这时候该怎么办呢?其实通过keil软件模拟的方式就可以计算出for循环的延时时间。今天讲解两种方法。
软件延时与晶振值密切相关,所以在计算之前要先确定好晶振的值,在keil中确定晶振值的方法如下图所示: 在本例中将晶振值设置为12M。程序如下: 编译,没有出现错误,下面介绍计算延时方法。 方法一差值计算法
﹀ ﹀ ﹀ 进入调试状态,设置两个断点,使程序运行到第一个断点,记录下此时的sec值,如下图所示:
此时T1 = 0.000389,单位为秒。再次使程序运行,程序会停在第二个断点处,再记录下此时的sec值,如下图所示: 此时,T2 = 0.025691,单位为秒。两个时间之差即为delay()函数的延时时间,计算如下:T = T2 - T1=(0.025691-0.000389)s=0.025302s=25.302ms。delay()函数的延时时间约为25ms。 方法二观察窗读数法
﹀ ﹀ ﹀
在调试状态下,打开Performance Analyzer,如下图所示:
同样设置好断点,再按如下设置:在Performance Analyzer观察窗点击Setup,在对话框内输入延时函数的函数名,然后点击Define,如下图所示: 使程序运行,运行至第一个断点,如下图所示: 再次让程序运行,运行至第二个断点,如下图所示:这时候,delay()延时函数已经运行完,要查看延时时间要进行如下操作:Performance Analyzer观察窗点击delay()函数,在其上方会出现时间信息,如下图所示。
可以看见运行时间为0.025298s=25.298ms,即delay()延时时间为25ms。

|