找回密码
 立即注册
查看: 271|回复: 3

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

[复制链接]
  • TA的每日心情
    奋斗
    昨天 08:17
  • 签到天数: 168 天

    [LV.7]常住居民III

    116

    主题

    474

    回帖

    620

    积分

    高级会员

    积分
    620
    发表于 2024-2-12 09:11:31 | 显示全部楼层 |阅读模式
    为啥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);
    }

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2024-2-12 13:06:46 来自手机 | 显示全部楼层
    延时循环指令转成汇编代码的指令周期差不多是10T,此外秒转毫秒是1000倍,所以计算公式里主频/(1000*10)
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:10
  • 签到天数: 110 天

    [LV.6]常住居民II

    10

    主题

    583

    回帖

    926

    积分

    高级会员

    积分
    926
    发表于 2024-2-12 18:34:26 | 显示全部楼层
    测试了下,这个代码应该不对。
    对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
    对于1T的STC8G单片机在12MHz来讲,这个软件的延迟是1.302ms左右。

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:17
  • 签到天数: 168 天

    [LV.7]常住居民III

    116

    主题

    474

    回帖

    620

    积分

    高级会员

    积分
    620
     楼主| 发表于 2024-2-20 08:29:14 | 显示全部楼层
    21cnsound 发表于 2024-2-12 18:34
    测试了下,这个代码应该不对。
    对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
    对于1T的STC8G ...

    频率是11.0592MHz,不是12M
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 04:18 , Processed in 0.056362 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表