为啥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);
}
延时循环指令转成汇编代码的指令周期差不多是10T,此外秒转毫秒是1000倍,所以计算公式里主频/(1000*10) 测试了下,这个代码应该不对。
对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
对于1T的STC8G单片机在12MHz来讲,这个软件的延迟是1.302ms左右。
建议还是用STC-ISP来,误差非常小。
如果还是要用这个函数,经测试i = MAIN_Fosc / 96775,这是对12T的单片机来讲,其他单片机还要验证。 21cnsound 发表于 2024-2-12 18:34
测试了下,这个代码应该不对。
对于12T的STC89C52在12MHz来讲,这个软件延迟是9.615ms左右;
对于1T的STC8G ...
频率是11.0592MHz,不是12M
页:
[1]