[开发工具] 利用Keil 调试,精确实现软件延时

[复制链接]
 楼主| jkl21 发表于 2024-2-29 12:04 | 显示全部楼层 |阅读模式
  • mS级带参数延时子程序

    void delay_ms(uint z)  //延时子程序

    {

       uint x,y;

       for(x=z;x>0;x--)

       for(y=110;y>0;y--);

    }

    上面这个程序的软件调试过程!晶振为12M



  • 第一步:选择单片机晶振





  • 第二步:全编译




  • 第三步:按d进入软件调试






  • 第四步:进入程序设置两个断点:






  • 第五步:按全速运行至第一个断点:注意时间是0.000389s






  • 第六步:再按一次全速运行至第二个断点:注意时间是1.013412s





  • 小结:两个相差时间就是差不多1s 就是执行delay_ms(1000)的时间



geraldbetty 发表于 2024-3-1 19:58 | 显示全部楼层
找到你想要暂停的地方,然后在该行代码上设置一个断点。你可以在代码编辑窗口的左侧边缘点击鼠标左键来设置断点。
biechedan 发表于 2024-3-1 20:11 | 显示全部楼层
可以使用断点、监视窗口(Watches)和程序计数器(PC)来检查延时函数的执行情况和定时器的状态。
ulystronglll 发表于 2024-3-2 00:41 | 显示全部楼层
选中"Use Debug Information"和"Use HW Breakpoints"选项,然后点击"OK"按钮。
iyoum 发表于 2024-3-2 07:44 | 显示全部楼层
// 实现延时
        for (uint32_t i = 0; i < 0x1000000; i++)
        {
            __nop();
        }
sdlls 发表于 2024-3-2 11:25 | 显示全部楼层
更精确的软件延时可以通过使用处理器特定的指令来实现。
mmbs 发表于 2024-3-2 17:13 | 显示全部楼层
可以使用for循环和volatile关键字来实现简单的软件延时。
ccook11 发表于 2024-3-2 19:10 | 显示全部楼层
这种方法的精度仍然受到处理器速度的影响。
maudlu 发表于 2024-3-2 23:11 | 显示全部楼层
在"View"菜单中选择"Timer",然后在弹出的窗口中输入你想要的时间(以毫秒为单位)。点击"Start"按钮,程序就会暂停指定的时间。
zerorobert 发表于 2024-3-3 08:49 | 显示全部楼层
void delay(uint32_t count)  
{  
    for (uint32_t i = 0; i < count; i++)  
    {  
        __NOP();  
    }  
}
bartonalfred 发表于 2024-3-3 10:41 | 显示全部楼层
想精确地实现软件延时,可以利用计数循环配合系统时钟来实现。
pmp 发表于 2024-3-3 12:49 | 显示全部楼层
在调试窗口中,选择"Step Into"(F5键)或"Step Over"(F6键)以单步执行代码。
chenci2013 发表于 2024-3-3 14:42 | 显示全部楼层
在调试窗口中,你可以查看和修改变量的值。例如,你可以查看i的值,以确定延时的精确时间。
AdaMaYun 发表于 2024-3-5 19:00 | 显示全部楼层
找到你想要暂停的地方,然后在该行代码上设置一个断点。
LOVEEVER 发表于 2024-3-9 16:15 | 显示全部楼层
精确延时有时候还是比较困难的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

3652

帖子

2

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

40

主题

3652

帖子

2

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