C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算?CPU晶振频率11。05

C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算?CPU晶振频率11。05,第1张

你这个110592是匹配波特率所用的晶振,机器周期只是约等于1us。首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是有时间吗,你可以看一下算算CPU空跑的次数,很简单。

比如
c51单片机的定时器1
是16位定时器
那么就是最大是65536
如果晶振频率是12MHZ
那么
最大定时时间是65536毫秒
你定时一秒
就可以把定时器装初值
是15536
15536加到65536
正好是50毫秒
经过20次50毫秒
那么就是1s

程序中出现的delay(n),表示该函数内的while(i--);循环语句的循环体执行n次。
至于执行n次究竟是多少时间,那就要看:您用的是什么CPU、晶振的频率是多少、您的C语言用的是哪个版本,其中的优化方式是什么、……。
这些因素,都会影响一个语句的执行时间,当然总时间也就受影响了。
不过有一点可以肯定:同一个环境下,n越大,延迟时间越长,大致呈正比。
不过我这里说“大致呈正比”,是假定系统中不存在可以打断它的“中断服务程序”。如果有中断来不定期打断它,那时间就很不确定了。
因为n的类型是unsigned int ,在常见的环境下最大可取65535。若n取65535,现在常见的单片机或计算机的条件下,这个时间少则若干毫秒,多则也就几秒。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13063293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存