延时是靠CPU执行无关指令,把时间浪费掉。
具体来说,DJNZ指令需要2个周期,循环250次就是500个周期,两层循环就是500*500个周期,你调用一次DELAY子程序,CPU就空转250000个周期(注意这个计算不精确),如果晶振是12MHz,那就意味着时间过去了250ms,也就是延时250ms
本程序的耗时计算如下:
1
+
[1
+
(1
+
1
+
2)
*
249
+
2]
*
5
+
2
=
4998
t
如果再算上主程序中的调用指令的2t,总共延时5000t。
如果时钟频率是6mhz,那么正好延时10ms。