380091044 发表于 2024-2-12 09:11:31

为啥i = MAIN_Fosc / 10000;//10000次/秒中往往是除以10K?

为啥i = MAIN_Fosc / 10000;//10000次/秒中往往是除以10K?
一直不理解,哪位老师知道指点一下,感谢


void Delay_MS(unsigned int ms) //reentrant//没必要弄重入函数
{
    unsigned int i;
    do
    {
      i = MAIN_Fosc / 10000;//10000次/秒
      while(--i);
    }
    while(--ms);
}

乘风飞扬 发表于 2024-2-12 13:06:46

延时循环指令转成汇编代码的指令周期差不多是10T,此外秒转毫秒是1000倍,所以计算公式里主频/(1000*10)

21cnsound 发表于 2024-2-12 18:34:26

测试了下,这个代码应该不对。
对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
对于1T的STC8G单片机在12MHz来讲,这个软件的延迟是1.302ms左右。

建议还是用STC-ISP来,误差非常小。
如果还是要用这个函数,经测试i = MAIN_Fosc / 96775,这是对12T的单片机来讲,其他单片机还要验证。

380091044 发表于 2024-2-20 08:29:14

21cnsound 发表于 2024-2-12 18:34
测试了下,这个代码应该不对。
对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
对于1T的STC8G ...

频率是11.0592MHz,不是12M
页: [1]
查看完整版本: 为啥i = MAIN_Fosc / 10000;//10000次/秒中往往是除以10K?