SALTO CONDICIONAL

Anuncio
SISTEMAS ELECTRONICOS DIGITALES
SALTO CONDICIONAL
El repertorio del PIC16F84 también dispone de instrucciones de salto condicional, que
son aquéllas 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.
El repertorio de instrucciones del PIC16F84 incluye cuatro instrucciones de salto
condicional clasificadas en dos grupos:
SALTOS EN FUNCIONDE UN BIT
•
Aquéllas que pueden producir el salto en función del estado de un bit. Son btfsc y
btfss
INSTRUCCION BTFSC F,B
(BIT TEST F, SKIP IF CLEAR)
SI EL BIT NUMERO B DEL REGISTRO F ES 1 LA INSTRUCCIÓN QUE SIGUE A ESTA SE
EJECUTA NORMALMENTE, SI EL BIT ES 0 LA INSTRUCCIÓN QUE SIGUE A ESTA SE
IGNORA Y SE SALTA.
INSTRUCCIÓN BTFSS F,B (BIT TEST F, SKIP IF SET )
SI EL BIT NUMERO B DEL REGISTRO F ES 0. LA INSTRUCCIÓN QUE SIGUE A ESTA SE
EJECUTA NORMALMENTE, SI ES 1 SE IGNORA Y SE SALTA.
SALTOS EN FUNCION DE UN REGISTRO

Aquéllas que pueden producir el salto en función del contenido de un registro distinto de
cero. Son decfsz e íncfsz.
INSTRUCCIÓN DECFSZ F,D
(DECREMENT F, SKIP IF 0)
Decrementa en una unidad el contenido del registro F, almacena el resultado en W si
d=0(EN ESTE CASO F NO VARIA) y en el registro F si d=1. después de decrementar
pueden suceder dos casos:
1) si el resultado es distinto de cero la instrucción que sigue se ejecuta
normalmente.
2) Si el resultado es cero la instrucción que sigue se ignora y se salta.
INSTRUCCION INCFSZ F,D
(INCREMENT F,SKIP IF 0)
Incrementa en uno el contenido del registro F, almacena el resultado en W si d=0 (F no
varia) y se almacena en F si d=1.despues de incrementar suceden dos casos.
1) si el resultado no es cero, la instrucción que sigue se ejecuta normalmente.
2) Si el resultado es cero( porque al incrementarse se ha desbordado y ha pasado
del numero binario 11111111 al 00000000 ) la instrucción que sigue se ignora y
se salta.
INSTRUCCIÓN SUBWF
INSTRUCCIÓN SUBLW
EJEMPLO. VERIFICAR QUE UN REGISTRO VALE 0.
PARA SABER SIN UN REGISTRO VALE CERO, HAY QUE CARGAR EL
REGISTRO SOBRE SI MISMO MEDIANTE MOVF, SE LOGRA POSICIONAR
EL FLAG Z SIN VARIAR SU CONTENIDO
Movf registro,f
;recordar, el contenido del registro F se carga en el registro
destino d, si d=0 el destino es W, si d=1 el destino es F.
Ademas de que el bit(flag) Z del registro STATUS se activa a 1 si
el resultado de la operación es 0.
Btfss STATUS,Z
; ¿Es cero?, ¿Z=I?
Goto noescero
; NO
Es cero
; Sí es cero y ejecuta la parte del programa correspondiente
…
Noescero
EN EL EDITOR MPLAB ESCRIBA EL PROGAMA SIGUIENTE Y
COLOQUE LOS COMENTARIOS PARA DEDUCIR LO QUE
REALIZA EL PROGRAMA
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST
P=16F84A
INCLUDE <P16F84A.INC>
Numero
EQU d'13'
ORG 0
Inicio
bsf
STATUS,RP0
clrf
TRISB
movlw b'00011111'
movwf TRISA
bcf
STATUS,RP0
Principal
movlw Numero
subwf PORTA,W
movlw b'11111111'
;
;
;
;
;
;
btfss STATUS,Z
movlw b'01010101'
movwf PORTB
goto Principal
;
;
;
;
;
;
;
;
END
;
SUBRUTINAS
Una subrutina es un conjunto de instrucciones al que se tiene acceso desde cualquier
punto del programa principal. Es decir, una subrutina es un subprograma que se ejecuta
cada vez que el programa principal lo necesita.
Como una subrutina conceptualmente queda fuera del flujo secuencial del programa
principal , es necesario un mecanismo para llegar a ella, y una vez ejecutadas las
instrucciones, debe ser posible regresar al punto donde se quedo la ejecución del
programa.
La llamada a la subrutina se realiza con la instrucción “call” y para el retorno de la
subrutina se realiza con la instrucción “return”.
SUBRUTINAS ANIDADAS.
Cuando una subrutina
llama a otra subrutina, se llama anidamiento de subrutinas, cada
call sucesivo sin que intervenga un return crea un nivel de anidamiento adicional.
LA PILA
La pila (stack en inglés) es una zona de memoria que se encuentra separada tanto de la
memoria de programa como de la de datos dentro del microcontrolador, su estructura es
del tipo LIFO (Last In First Out) por lo que el último dato que se guarda es el primero
que sale. La manera de cargar la pila es a través de la llamada a subrutina con la
instrucción call, que almacena el contenido del contador de programa (PC) en la
posición superior de la pila, para recuperar el contenido de la pila en el PC, hay que
ejecutar la instrucción de retorno return.
VENTAJAS
1. se pueden escribir como subrutinas secciones de código y ser empleadas en
varios programas.
2. dan a los programas un carácter modular, se obtienen una librería de subrutinas.
3. reduce tiempo de programación.
4. las instrucciones no aparecen en el programa principal. Solo figuran las llamadas
call.
Las bibliotecas de subrutinas se denominan LIBRERIAS, la directiva INCLUDE ,
realiza esta funcion pegándo el archivo correspondiente.
RETARDOS
En muchas aplicaciones y proyectos con microcontroladores es necesario generar
tiempos de espera, denominados tiempo de retardo. Estos intervalos pueden
conseguirse mediante una subrutina de retardo, basada en un lazo simple de
instrucciones que se repiten tantas veces como sea necesario, hasta conseguir el retardo
deseado.
Se conoce el tiempo de ejecución de cada instrucción, entonces lo que hay que hacer es
calcular el valor inicial que debe tener un registro CONTADOR1 que actua como el
contador del número de iteracciones en el bucle, y así tener el tiempo de retardo
deseado.
EL TMR0 (TIMER 0)
El PIC16F84 dispone de un timer principal denominado Timer 0 o TMR0 que es un
contador ascendente de 8 bits. El TMRO se inicializa con un valor, que se incrementa
con cada impulso de entrada hasta su valor máximo
b' 11111111 '; con el
siguiente impulso de entrada el contador se desborda pasando a valer b'00000000', esto
se advierte mediante la activación del flag de fin de cuenta TOIF localizado en el
registro INTCON.
Un timer se implementa por medio de un contador que determina un tiempo preciso
entre el momento en que el valor es cargado y el instante en el que se produce su
desbordamiento. Un timer típico se consiste en un contador ascendente (también podría
ser descendente) que, una vez inicializado con un valor, su contenido se incrementa con
cada impulso de entrada hasta llegar a su valor máximo , desbordando y volviendo a
comenzar desde cero.
Los impulsos aplicados al TMRO, pueden provenir de los pulsos aplicados al pin
TOCKI o de la señal de reloj interna (Fosc/4), lo que le permite actuar de dos formas
diferentes :
A)Como contador de los impulsos que le llegan por el pin RA4/TOCKI.
Como temporizador de tiempos
El actuar de una u otra forma depende del bit TOCS del registro OPTION:
 Si TOCS = 1, el TMRO actúa como contador.
Si TOCS = 0, el TMRO actúa como temporizador
TMRO COMO CONTADOR
Cuando el TMRO trabaja como contador se le introducen los impulsos desde el
exterior por el pin RA4/TOCKI (TMRO External Clock Input). Su misión es "contar" el
número de acontecimientos externos representados por los impulsos que se aplican al
pin TOCKI.
El tipo de flanco activo se elige mediante el bit TOSE del registro OPTION:
 Si TOSE = 1, el flanco activo es descendente.
Si TOSE = 0, el flanco activo es ascendente
TMRO COMO TEMPORIZADOR
Cuando el TMRO trabaja como temporizador cuenta los impulsos de Fosc/4. Se usa
para determinar intervalos de tiempo concretos. Estos impulsos tienen una duración
conocida de un ciclo máquina que es cuatro veces el periodo de la señal de reloj. Para
una frecuencia de reloj igual a 4 MHz el TMR0 se incrementa cada 1 s, tal como se
calculó anteriormente.
Como se trata de un contador ascendente el TMR0 debe ser cargado con el valor
de los impulsos que se desean contar restados de 256 que es el valor de
desbordamiento. Por ejemplo, para contar cuatro impulsos, se carga al TMRO con
256-4 = 252:




Número de pulsos a contar: 410 = b'00000100'.
Número a cargar: 25610- 410= 25210 = b'11111100'.
Incremento a cada ciclo de instrucción: b' 111111 00', b' 111111 O 1', b'
11111110', b' 11111111 " aquí se desborda pasando a b' 0000000' y activando el
flag T0IF.
De esta manera, con la llegada de cuatro impulsos, el timer se ha desbordado
llegando al valor b'00000000' que determina el tiempo de temporización, en este
caso 4 s si los impulsos se hubieran aplicado cada microsegundo
TMRO ES UN REGISTRO DEL SFR y es un registro de propósito
especial ubicado en la posición 1 del área SFR de la RAM de datos . Puede ser
leído y escrito al estar conectado directamente AL BUS DE DATOS
PRESCALER ,DIVISOR DE FRECUENCIA
A veces es necesario controlar tiempos largos y aumentar la duración de los impulsos
que incrementan el TMR0. Para cubrir esta necesidad se dispone de un circuito
programable llamado. Divisor de Frecuencia o Prescaler que divide la frecuencia
utilizada por diversos rangos para poder conseguir temporizaciones más largas .
el PIC16F84 dispone de dos temporizadores:
a) El TMR0, que actúa como temporizador principal.
b) El Watchdog (perro guardián), que vigila que el programa no se "cuelgue". Para
ello, cada cierto tiempo comprueba que el programa está ejecutándose
normalmente y, si no es así, reinicializa todo el sistema.
El Prescaler puede aplicarse a uno de los dos temporizadores, al TMR0 o al watchdog.
Cuando se asigna al TMR0 los impulsos pasan primero por el divisor de frecuencia y
una vez aumentada su duración se aplican a TMR0.
BITS DE CONFIGURACiÓN DEL TMRO
Para controlar el comportamiento del TMR0 se utilizan algunos
bits de los registros OPTION e INTCON.
El registro INTCON es un registro localizado en la dirección OBh del Banco 0 y
duplicado en la 8Bh del Banco 1. Contiene los 8 bits que se muestran , de los cuales se
utilizará por ahora únicamente el T0IF
TOIF (TMRO Overjlow Interrupt Flag bit). Flag de interrupción del TMR0 Indica que
se ha producido un desbordamiento del Timer 0, que ha pasado d= b' 11111111' a
b'00000000'.
 TOIF = 0. El TMR0 no se ha desbordado.
 TOIF = 1. El TMR0 se ha desbordado. (Debe borrarse por software).
registro OPTION
La misión principal del registro OPTION es gobernar el comportamiento del
TMR0. Algunos microcontroladores PIC tienen una instrucción denominada
tambiéL option, por ello, el fabricante Microchip recomienda darle otro nombre a
este registro. Asi en el archivo de definición de etiquetas PI6F84A.INC se le
nombra como OPTION_REG

PS2:PSO. (Prescaler Rate Select bits). Bits para
seleccionar los valores del Prescaler o rango con el que
actúa el divisor de frecuencia, según la tabla siguiente.
• PSA (Prescaler Assignment bit). Asignación del divisor
de frecuencia.
 PSA = 0. El divisor de rrecuencia se asigna al
TMR0.
 PSA = 1. El divisor de frecuencia se asigna al
Watchdog.
Los bits utilizados por los timers son :
TOSE (TMRO Source Edge Select bit). Selecciona flanco de la señal de entrada del TMR0
 TOSE = o. TMRO se incrementa en cada flanco ascendente de la señal aplicada al pin
RA4/TOCKI.
 TOSE = 1. TMRO se incrementa en cada flanco descendente de la señal aplicada al pin
RA4/TOCKI.
TOCS (TMRO Clock Source Select bit). Selecciona la fuente de señal del TMRO.
 TOCS = o. Pulsos de reloj interno Fosc/4 (TMRO como temporizador).
 TOCS = l. Pulsos introducidos a través del pin RA4/TOCKI (TMRO como contador).
TMRO COMO TEMPORIZADOR
.Se puede utilizar la siguiente fórmula para calcular el temporizado
Temporización = TCM x Prescaler (256-Carga TMR0)
temporización, es el tiempo deseado.
Tcm es e1 período de un ciclo máquina e igual a TCM = 4 Tosc. Para 4 MHz ya se ado
en anteriores ocasiones T CM = 4 l/f = 1microseg
Prescaler es el rango de divisor de frecuencia elegido.
(256-CARGA TMR0), es el número total de impulsos a contar por el TMR0 antes de
desbordarse en la cuenta ascendente. "Carga TMRO" es el valor cargado inicialmente
en el TMR0 tal como se ha explicado anteriormente.
EJEMPLO
Qué valor hay que cargar en el TMR0 para lograr un tiempo de 500 seg si se utiliza
un Prescaler de 2?
Sustituyendo en la ecuación anterior queda:
Temporización = Tcm Presca/e' (256 - Carga TMRO)
500 = 1 x 2 (256 - Carga TMRO)
luego el valor a cargar tiene que ser:
Carga TMRO = 6
El valor de carga se podría poner en el programa
TMR0_CARGA500S
O bien:
EQU d’5’ ; numero a cargar apara contar 250
pulsos antes de desbordarse
TMR0_CARGA500S
QUIZ 6
EQU d’256’-d’250’
1.Reporte como opera la instrucción iorlw k , iorwf f,d de un ejemplo
2.Reporte como operan las instrucciónes rlf f,d y rrf f,d
3.¿cuál es la función del watchdog?
4.Proporcione un ejemplo de cómo se utilizan las instrucciones de incrementar (incf
f,d) y decrementar(dec f,d) .
5.¿Para que se utiliza la instrucción SWAPF F,D?
6.Diga con cual instrucción el pic16f84a entra en modo de bajo consumo.
7. Diga como se carga la pila.
8. Diga como se logran tiempos mas largos de temporizado , por ejemplo para dos hrs,
establezca un programa que realice esto.
9.diga como se puede utilizar el TMR0 como contador de pulsos externos.
10.Describa cada bit de los registros OPTION e INTCON
11.como se logra el salto condicional en el microcontrolador pic para realizar
desiciones, o bifurcaciones.
Bibliografía
-Microcontroladores PIC , DISEÑO PRACTICO DE APLICACIONES.
JOSE MA ANGULO USATEGUI. MC GRAW HILL
REALIZAR UN PROYECTO
Descargar