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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 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);
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:11 , Processed in 0.918609 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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