文档介绍:汇编延时程序算法指令周期、机器周期与时钟周期指令周期: CPU 执行一条指令所需要的时间称为指令周期, 它是以机器周期为单位的,指令不同,所需的机器周期也不同。时钟周期:也称为振荡周期,一个时钟周期=晶振的倒数。 MCS-51 单片机的一个机器周期=6 个状态周期=12 个时钟周期。 MCS- 单片机的指令有单字节、双字节和三字节的, 它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即 12 个时钟周期,所以一条单周期指令被执行所占时间为 12* ( 1/12000000 ) =1μs。程序分析例1 50ms 延时子程序: DEL : MOV R7, #200 ① DEL1 : MOV R6, #125 ② DEL2 : DJNZ R6, DEL2 ③ DJNZ R7, DEL1 ④ RET⑤精确延时时间为: 1+( 1*200 )+( 2*125*200 )+( 2*200 ) +2 =( 2*125+3 ) *200+3 ⑥=50603 μs≈ 50ms 由⑥整理出公式( 只限上述写法) 延时时间=( 2* 内循环+3)* 外循环+3⑦详解: DEL 这个子程序共有五条指令, 现在分别就每一条指令被执行的次数和所耗时间进行分析。第一句: MOV R7, #200 在整个子程序中只被执行一次,且为单周期指令,所以耗时 1μs 第二句: MOV R6, #125 从②看到④只要 R7-1 不为 0, 就会返回到这句,共执行了 R7 次,共耗时 200 μs 第三句: DJNZ R6, DEL2 只要 R6-1 不为 0, 就反复执行此句(内循环 R6次), 又受外循环 R7 控制, 所以共执行 R6*R7 次, 因是双周期指令,所以耗时 2*R6*R7 μs。例21 秒延时子程序: DEL : MOV R7,#10 ① DEL1 : MOV R6, #200 ② DEL2 : MOV R5, #248 ③ DJNZ R5,$④ DJNZ R6, DEL2 ⑤ DJNZ R7, DEL1 ⑥ RET⑦对每条指令进行计算得出精确延时时间为: 1+( 1*10 )+( 1*200*10 )+( 2*248*200*10 )+( 2*200*10 )+( 2*10 ) +2 =[( 2*248+3 ) *200+3]*10+3 ⑧=998033 μs≈ 1s 由⑧整理得:延时时间=[( 2* 第一层循环+3)* 第二层循环+3]* 第三层循环+3⑨此式适用三层循环以内的程序, 也验证了例 1 中式⑦( 第三层循环相当于 1 )的成立。注意, 要实现较长时间的延时, 一般采用多重循环, 有时会在程式序里加入