2
Tema 8. Saltos
BUCLESUno de los conceptos fundamentales de la programación es elconcepto del bucle o lazo. Un bucle permite básicamente la repeticióndel código del programa y puede funcionar de forma indefinida orepetir una parte del código un número determinado de veces. En primer lugar se estudiarán los bucles infinitos.
3
Tema 8. Saltos
BUCLES INFINITOS
Un bucle o lazo infinito es aquel que no tiene fin, es decir, mantiene lasiguiente estructura:
Instrucciones
Por ejemplo:
Principal
………………………………goto Principal
La mayoría de los programas de microcontroladores posee una estructura de bucle infinito.
4
Tema 8. Saltos
;CONTAR.ASM
List p=16F84 ;Tipo de procesadorinclude "P16F84.INC" ;Definiciones de registros internos
org 0x00 ;Vector de Resetgoto Inicio
org 0x05 ;Salva el vector de interrupción
Inicio bsf STATUS,RP0 ;selecciona el Banco1clrf TRISB ;configura PORTB todo como salidasbcf STATUS,RP0 ;selecciona el Banco0clrf PORTB ;borra PORTB (leds apagados)
Bucle incf PORTB,f ;suma 1 al registro PORTBgoto Bucle ;y otra vez, y otra vez, …
end
El programa CONTAR.ASM funciona como un bucle infinito, enviando de formasecuencial un número binario comprendido entre 0 y 255 a PORTB.
Ejemplo de programa con “bucle infinito”: CONTAR.ASM
5
Tema 8. Saltos
BUCLES FINITOS
Los bucles finitos se ejecutan un determinado número de veces ypueden tener varios tipos de estructuras, las más utilizadas son:
• Bucle con condición de testeo• Bucle que se repite un número conocido de veces
6
Tema 8. Saltos
BUCLE CON CONDICIÓN DE TESTEO
Se utiliza una instrucción de testeo para controlar la ejecución del bucle. Paraeste caso la repetición del lazo es finita, pero no se puede precisar el número deveces que se repite.
Instrucciones
Condición?
Sí/No
No/Sí
7
Tema 8. Saltos
Ejemplo1:EsperaUno
btfss PORTA,4goto EsperaUno
En el ejemplo1 se lee el pin 4 de PORTA y hasta que no se pone a 1 no sale de este bucle.
Ejemplo de programa con “bucle con condición de testeo”:
Ejemplo2:
NoEsIgual
movf PORTA,W
sublw 0x56
btfss STATUS,Z
goto NoEsIgual
EsIgual
En el ejemplo2 se lee el registro PORTA y hasta que su valor no es igual al de la constante0x56 no se sale del bucle
8
Tema 8. Saltos
BUCLE QUE SE REPITE UN NÚMERO CONOCIDO DE VECES
Las instrucciones decfsz e incfsz se utilizan generalmente en combinación con una instrucción de salto goto, para el diseño de bucles de instrucciones que deben repetirse una cantidad determinada de veces. Se hace de manera tal que un registro se decrementa oincrementa hasta que tome un determinado valor. En este caso, sí se conoce el número deveces que se repite el bucle:
Sí
Decrementa el contador
Contador=0?No
Instrucciones
Carga el contador
9
Tema 8. Saltos
movlw NumeroVeces; este es el numero de veces que se repite el buclemovwf Contador; carga el contador con el numero de veces
Lazo ………………………decfsz Contador,F; se decrementa el contador hasta que llega a 0goto Lazo; si no llega a cero repite el bucle………………
Ejemplo de programa con “bucle que se repite un número conocido de veces”:
10
Tema 8. Saltos
BUCLES ANIDADOS
Un bucle anidado es un bucle dentro de otro bucle. El número total de iteraciones ejecutadas es el producto de las iteraciones del bucle interno por las iteraciones del bucle externo.
Haciendo uso de estos bucles, se tiene la posibilidad de superar las 256 iteraciones, límite de un bucle con contador. El bucle interno puede ejecutarse 256 veces y el externo se ejecuta cada vez que el bucle interno termina, hasta un total como máximo de 256. En el programa ejemplo PAUSA.ASM aparece un bucle anidado.
11
Tema 8. Saltos
Ejemplo de programa con “bucle anidado”: PAUSA.ASM
;PAUSA.ASMList p=16F84 ;Tipo de procesadorinclude "P16F84.INC" ;Definiciones de registros internos
Contador1 equ 0ChContador2 equ 0Dh
org 0x00 ;Vector de Resetgoto Inicio
org 0x05 ;Salva el vector de interrupciónInicio bsf STATUS,RP0
clrf TRISBbcf STATUS,RP0clrf PORTBclrf Contador1clrf Contador2
Principal incf PORTB,f
Bucle decfsz Contador1,fgoto Bucledecfsz Contador2,fgoto Bucle
goto Principal
end
12
Tema 8. SaltosPROGRAMACIÓN Y ALGORITMO
El objetivo final de la programación es conseguir programas que funcionen correctamente y sean eficientes y además proporcionar la documentación necesaria sobre ellos.
Se define algoritmo de resolución como la especificación paso a paso de la solución de un problema dado. Este algoritmo puede ser expresado en cualquier lenguaje o simbolismo y debe terminar en un número finito de pasos.
Lo normal es que se encuentren distintas formas o modos de solucionarlo, es decir, distintos algoritmos que proporcionen el mismo resultado. Por tanto debe quedar claro que no hay una solución única para construir un algoritmo.
13
Tema 8. SaltosPROGRAMACIÓN Y ALGORITMO
Fundamentalmente se debe intentar conseguir que todos los algoritmos construidos reúnan las siguientes características:
•Deben obtener el resultado deseado de forma rápida
•Deben ocupar el menor espacio posible
•Que sean fácilmente comprensibles para quien pretenda leerlos
•Es conveniente que el programa se encuentre subdividido en programas más elementales, es decir, el programa debe ser modular y estar estructurado.
•Además debe ser razonablemente fácil de modificar. A esto ayuda la modularidad y la documentación que acompañe al programa.
¿Cómo abordar la construcción de un algoritmo?
Mediante diagramas de flujo (flowchart, organigrama o flujograma)
14
Tema 8. Saltos
DIAGRAMAS DE FLUJO
El diagrama de flujo es la representación gráfica de un algoritmo para la resolución de un programa.
Los diagramas de flujo están constituidos por una serie desímbolos que contienes los pasos del algoritmo:
•Flecha: Indica el sentido y trayectoria del proceso de información o tarea. •Rectángulo: Se usa para representar un evento o proceso determinado. Es el símbolo más comúnmente utilizado. Se usa para representar un evento que ocurre de forma automática y del cual generalmente se sigue una secuencia determinada. •Rombo: Se utiliza para representar una condición. Normalmente el flujo de información entra por arriba y sale por un lado si la condición se cumple o sale por el lado opuesto si la condición no se cumple. El rombo además especifica que hay una bifurcación
15
Tema 8. Saltos
DIAGRAMAS DE FLUJO
EJEMPLO: Saltos_05.asm
Configura:
-PORTB como salida
-PORTA como entrada
Supone (PORTA)<Numero
(W)=b’11110000’
Supone (PORTA)=Numero
(W)=b’11111111’
Resulta que (PORTA)>Numero
(W)=b’01010101’
Activa la salida:
(W)à(PORTB)
¿(PORTA)>=Numero?
¿(PORTA)≠Numero?
NO
NO
SÍ
SÍ
“ActivaSalida”
“Principal”
Resulta que
(PORTA)=Numero
Resulta que
(PORTA)<Numero
17
Tema 8. Saltos
OTRAS DIRECTIVAS IMPORTANTES:
CBLOCK
ENDC
Define a Block of ConstantsEnd Constant Block
Define un bloque de constantes.
Ejemplo:CBLOCK 0x0CCentenasDecenasUnidadesENDC
que es equivalente a:
Centenas EQU 0x0CDecenas EQU 0x0DUnidades EQU 0x0E
18
Tema 8. Saltos
OTRAS DIRECTIVAS IMPORTANTES:
#DEFINE Define a Text Substitution Label Define una etiqueta de sustitución de texto.
Ejemplo:#DEFINE LED PORTB,4…….…….bsf LED
Ejemplo:#DEFINE Banco0 bcf STATUS,RP0#DEFINE Banco1 bsf STATUS,RP0#DEFINE LED PORTB,4
Inicio Banco1 ; acceso al banco 1bcf LED ; configura esta línea como salidaBanco0 ; acceso al banco 0bsf LED ; enciende el diodo en bit 4 de PORTB
19
Tema 8. SaltosCONVERSIÓN DE BINARIO A BCD
En BCD cada cifra que representa un dígito decimal (0, 1,...8 y 9) se representa con su equivalente binario en cuatro bits (nibble o cuarteto) (esto es así porque es el número de bits necesario para representar el nueve, el número más alto que se puede representar BCD).
El BCD sólo se usa para representar cifras no números en su totalidad. Esto quiere decir que para números de más de una cifra hacen falta dos números BCD para componerlo.
Por ejemplo, el valor decimal 124 expresado en binario natural sería 01111100,en BCD sería 0001 0010 0100.
20
Tema 8. SaltosCONVERSIÓN DE BINARIO A BCD
Utilizando el código BCD, se simplifica la manipulación de los datos numéricos que deben ser mostrados por ejemplo en un visualizador de siete segmentos. Esto lleva a su vez una simplificación en el diseño físico del circuito (hardware). Si la cantidad numérica fuera almacenada y manipulada en binario natural, el circuito sería mucho más complejo que si se utiliza el BCD.
DISPLAY 7 SEGMENTOS
24
Tema 8. SaltosSALTO INDEXADO
El salto indexado es una técnica de programación que permite la representación sencilla de tablas de verdad.
En el PIC16F84 se basa en la utilización de la instrucción:addwf PCL,F
De este modo, la dirección del salto se consigue sumando al contador de programa (PCL) un valor de desplazamiento almacenado en el acumulador W. A este valor de desplazamiento sele denomina offset.
Al ejecutar la instrucción addwf PCL,F, el registro PCL debe estar cargado con la primera dirección de la tabla, apuntando de esta manera al origen de la tabla
25
Tema 8. SaltosSALTO INDEXADO EJEMPLO:Indexado_01.asm
;**********************************Indexado_01.asm *************************************;; ===================================================================; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"; E. Palacios, F. Remiro y L. López.; Editorial Ra-Ma. www.ra-ma.es; ===================================================================;; Implementar una tabla de la verdad mediante el manejo de tablas grabadas en ROM.; Por ejemplo, la tabla será de 3 entradas y 6 salidas tal como la siguiente:; ; C B A | S5 S4 S3 S2 S1 S0; -----------|---------------------------; 0 0 0 | 0 0 1 0 1 0 ; (Configuración 0).; 0 0 1 | 0 0 1 0 0 1 ; (Configuración 1).; 0 1 0 | 1 0 0 0 1 1 ; (Configuración 2).; 0 1 1 | 0 0 1 1 1 1 ; (Configuración 3).; 1 0 0 | 1 0 0 0 0 0 ; (Configuración 4).; 1 0 1 | 0 0 0 1 1 1 ; (Configuración 5).; 1 1 0 | 0 1 0 1 1 1 ; (Configuración 6).; 1 1 1 | 1 1 1 1 1 1 ; (Configuración 7).;; Las entradas C, B, A se conectarán a las líneas del puerto A: RA2 (C), RA1 (B) y RA0 (A).; Las salidas se obtienen en el puerto B:; RB5 (S5), RB4 (S4), RB3 (S3), RB2 (S2), RB1 (S1) y RB0 (S0).
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
26
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.clrf TRISB ; Las líneas del Puerto B se configuran como salida.movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada.movwf TRISAbcf STATUS,RP0 ; Acceso al Banco 0.
Principalmovf PORTA,W ; Lee el valor de las variables de entrada.andlw b'00000111' ; Se queda con los tres bits de entrada.addwf PCL,F ; Salta a la configuración adecuada.
Tablagoto Configuracion0goto Configuracion1goto Configuracion2goto Configuracion3goto Configuracion4goto Configuracion5goto Configuracion6goto Configuracion7
Configuracion0movlw b'00001010' ; (Configuración 0).goto ActivaSalida
Configuracion1movlw b'00001001' ; (Configuración 1).goto ActivaSalida
Configuracion2movlw b'00100011' ; (Configuración 2).goto ActivaSalida
Configuracion3movlw b'00001111' ; (Configuración 3).goto ActivaSalida
Configuracion4movlw b'00100000' ; (Configuración 4).goto ActivaSalida
Configuracion5movlw b'00000111' ; (Configuración 5).goto ActivaSalida
Configuracion6movlw b'00010111' ; (Configuración 6).goto ActivaSalida
Configuracion7movlw b'00111111' ; (Configuración 7).
ActivaSalidamovwf PORTB ; Visualiza por el puerto de salida.goto Principal
END
Top Related