单片机C语言编程:利用keil编程环境实现精准延时
STM32开发板的硬件已经做回来了,我手动焊了两块,目前正在调试部分程序来验证硬件设计的合理性,如果调试完毕没有问题的话,我会将原理发给大家,并统计下物料成本,如果需要的人多,我可以把它做出来,以开发板的硬件资源,每天讲解STM32单片机,包括硬件设计和程序讲解。希望大家支持。
在编写单片机程序时,经常会用到延时函数,除了定时器外,我们经常会用到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。
本订阅号致力于单片机、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念,成功路上不孤单,我们一起努力。
公众号:micropoint8 网址:www.picmcu.com
玩转嵌入式
单片机|软件|硬件|嵌入式
投稿、合作、赞助,请邮件:
zhenxing2000@126.com