51单片机延时500ms程序

51单片机延时500ms程序,第1张

void DelayM(unsigned int a){

unsigned char i

while( --a != 0){

for(i = 0i <125i++) //一个 表示空语句,CPU空旅山转。

} //i 从0加到125,CPU大概就耗时1毫秒

}

定时M毫秒的程序,晶振为12MHz。笑世a取拆升中500就为500ms

主程序中调用了迅姿delay_ms(500),每执行一个循环,就会延时500毫秒,主程序肯定变慢,毋庸置疑的。要解决这个问题,可以用定时器延时来解决,怎么说呢,孙昌汪你这个延时500毫秒,肯定是为了某些控制对象的要求而用的,比如AD转换,比如测距等模块控制,为了达到既能500毫秒左右控制一次这些模块,又不影响主程序的执行速度,可以用定时器500毫秒生成一个标志位置1,当主程序检测到该标志位为1时就清除该标志,同时执行一次模块控制。这样就解决了控制与速度的则仔矛盾问题。

根据外部晶振的不同,延时1毫秒的循环次数也不衡埋竖一样,一般12M晶振的液悉话用 for(j=timej>0j--)延时时,1毫秒咐大time大概为125左右,这里用110,大概晶振为11.0592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存