Está en la página 1de 3

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES <

Practica de Laboratorio Tipos de Saltos


Gutirrez Cceres, Edgar Andrs, edggutierrez@uniboyaca.edu.co

I. INTRODUCCIN A ejecucin de programas no suele ser lineal ejecutndose una lista de instrucciones una tras otras. En puntos determinados, esta secuencia tiene que romperse por una toma de decisin o por cualquier otro motivo. Para ello, el microcontrolador PIC16F84A dispone de varias instrucciones de salto que pasan a describirse en el presente texto. El compromiso para el correcto aprendizaje del estudiante depende en gran parte del grado de responsabilidad y su nimo de entender individualmente la temtica. II. SALTOS CONDICIONALES Uno de los saltos mas tiles es el que presenta la instruccin Goto, el cual es uno tipo de salto incondicional. Pero el PIC16F84A tambin dispone de instrucciones de salto condicional, que son aqullas que producen un salto de funcin de que se cumpla o no una condicin. Estas instrucciones son el nico medio para realizar bifurcaciones condicionales en un programa. El repertorio de instrucciones del PIC16F84A incluye cuatro instrucciones de salto condicional clasificadas en dos grupos: Aqullas que pueden producir el salto en funcin del estado de un Bit. Son Btfsc y Btfss. Aqullas que pueden producir el salto en funcin del contenido de un registro distinto de cero. Son Decfsz e Incfsz III. SALTOS EN FUNCIN DE UN BIT Son muy poderosas ya que permiten al programa tomar decisiones en funcin del estado de un bit perteneciente a cualquier registro o puerto de entrada/salida. Hay dos instrucciones de este tipo: A. Instruccin Btfsc f, b (Bit Test f, Skip If Clear). Esta instruccin puede actuar de dos formas: 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.

Fig.1. Ejemplo instruccin Btfsc

B. Instruccin Btfss f, b (Bit Test f, Skip If Set). Esta instruccin puede actuar de dos formas: 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.

Fig.2. Ejemplo Instruccin Btfss

IV. SALTO EN FUNCIN DE UN REGISTRO Las instrucciones de salto condicional decfsz e incfsz pueden producir el salto en Funcin del contenido de un registro distinto de cero y son casos especiales de las de incremento y decremento de un registro analizadas anteriormente. Estas instrucciones podran categorizarse dentro del grupo dentro del grupo de instrucciones aritmticas ya que efectivamente operan de forma aritmtica (decrementado o incrementado) sobre los registros. Pero, a diferencia de las otras, adems pueden alterar el flujo lineal del programa y por eso se las incluye en este grupo. Su forma de actuar se describe a continuacin: A. Instruccin Decfsz f, d (Decrement f, Skip If 0). Esta instruccin decrementa en una unidad el contenido del registro f. Almacena el resultado en W si d=0 (en cuyo caso f no varia) y en el registro f si d=1. Despus de decrementar pueden ocurrir dos casos: Si el resultado es distinto de cero la instruccin que sigue a esta se ejecuta normalmente. Si el resultado es cero la instruccin que sigue a esta se ignora y se salta.

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES <

C. Comprobar que un Registro es mayor o menor que otro En este caso hay que realizar la resta de ambos. As siendo Ay B dos registros cualesquiera y haciendo (A B) se tienen las siguientes posibilidades:

Fig.3. Ejemplo instruccin Decfsz

B. Instruccin Incfszf, d (Increment f, Skip If 0). Esta instruccin Incrementa en una unidad el contenido del registro f. Almacena el resultado en W si d=0 (en cuyo caso f no varia) y en el registro f si d=1. Despus de incrementar pueden ocurrir dos casos: Si el resultado es distinto de cero la instruccin que sigue a esta se ejecuta normalmente. Si el resultado es cero (por que al incrementarse se ha desbordado y ha pasado del nmero b11111111 al b00000000) la instruccin que sigue a esta se ignora y se salta.

Fig.7. Resultado de la comparacin de dos Registros

El siguiente fragmento de programa proporciona un salto a la etiqueta MayorIgual cuando el (RegistroA)>=(RegistroB) y salta a Menor cuando el (RegistroA)<(RegistroB):

Fig.8. Ejemplo pregunta si es mayor, igual o menor.

VI. LAZOS O BUCLES Otra aplicacin muy importante de los saltos condicionales son los lazos o bucles. Estos son fragmentos de programa que se repite un nmero finito o infinito de veces. Los principales tipos estn descritos a continuacin.

Fig.4. Ejemplo Instruccin Incfsz

V. COMPARACIN ENTRE REGISTROS Una de las ms significativa aplicaciones de los saltos condicionales es la comparacin entre registros:

A. Comprobar que un registro vale 0 Para saber si un registro vale 0 hay que cargar el registro sobre s mismo mediante la instruccin movf (que es la nica instruccin de carga mov que posiciona flags), con lo cual se logra posicionar el flag Z sin variar su contenido. Ejemplo:

Fig.9. Tipos Principales de Lazos o Bucles

Fig.5.Ejemplo Comprobacin si un Registro vale 0

A. Lazo de repeticin Infinita Es un salto incondicional a una posicin anterior del programa conformando un lazo de repeticin infinita, sin posibilidad de tomar otro camino. Fig.A). Utiliza la instruccin goto. Ejemplo:

B. Comprobar igualdad que un registro vale 0 Para comprobar si el contenido de los registros Registro1 y Registro2 son iguales el programa a realizar sera:

Fig.10. Ejemplo de Lazo con Repeticin Infinita.

Fig.6. Ejemplo de Igualdad de un Registro

En lugar de la instruccin Subwf Registro2, w se haber utilizado la instruccin Xorwf Registro2, idntico resultado.

podra con

B. Lazo con condicin de testeo Se utiliza una instruccin de testeo para controlar la ejecucin del bucle. Para este caso la repeticin del lazo es finita, pero no se puede precisar el nmero de veces que se repite. Ejemplo 1:

Fig.11. Primer programa condicin de testeo

Ejemplo 2:

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES < 5.

Disear un programa para controlar el nivel del depsito de lquido de Fig.14. Utiliza (entre parntesis las lneas del microcontrolador conectadas):

Fig.12. . Primer programa condicin de testeo

C. Lazo que se repite un nmero conocido de veces Las instrucciones Decfsze e Incfsz se utilizan generalmente en combinacin con una instruccin de salto goto para el diseo de lazos de instrucciones que deben repetirse una cantidad determinada de veces. Se hace decrementando un registro hasta que toma un determinado valor. En este caso, s se conoce el nmero de veces que se repite el bucle. Se muestra un ejemplo tpico:
Fig.14. Control de un depsito de lquido Mediante Microcontrolador

Fig.13. Ejemplo de un Contador Decremental

VII. ACTIVIDAD A REALIZAR La cuarta actividad se basa en conocer realizar los primeros programas referente al tema de saltos para esto se propone que observando los ejemplos, se realizan los siguientes programas, realice los por Grupos de Laboratorio: 1. El puerto A, que acta como salida, es controlado por el bit 0 del puerto B, que acta como entrada. De manera tal que: Si el bit 0 del puerto B=1, se encienden todos los diodos LED de salida. Si el bit 0 del puerto B=0, slo se encienden los diodos LED del nibble alto. 2. Compara el dato del puerto de entrada PORTA con un nmero (por ejemplo 7). Pueden darse dos posibilidades: Si (PORTA)=Numero, se encienden todos los diodos LED de salida. Si (PORTA)Numero, se activan los LED pares y se apagan los impares. 3. Compara el dato introducido por el Puerto A que acta como entrada con un nmero. Pueden darse dos posibilidades: Si (PORTA) es mayor o igual que NUMERO se encienden todos los LED pares de salida. Si (PORTA) es menor que NUMERO se activan los LED pares de la salida. 4. Compara el dato de entrada PORTA con un nmero. Pueden darse tres posibilidades: Si (PORTA)=NUMERO se encienden todos los diodos LED de salida. Si (PORTA)>NUMERO se activan los diodos LED pares de salida. Si (PORTA)>NUMERO slo se encienden los diodos LED del nibble alto.

Tres sondas detectoras: SV, Sonda de Vaco (RA0); SLL, Sonda de Llenado (RA1); SR, Sonda de Rebose (RA2). Dos bombas de agua: B1 (RB5), B2 (RB6). Cinco indicadores: Vaco (RB0); Llenndose (RB1); Lleno (RB2); Lleno (RB2); Rebose (RB3); Alarma (RB4). Su funcionamiento: Cuando ninguna de las sondas est mojada se entiende que el depsito est vaco y se accionarn las dos bombas. El indicador de vaco se iluminar. Cuando el nivel del lquido toque la sonda de vaco SV seguir llenndose el depsito con las dos bombas. El indicador Llenndose se ilumina. Cuando el nivel del lquido toque la sonda de llenado SLL se para la bomba B2, quedando la bomba B1 activada en modo mantenimiento. El indicador Lleno se ilumina. Si el nivel del lquido moja la sonda de rebose SR se apaga tambin la bomba B1, quedando las dos bombas fuera de servicio. El indicador Rebose se enciende. Cuando se produce un fallo o mal funcionamiento en las sondas de entrada (por ejemplo que se active la sonda de rebose y no la de vaco) se paran las dos bombas. El indicador Alarma se ilumina y as para todos los casos de error. REFERENCIAS
[1] [2] [3] [4] [5] PALACIOS ENRIQUE, Microcontroladores PIC16F877A Ed 3. Madrid, 2009. www.Datasheetcatalog.com, Hoja de especificaciones PIC16F877. www.microchip.com, Empresa dedicada a la construccin de dispositivos electrnicos. Adems encontrara el instalador MPLAB IDE. Software Proteus 7.5 V. Software MPLAB 8.43 V.

También podría gustarte