[技术问答] 51单片机学习笔记(10)——Keil延时软件仿真

[复制链接]
911|2
 楼主| ZZY001 发表于 2022-3-23 16:00 | 显示全部楼层 |阅读模式
C语言编程常用的有4种延时方法:
9037162385022ca528.png

在某些时候,我们想要知道程序里面的延时函数到底延时多长时间,这时候就可以用Keil软件仿真来实现。

①在keil中编写一个简单的延时应用程序:
#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

void delay(u16 time)
{
        while(time--);
}

void main()
{
        delay(1);
        delay(1);
        delay(1);
}
8960862384f4dca2b8.png

②点击程序编译按键,编译程序,保证程序能够正常运行,没有报错。
6995562384f53a78ce.png
③进入【Options for Target…】,设置【Target】选项中的【Xtal】,根据实际使用的开发板的晶振频率修改该数值,若单片机晶振为11.0592M,则将数字修改为11.0592。我使用的是12M,因此将数值设为12。
1042162384f592a359.png
④选中【Debug】选项中的【Use Simulator】,即用软件仿真,点击【OK】,完成软件仿真设置。
2134462384f5e73fb9.png
⑤选择菜单项【 Debug–>Start/Stop Debug Session】,或者点击下图中标注的按钮,就会进入软件仿真窗口。
6939162384f649a002.png

9643362384f6c5b8a8.png

仿真界面中黄色箭头表示程序当前的位置
⑥我们想要观察C语言代码延时函数的运行时间,在最左侧的那个Registers 的框内有一个【sec】选项,这个就是程序运行的时间。我们单击【RST】复位按键,程序复位,黄色箭头指向程序第一行,sec参数值变为0。
4318062384f75d5921.png
⑦为了观察程序运行的时间,我们对程序中的延时函数设置断点(当程序运行到断点的时候就会停下来),通过观察sec的值来计算得到延时函数的运行时间。(设置断点的方式:移动鼠标在程序左边灰色部分单击)
3294062384f7dec728.png
⑧点击全速运行按键,程序执行到13行,sec参数值变为0.00038900,再点击全速运行按键,程序运行到14行,sec参数值变为0.00041400,再点击全速运行按键,程序运行到15行,sec参数值变为0.000439。(sec单位为秒s)。
2000562384f83733b2.png

246562384f8845ff6.png

8162384f924a615.png

分析:程序从13行运行到14行花费的时间是25us,从14行运行到15行花费的时间也是25us,因此,通过软件仿真我们可以知道,延时函数delay(1)运行的时间大致为25us。


小灵通2018 发表于 2022-3-23 20:21 | 显示全部楼层
看延时的长短了,如果超过10个周期,那就用定时器稳妥。
小灵通2018 发表于 2022-3-23 20:22 | 显示全部楼层
延时的时间越长用定时器越靠谱,特别短的延时,就是直接跑个空指令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

60

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部