请教关于单片机汇编的一个延时问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 14:56:03
第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次 请问为什么还要受外循环控制啊?怎么是成绩关系
例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

djnz r7,del1 这句说的是:只要r7不为零 就转到del1,那么执行起来就是这样:r7自己减1一直到等于零(那么就是这句话执行r7次),每执行一次都要跳转到del1,也就是给r6置初值并执行下一句:del2(r6减1,直到r6=0不然跳转到del2,也就是它自己这句)所以说,r7每减一,r6都要经历从#125到0的过程
那么,此时,r6就是内循环,r7是外循环。

这个程序,确实是双重循环,R6控制的是内、R7控制的是外循环。

为了说明这个控制关系,可见下面的插图。

红线内是内层循环,耗时250;

兰线内是包括了外层循环,耗时(1+250+2)×200;

……

因为DEL2标号段后面还有一个语句:DJNZ R7,DEL1,所以受外循环控制, 即当R7不为零时跳转到DEL1标号段执行。执行DJNZ R6,DEL2 时,当R6为零时执行下一语句DJNZ R7,DEL1,只有当R7为0时菜执行RET,这样就执行了