Sunteți pe pagina 1din 19

Tema 8

Saltos
(parte I)

Tema 8. Saltos

Ya vimos el salto incondicional con goto.

SALTOS CONDICIONALES
El repertorio del PIC16F84 tambin dispone de instrucciones de salto condicional, que son aquellas que producen un salto en funcin de que se cumpla o no una condicin. Estas instrucciones son el nico medio para realizar bifurcaciones condicionales en un programa. Hay 4 instrucciones de salto condicional clasificadas en 2 grupos: btfsc, btfss que pueden producir el salto en funcin del estado de un bit decfsz, incfsz que pueden producir el salto en funcin del contenido de un registro distinto de cero. Las instrucciones de salto no afectan a los flags del registro STATUS (C, DC y Z).

Tema 8. Saltos
SALTOS EN FUNCIN DE UN BIT

Son muy poderosas ya que permiten al programa tomar decisiones en funcin del estado de un bit de cualquier registro o puerto de entrada/salida. Hay 2 instrucciones de este tipo:

btfsc f,b btfss f,b

Tema 8. Saltos
SALTOS EN FUNCIN DE UN BIT
Nemnico Descripcin

Bit Test f, Skip if Clear.


(Salta si el bit b del f es 0.) - Si el bit nmero b del registro f es 1 la instruccin que sigue a sta se ejecuta normalmente. - Si el bit nmero b del registro f es 0 la instruccin que sigue a sta se ignora y se salta.

btfsc f,b

Ejemplo: Aqu btfsc Flag,1 ;Si el bit 1 del registro Flag es 0 salta Falso goto ProcesoX ; Ha sido 1 Verdad ........... ; Ha sido 0 Antes: Despus: (PC)= Direccin de Aqu Si el bit 1 del registro Flag=0, (PC)=Direccin de Verdad Si el bit 1 del registro Flag=1, (PC)=Direccin de Falso

Tema 8. Saltos
SALTOS EN FUNCIN DE UN BIT
Nemnico Descripcin

Bit Test f, Skip if Set.


(Salta si el bit b del f es 1.) - Si el bit nmero b del registro f es 0 la instruccin que sigue a sta se ejecuta normalmente. -Si el bit nmero b del registro f es 1 la instruccin que sigue a sta se ignora y se salta.

btfss f,b

Ejemplo: Aqu btfss Flag,4 ;Si el bit 4 del registro Flag es 1 salta Falso goto ProcesoX ; Ha sido 0 Verdad ........... ; Ha sido 1 Antes: Despus: (PC)= Direccin de Aqu Si el bit 4 del registro Flag=1, (PC)=Direccin de Verdad Si el bit 4 del registro Flag=0, (PC)=Direccin de Falso

Tema 8. Saltos
SALTOS EN FUNCIN DE UN BIT EJEMPLO: Saltos_01.asm

Tema 8. Saltos
SALTOS EN FUNCIN DE UN REGISTRO
Las instrucciones de salto condicional:

decfsz f,d incfsz f,d


pueden producir el salto en funcin del contenido de un registro distinto de cero y son casos especiales de las instrucciones de incremento y decremento de un registro analizadas en el tema anterior (decf e incf).

Tema 8. Saltos
SALTOS EN FUNCIN DE UN REGISTRO
Nemnico Descripcin

Decrement f, Skip if 0.
( (f)-1 destino y salta si 0 si d=0, destino=(W) si d=1, destino=(f) )

decfsz f,d

Esta instruccin decrementa en una unidad el contenido del registro f. Almacena el resultado en (W ) si d=0 y en (f) si d=1. Despus de decrementar, pueden ocurrir dos casos: - Si el resultado es distinto de cero la instruccin que sigue a sta se ejecuta normalmente -Si el resultado es cero la instruccin que sigue a sta se ignora y se salta.

Ejemplo: Aqu EsCero NoEsCero

decfsz Contador,F goto NoEsCero .................. ................... ...................

Antes: Despus:

(PC)= Direccin de Aqu (Contador)=(Contador)-1 y adems: Si (Contador)=0, (PC)=Direccin de EsCero Si (Contador)0, (PC)=Direccin de Aqu+1 (goto NoEsCero)

Tema 8. Saltos
SALTOS EN FUNCIN DE UN REGISTRO
Nemnico Descripcin

Increment f, Skip if 0.
( (f)+1 destino y salta si 0 si d=0, destino=(W) si d=1, destino=(f) )

incfsz f,d

Esta instruccin incrementa en una unidad el contenido del registro f. Almacena el resultado en (W ) si d=0 y en (f) si d=1. Despus de incrementar, pueden ocurrir dos casos: -Si el resultado es distinto de cero la instruccin que sigue a sta se ejecuta normalmente. -Si el resultado es cero (porque al incrementarse se ha desbordado y ha pasado del nmero 0xFF al 0x00) la instruccin que sigue a sta se ignora y se salta.

Ejemplo: Aqu Continua Bucle

incfsz Contador,F goto Bucle ................... ................... ...................

Antes: Despus:

(PC)= Direccin de Aqu (Contador)=(Contador)+1 y adems: Si (Contador)=0 (256), (PC)=Direccin de Continua Si (Contador)0, (PC)=Direccin de Aqu+1 (goto Bucle)

Tema 8. Saltos
COMPARACIN ENTRE REGISTROS
Una de las ms significativas aplicaciones de los saltos condicionales es la comparacin entre registros:

COMPROBAR QUE UN REGISTRO VALE 0 COMPROBAR LA IGUALDAD ENTRE 2 REGISTROS COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO

10

Tema 8. Saltos
COMPROBAR QUE UN REGISTRO VALE 0
Para saber si un registro es 0 hay que cargar el registro sobre s mismo mediante la instruccin movf, y as el contenido de f no cambia pero s se afecta al flag Z. Ejemplo: movf Dato,F btfss STATUS,Z goto NoesCero EsCero ............... ............... NoesCero............... ...............

11

Tema 8. Saltos
COMPROBAR LA IGUALDAD ENTRE 2 REGISTROS
Por ejemplo para comprobar si el contenido de los registros Dato1 y dato2 son iguales el programa sera: Ejemplo: movf Dato1,W subwf Dato2,W btfsc STATUS,Z goto Iguales NoIguales............... ............... Iguales ............... ............... ; (Dato1)(W) ;(Dato2)-(Dato1)(W)

12

Tema 8. Saltos
COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO
En este caso hay que realizar la resta de ambos. As siendo A y B dos registros cualesquiera y haciendo la operacin (A-B) se tienen las siguientes posibilidades:

Operacin (A-B)

Resultado

Flags

A>B A<B A=B

Positivo Negativo Cero

C=1 y Z=0 C=0 y Z=0 C=1 y Z=1

13

Tema 8. Saltos
COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO

Ejemplo: movf DatoB,W subwf DatoA,W btfss STATUS,C goto Menor ............... ............... ............... ............... ; (DatoB)(W) ;(DatoA)-(DatoB)(W) ;C=1? ;C=1, ha sido (DatoA)>=(DatoB) ;C=0, ha sido (DatoA)<(DatoB)

MayorIgual Menor

14

Tema 8. Saltos
COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO Ejemplo (el de la prctica 2):

15

Tema 8. Saltos

Ms ejemplos con instrucciones de saltos..

16

Tema 8. Saltos
Ejemplo : Saltos_02.asm

17

Tema 8. Saltos
Ejemplo ; Saltos_05.asm

18

BIBLIOGRAFA
"Microcontrolador PIC16F84, Desarrollo de proyectos" E. Palacios, F. Remiro, L.J. Lpez. Ra-Ma, 2004

Podis encontrar ms informacin de este Tema 8 en el

CAPTULO 9

19

S-ar putea să vă placă și