DJNZ <byte>,rel
Función :
Decremento y salto si no igual a 0.
Descripción :
La variable " byte " es decrementada en 1 y, si el resultado es diferente de 0, se ejecuta un salto relativo. Un valor original de 0 provoca un desbordamiento a 0FFH. No se modifica ningún indicador. La dirección de destino se calcula sumando el valor con signo "rel" al valor del PC después del avance de éste.
Cuando esta instrucción se utiliza para modificar las salidas de un puerto, el valor utilizado como origen será leído del " buffer " de salida de este puerto y no de las patillas de entrada.
Ejemplo :
Las posiciones de memoria interna 40H, 50H y 60H contienen respectivamente los valores01h, 70H y 15H. La secuencia
DJNZ 40H,ET1
DJNZ 50H,ET2
DJNZ 60H,ET3
efectúa un salto a la etiqueta ET2 con los valores 00H, 6FH, y 15H para las tres posiciones de memoria citadas. El primer salto a la etiqueta ET1 no se produce porque el resultado es igual a 0. Esta instrucción es un medio simple para realizar un bucle. El siguiente ejemplo envía una serie de impulsos por una salida del puerto P1 :
MOV R2,#8
REPETIR : CPL P1.7
DJNZ R2,REPETIR
DJNZ Rn, rel
Operación :
DJNZ
(PC) ¬ (PC) +2
(Rn) ¬ (Rn) - 1
si (Rn) > 0 o (Rn) < 0
entonces (PC) ¬ (PC) +rel
Código :
1 1 0 1 |
1 r r r |
Bytes : 2
Ciclos : 2
DJNZ directo, rel
Operación :
DJNZ
(PC) ¬ (PC) +2
(directo) ¬ (directo) - 1
si (directo) > 0 o (directo) < 0
entonces (PC) ¬ (PC) +rel
Código :
1 1 0 1 |
0 1 0 1 |
dirección directa |
dirección relativa |
Bytes : 3
Ciclos : 2