tema8 saltos 2 - coolab.umh.escoolab.umh.es/sea/microcontroladores/tema8_saltos_2.pdf ·...

27
1 Tema 8 Saltos (parte II)

Transcript of tema8 saltos 2 - coolab.umh.escoolab.umh.es/sea/microcontroladores/tema8_saltos_2.pdf ·...

1

Tema 8

Saltos(parte II)

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:

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

“ActivaSalida”

“Principal”

Resulta que

(PORTA)=Numero

Resulta que

(PORTA)<Numero

16

Tema 8. SaltosEjemplo; Saltos_05.asm

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

21

Tema 8. Saltos

22

Tema 8. Saltos

23

Tema 8. SaltosCONVERSIÓN DE BINARIO A BCD

Ejemplo: BCD_01.asm

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

27

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