式:
DELLMOVR7,bb
DELL1MOVR6,aa
DELL2DJNZR6DELL2rel在本句中指标号DELL2
DJNZR7DELL1rel在本句中指标号DELL1
注意:循环的格式,写错很容易变成死循环,格式中的R
和标号可随意指
定。
2)执行过程
例:假设上述循环bb3aa4
外部内部
执行指令
R
的值
DJNZ转移到
循环循环
指令执行指令执行DEL顺序执行
前
后
DELLMOVR7,3R7不确定(R7)3
外部循环第一次
内部循环4次
DELL1MOVR6,4DELL2DJNZR6DELL2DELL2DJNZR6DELL2DELL2DJNZR6DELL2
R6不确定(R6)4(R6)3(R6)2
(R6)4(R6)3(R6)2(R6)1
转移到DELL2转移到DELL2转移到DELL2
DELL2DJNZR6DELL2(R6)1(R6)0顺序执行,当
前循环结束
DJNZR7DELL1
(R7)3(R7)2转移到DELL1
外部循环第二次
内部循环4次
DELL1MOVR6,4DELL2DJNZR6DELL2DELL2DJNZR6DELL2DELL2DJNZR6DELL2
(R6)0(R6)4(R6)3(R6)2
(R6)4(R6)3(R6)2(R6)1
转移到DELL2转移到DELL2转移到DELL2
2
fDELL2DJNZR6DELL2(R6)1(R6)0顺序执行,当前循环结束
DJNZR7DELL1
(R7)2(R7)1转移到DELL1
外部
DELL1MOVR6,4(R6)0(R6)4
循环第三次
内部循环4次
DELL2DJNZR6DELL2DELL2DJNZR6DELL2DELL2DJNZR6DELL2
(R6)4(R6)3(R6)2
(R6)3(R6)2(R6)1
转移到DELL2转移到DELL2转移到DELL2
DELL2DJNZR6DELL2(R6)1(R6)0顺序执行,当前循环结束
DJNZR7DELL1
(R7)1(R7)0顺序执行,当
前循环结束
3)延时时间计算
由上表可知,本循环可以分成两个部分,一个部分是内部循环:包括
DELL2DJNZR6DELL2,计算机器周期个数2(DELL2DJNZR6DELL2)×48。
外部循环包括:DELL1MOVR6,4执行一次,DELL2DJNZR6DELL2执行4
次,DJNZR7DELL1执行一次,机器周期的计算与单层循环相同,计算机器周期
个数1(DELL1MOVR6,4)2(DELL2DJNZR6DELL2)×42(DJNZR7DELL1)
11。
本例总机器周期个数外部循环×31(DELLMOVR7,3)34。
因此:双层循环的总机器周期个数1(DELLMOVR7,bb)bb【1(DELL1MOV
R6,aa)2(DELL2DJNZR6DELL2)×aa2(DJNZR7DELL1)】1bb(32aa)。
当aa比较大时,如果计算精度要求不高,可以忽略(32aa)忽略中的3,同
理可忽略1bb(32aa)中的1,此时双层循环的总机器周期个数≈2aa×bb。以
机器周期为1μs为例,延时时间≈2aa×bb×1μs,当aa和bb都取0时,延时时
间最多≈2×256×256×1μs013s。
4)延时程序设计
设计延时程序时,只要计算出aa和bb即可。为了使精度高一些,将aa的
值尽量变大,忽略(32aa)的3作用才会减少。
例1:50ms的延时程序设计(机器周期为r