单片机的延时,延时时间长度是怎么算的?最好有一个例子,来说明!

如题所述

如果单片机晶振为6M,机器周期即为2us=12/fosc
汇编语句对时间的把握精确于C语言,所以参考不同指令的长度,
就可以算出你的延迟时间。
单片机的延时程序:
MOV
R7,#200
LOOP1:MOV
R6,#125
LOOP2:DJNZ
R6,LOOP2
DJNZ
R7,LOOP1
RET
第一句为单周期指令,耗时2us
第二句执行了200次,耗时2*200us
第三句为双周期指令,执行了125*200次,耗时2*2*125*200us
第四句同第三句,耗时2*2*200us
第五句双指令周期
总够耗时2+2*200+2*2*125*200+2*2*200+2*2
约为100ms
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-22
你这是死循环延时,太浪费单片计的运行时间了,这也是最低级的写程序的方法。
用定时器中断处理是一种方法,但在定时器不多,或者定时器还有其它用途的场合就不好办了。而且这会打断其它流程的正常操作。
最好的做法是做成周期查询的,类似与操作系统的任务,定一个时间基数,比如1ms,然后单片机产生1ms中断,中断里只对变量a进行加1操作。主程序里任何需要定时的任务,就去查询当前a的值。比如延时就是记下当前的a值,然后等到a的值变到需要的时间值后再执行。
但不要死等a的值变化,主程序应该是轮询式的,到了需要的时间点就去做该做的事,没到时间,主程序就去轮询其它任务。这样的单片机的处理能力才真的被释放出来,这个程序也就有随意添加其他任务的可能。
第2个回答  2020-05-08
延时长度根据你的振荡器的频率和后分频来计算的。
最简单就是写一段延时,用示波器测试一下。
简单的延时可以用nop循环,长延时尽量用定时器来做。本回答被提问者采纳