lmn2005 发表于 2023-8-16 12:00

SC92F84H3毫秒级软件延时函数

下面是SC92F84H3毫秒级软件延时函数,估计不太准确,所以仅供参考,时钟频率设置见后面图。

void delay_ms(unsigned long ms)   //
{
    unsigned char a,b;
    while(ms--)
    for(b=50;b>0;b--)
      for(a=45;a>0;a--);
}

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

有没有实际测试过它的累积误差呢

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

如果你想要实现毫秒级的延时,可以计算出需要多少个指令周期。
页: [1] 2 3
查看完整版本: SC92F84H3毫秒级软件延时函数