Tema 8. Saltos

Tema 8
Saltos
(parte I)
1
Tema 8. Saltos
Ya vimos el salto incondicional con “goto”.
SALTOS CONDICIONALES
El repertorio del PIC16F84 también dispone de instrucciones de salto condicional,
que son aquellas que producen un salto en función de que se cumpla o no una
condición. 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 función del estado de un bit
•decfsz, incfsz à que pueden producir el salto en función del contenido de un
registro distinto de cero.
Las instrucciones de salto no afectan a los flags del registro STATUS (C, DC y Z).
2
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN BIT
Son muy poderosas ya que permiten al programa tomar decisiones en
función 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
3
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN BIT
Nemónico
Descripción
Bit Test f, Skip if Clear.
(Salta si el bit “b” del “f” es 0.)
btfsc f,b
- Si el bit número “b” del registro “f” es “1” la instrucción que
sigue a ésta se ejecuta normalmente.
- Si el bit número “b” del registro “f” es “0” la instrucción que
sigue a ésta se ignora y se salta.
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:
Después:
(PC)= Dirección de “Aquí”
Si el bit 1 del registro Flag=0, (PC)=Dirección de “Verdad”
Si el bit 1 del registro Flag=1, (PC)=Dirección de “Falso”
4
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN BIT
Nemónico
Descripción
Bit Test f, Skip if Set.
(Salta si el bit “b” del “f” es 1.)
btfss f,b
- Si el bit número “b” del registro “f” es “0” la instrucción que
sigue a ésta se ejecuta normalmente.
-Si el bit número “b” del registro “f” es “1” la instrucción que
sigue a ésta se ignora y se salta.
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:
Después:
(PC)= Dirección de “Aquí”
Si el bit 4 del registro Flag=1, (PC)=Dirección de “Verdad”
Si el bit 4 del registro Flag=0, (PC)=Dirección de “Falso”
5
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN BIT
EJEMPLO: Saltos_01.asm
6
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN REGISTRO
Las instrucciones de salto condicional:
decfsz f,d
incfsz f,d
pueden producir el salto en función 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).
7
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN REGISTRO
Nemónico
Descripción
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 instrucción decrementa en una unidad el contenido del registro f.
Almacena el resultado en (W ) si d=0 y en (f) si d=1. Después de
decrementar, pueden ocurrir dos casos:
- Si el resultado es distinto de cero la instrucción que sigue a ésta se
ejecuta normalmente
-Si el resultado es cero la instrucción que sigue a ésta se ignora y se salta.
Ejemplo:
Aquí
EsCero
NoEsCero
Antes:
Después:
decfsz Contador,F
goto NoEsCero
..................
...................
...................
(PC)= Dirección de “Aquí”
(Contador)=(Contador)-1 y además:
Si (Contador)=0, (PC)=Dirección de “EsCero”
Si (Contador)≠0, (PC)=Dirección de “Aquí”+1 (goto NoEsCero)
8
Tema 8. Saltos
SALTOS EN FUNCIÓN DE UN REGISTRO
Nemónico
Descripción
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 instrucción incrementa en una unidad el contenido del registro
f. Almacena el resultado en (W ) si d=0 y en (f) si d=1. Después de
incrementar, pueden ocurrir dos casos:
-Si el resultado es distinto de cero la instrucción que sigue a ésta
se ejecuta normalmente.
-Si el resultado es cero (porque al incrementarse se ha
desbordado y ha pasado del número 0xFF al 0x00) la instrucción
que sigue a ésta se ignora y se salta.
Ejemplo:
Aquí
Continua
Bucle
Antes:
Después:
incfsz Contador,F
goto Bucle
...................
...................
...................
(PC)= Dirección de “Aquí”
(Contador)=(Contador)+1 y además:
Si (Contador)=0 (256), (PC)=Dirección de “Continua ”
Si (Contador)≠0, (PC)=Dirección de “Aquí”+1 (goto Bucle)
9
Tema 8. Saltos
COMPARACIÓN ENTRE REGISTROS
Una de las más significativas aplicaciones de los saltos
condicionales es la comparación 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 instrucción “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 sería:
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 operación (A-B) se tienen
las siguientes posibilidades:
Operación (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:
MayorIgual
Menor
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)
14
Tema 8. Saltos
COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO
Ejemplo (el de la práctica 2):
15
Tema 8. Saltos
Más ejemplos con instrucciones de saltos……………..
16
Tema 8. Saltos
Ejemplo : Saltos_02.asm
17
Tema 8. Saltos
Ejemplo ; Saltos_05.asm
18
BIBLIOGRAFÍA
"Microcontrolador PIC16F84, Desarrollo de proyectos"
E. Palacios, F. Remiro, L.J. López. Ra-Ma, 2004
Podéis encontrar más información de este Tema 8 en el
CAPÍTULO 9
19