编写单片机程序时,经常使用延迟函数,除计时器外,还经常使用for循环实现延迟。 如下所示。
void delay () )
{
无符号inti;
for(I=0; i200; I;
}
对于延迟时间要求不严格的地方可以概算一下,但也有要求严格的情况。 那该怎么办呢? 实际上,可以通过keil软件模拟的方式计算for循环的延迟时间。 今天说明两种方法。
由于延迟时间与石英振动值密切相关,因此在计算之前预先确定石英振动值,用keil确定石英振动值的方法如下图所示。
在本例中,设石英振动值为12M。 步骤如下。
编译,没有错误。 介绍延迟的计算方法。
方法1
进入调试状态,设定两个断点,使程序运行到第一个断点,如下图所示,并记录此时的sec值。
在这种情况下,T1=0.000389,单位为秒。 再次运行该程序时,程序将在第二个断点处停止,并记录此时的sec值,如下图所示。
此时,T2=0.025691,单位为秒。 两个时间之差是delay ()函数的延迟时间,计算公式如下:
t=T2-T1=(0.025691-0.000389 ) s=0.025302s=25.302ms毫秒。 delay ) )函数的延迟时间约为25毫秒。
2 .方法2
在调试状态下,打开性能分析程序,如下图所示。
同样地设定断点,如下所示进行设定。 在性能分析程序观察窗口中,单击Setup,在对话框中输入延迟函数的函数名称,然后单击Define。 下图:
运行程序并运行到第一个断点,如下图所示。
再次运行程序,直到第二个断点,如下图所示。
此时,delay ) )延迟函数已经执行。 要查看延迟时间,请执行以下操作: 在性能分析程序窗口中延迟) )函数,然后在其上显示时间信息。 请参照下图。
可以看出,执行时间为0.025298s=25.298ms,即delay ()延迟时间为25ms。
我不知道你对今天介绍的两种方法有什么看法,欢迎评论。
本阅读号致力于单片机、ARM等嵌入式软硬件设计经验的共享,秉承“人人都有电子设计经验的曾经的摩托车”的理念,我们不孤单,共同努力。
公众号: micropoint 8网站: www.picmcu.com