[资料下载] SC92F84H3毫秒级软件延时函数

[复制链接]
 楼主| lmn2005 发表于 2023-8-16 12:00 | 显示全部楼层 |阅读模式
下面是SC92F84H3毫秒级软件延时函数,估计不太准确,所以仅供参考,时钟频率设置见后面图。

  1. void delay_ms(unsigned long ms)   //
  2. {
  3.     unsigned char a,b;
  4.     while(ms--)
  5.     for(b=50;b>0;b--)
  6.         for(a=45;a>0;a--);
  7. }
01.jpg
tpgf 发表于 2023-9-2 10:36 | 显示全部楼层
哪些情况会导致延时函数的延时时间不准确呢
nawu 发表于 2023-9-2 10:54 | 显示全部楼层
这个收到主频的限值 而且为什么不用定时器呢
zljiu 发表于 2023-9-2 11:35 | 显示全部楼层
这个延时函数会收到其他线程的干扰吗
tfqi 发表于 2023-9-2 11:52 | 显示全部楼层
毫秒级延时函数完全可以通过定时器进行精确操作啊
caigang13 发表于 2023-9-2 18:16 来自手机 | 显示全部楼层
这种延时是阻塞方式
gwsan 发表于 2023-9-2 20:11 | 显示全部楼层
延时函数的优先级别是高还是低呢
aoyi 发表于 2023-9-2 21:00 | 显示全部楼层
有没有实际测试过它的累积误差呢

评论

没有,没有绝对准确的  发表于 2023-9-3 15:04
alvpeg 发表于 2023-9-7 13:29 | 显示全部楼层
定时器来实现延时。              
beacherblack 发表于 2023-9-7 13:48 | 显示全部楼层
可以这样实现3毫秒的延时:

c
void delay_ms(void)
{
    int i;
    for(i = 0; i < 15000; i++)
    {
        // 这里循环一次假设需要N个指令周期
        // 具体的指令取决于你的循环体内容
    }
}
uiint 发表于 2023-9-7 14:03 | 显示全部楼层
可以在程序中设置一个计数器,然后在需要延时的时候,通过累加计数器的值来计算延时时间。
yeates333 发表于 2023-9-7 14:12 | 显示全部楼层
延时函数的实现需要考虑到具体的硬件平台和实际需求
linfelix 发表于 2023-9-7 15:15 | 显示全部楼层
可以达到毫秒级的延时效果?              
claretttt 发表于 2023-9-7 15:48 | 显示全部楼层
外层循环控制延时的总时间,内层循环通过空操作指令来实现延时。在内层循环中,使用了一个110的循环次数,这个值可以根据具体的应用场景进行调整,以获得更精确的延时效果。
wangdezhi 发表于 2023-9-7 15:57 | 显示全部楼层
单片机的延时函数受到时钟频率、编译器优化以及其他代码的影响,
hearstnorman323 发表于 2023-9-7 16:03 | 显示全部楼层
可以在程序中设置一个计数器,当计数器的值达到1000时,执行延时函数,否则正常执行程序。
ccook11 发表于 2023-9-7 16:54 | 显示全部楼层
void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 1141; j++)   // 假设时钟频率为11.0592MHz,循环次数可根据实际情况调整
        {
            asm("nop");   // 空操作,用于延时
        }
    }
}
gygp 发表于 2023-9-19 10:07 | 显示全部楼层
如果你需要更精确的延时,或者需要在CPU繁忙的时候实现延时,你可能需要使用硬件定时器或者其他的硬件设备来实现。
abotomson 发表于 2023-9-19 10:23 | 显示全部楼层
最高时钟频率为1MHz。对于毫秒级软件延时函数,可以通过使用延时寄存器来实现。
1988020566 发表于 2023-9-19 10:32 | 显示全部楼层
如果你想要实现毫秒级的延时,可以计算出需要多少个指令周期。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

597

帖子

1

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