DJNZ RN,REL 是一
条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,继续执行下一条指令。
DJNZ是减一不为零
转移指令(dec 1 jump if not zero):
DJNZ direct. rel
此指令是将操作数的内容减1,然后判断操作数的结果,若操作数为零,则顺序执行程序,不为零则程序转移。根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去。
DJNZ指令有两种格式:DJNZ Rn,rel和DJNZ direct,rel,前者为双字节指令,其中第二个字节存储rel的
相对地址,范围是-128~+127,所以转移范围很窄,所以转移的位置为指令的当前PC值加上rel;第二条指令的第三个字节也是存储rel的,和第一条指令的转移方式相同,都是PC+rel。
需要注意的是,每执行一次DJNZ指令时,
工作寄存器中的数会先减去1后,再判断是否返回。例如,如果Rn中原来是2,则执行两次DJNZ后,Rn中就是0了。
在单片机中,DJNZ指令的具体功能是使操作数的内容减1,并判断
操作数是否等于0,如果不等于0,则跳转至标号处,如果等于0,则顺序往下执行。利用DJNZ指令,可以进行有条件的程序转移,也可控制程序执行的次数,广泛用于进行延长时间的设计。
“DJNZ”指令经常被用在循环程序中,利用将
寄存器中的值减1不为零跳到相对地址的标号处,实现某一部分指令的重复执行,从而达到延长时间的目的。