Documente Academic
Documente Profesional
Documente Cultură
Saltos
(parte I)
Tema 8. Saltos
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:
Tema 8. Saltos
SALTOS EN FUNCIN DE UN BIT
Nemnico Descripcin
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
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:
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.
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.
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
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
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
CAPTULO 9
19