打印
[开发工具]

利用Keil 调试,精确实现软件延时

[复制链接]
610|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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"按钮。

使用特权

评论回复
5
iyoum| | 2024-3-2 07:44 | 只看该作者
// 实现延时
        for (uint32_t i = 0; i < 0x1000000; i++)
        {
            __nop();
        }

使用特权

评论回复
6
sdlls| | 2024-3-2 11:25 | 只看该作者
更精确的软件延时可以通过使用处理器特定的指令来实现。

使用特权

评论回复
7
mmbs| | 2024-3-2 17:13 | 只看该作者
可以使用for循环和volatile关键字来实现简单的软件延时。

使用特权

评论回复
8
ccook11| | 2024-3-2 19:10 | 只看该作者
这种方法的精度仍然受到处理器速度的影响。

使用特权

评论回复
9
maudlu| | 2024-3-2 23:11 | 只看该作者
在"View"菜单中选择"Timer",然后在弹出的窗口中输入你想要的时间(以毫秒为单位)。点击"Start"按钮,程序就会暂停指定的时间。

使用特权

评论回复
10
zerorobert| | 2024-3-3 08:49 | 只看该作者
void delay(uint32_t count)  
{  
    for (uint32_t i = 0; i < count; i++)  
    {  
        __NOP();  
    }  
}

使用特权

评论回复
11
bartonalfred| | 2024-3-3 10:41 | 只看该作者
想精确地实现软件延时,可以利用计数循环配合系统时钟来实现。

使用特权

评论回复
12
pmp| | 2024-3-3 12:49 | 只看该作者
在调试窗口中,选择"Step Into"(F5键)或"Step Over"(F6键)以单步执行代码。

使用特权

评论回复
13
chenci2013| | 2024-3-3 14:42 | 只看该作者
在调试窗口中,你可以查看和修改变量的值。例如,你可以查看i的值,以确定延时的精确时间。

使用特权

评论回复
14
AdaMaYun| | 2024-3-5 19:00 | 只看该作者
找到你想要暂停的地方,然后在该行代码上设置一个断点。

使用特权

评论回复
15
LOVEEVER| | 2024-3-9 16:15 | 只看该作者
精确延时有时候还是比较困难的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

3224

帖子

2

粉丝