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