有关汇编程序延时计算的问题,请教各位高人:

来源:百度知道 编辑:UC知道 时间:2024/05/25 02:33:59
先看一下这样一段常见的延时程序:
YANSHI: ;延时子程序1,精确延时882微秒
MOV R4,#20
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
已知晶振12M,执行一次DJZN操作为2μs,延时时间是(20×20)次×2μs/次=800μs,我也知道这样计算时间有误差,是粗略算法。
问题是:精确算法怎么计算的?另外84微秒如何算出来的?
请留下您的详解,感激不尽。

YANSHI: ;延时子程序1,精确延时882微秒

MOV R4,#20 ;1us
D1:
MOV R5,#20 ;1us
DJNZ R5,$ ;2us 20 * 2 = 40us
DJNZ R4,D1 ;2us 20*(1 + 2 + 40) = 860us
RET ;2us 862us

D1前面还有一条,所以总延时是:863us。
再加上调用指令的2us,总共精确延时865us。

这个数字是准确的,已经经过了KEIL软件的验证。

80由D1:MOV R5,#20 和DJNZ R4,D1产生 两句执行20次 4μs*20=80μs
外加上MOV R4,#20 RET 这4μs 就是额外的84μs