找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2605|回复: 0
打印 上一主题 下一主题
收起左侧

单片机C语言编程:利用keil编程环境实现精准延时

[复制链接]
跳转到指定楼层
楼主
ID:117358 发表于 2016-6-5 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在编写单片机程序时,经常会用到延时函数,除了定时器外,我们经常会用到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。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表