You are on page 1of 23

GUA DE EJERCICIOS RESUELTOS TEMA 3: HERRAMIENTAS DE PROGRAMACIN

Prof. Luis Zurita

Microcontroladores I

PROCEDIMIENTO DE RESOLUCIN El procedimiento estndar para la resolucin de un proyecto en general recomendado por el autor, consiste en segmentar el proyecto en tres pasos: Paso 1. Enunciado y delimitacin del Hardware: El enunciado es la razn de ser de cualquier proyecto. Es el problema que debe ser solucionado. Si el enunciado es proporcionado junto con el hardware, este paso nos los ahorraremos. En caso contrario, se deben delimitar y definir todas las variables de entradas y de salida. Debemos asignar los pines que van a actuar como entrada de datos (Sensores) y los que van a actuar como salida de datos (Actuadores o elementos finales de control). Se debe tratar de develar todo lo que se espera que haga el funcionamiento del diseo que se est proponiendo. Se debe establecer un resumen de cmo se debe comportar el circuito de control en base a lo que queremos disear. Sirve para: Ponerle lmites a nuestro proyecto Determinar las funciones que se espera que haga. Y fundamentalmente para especificar el hardware que va a ser controlado y gobernado por el microcontrolador

Paso 2. Diagrama de Flujo: Este nos proporcionar el funcionamiento lgico del problema, proyecto o sistema que queremos disear. Si un proyecto es de mediana o gran complejidad, se recomienda seccionar el diagrama de flujo en partes para analizar su funcionamiento y posteriormente unirlo, bajo el lema de segmentar un proyecto grande en partes pequeas para su entendimiento y luego se agrupan, obteniendo la solucin total del proyecto.
Prof. Luis Zurita 2 Microcontroladores I

Generalmente se parte del enunciado que se ha delimitado en el paso anterior. Como recomendacin general, antes de pasar a la elaboracin del lenguaje ensamblador, hgase las siguientes preguntas: El diagrama de flujo tiene continuidad y lgica? Cumplo con las normas de elaboracin de un diagrama de flujo, vistas en clases? El diagrama de flujo cumple con el enunciado? Si estas preguntas son afirmativas, bien, vayamos al paso 3. En caso contrario debemos corregirlo, hasta lograr que funcione como se exige o como lo deseamos. Paso 3. Elaboracin del Lenguaje Ensamblador: Si usted ha elaborado correctamente el diagrama de flujo, este paso ser sencillo de llevar a cabo, recordando que a cada bloque que se haya colocado en el diagrama le corresponder un conjunto de instrucciones que salen exclusivamente de las 35 disponibles que traen los microcontroladores de la familia 16F con la que se trabaja en este curso. Su documentacin previa, experiencia, inventiva e ingenio le permitirn combinarlas para que realicen la misma funcin expresada en el diagrama de flujo. Se deben tener presente las diferentes rutinas ya estudiadas y vistas a lo largo del curso, as como otras rutinas estndares que existen para el uso en diferentes procedimientos, tales como: Rutinas matemticas, manejo de LCD, comunicaciones, conversiones entre cdigos, etc. Veamos un problemas: diagrama de flujo de la metodologa de resolucin de

Prof. Luis Zurita

Microcontroladores I

Prof. Luis Zurita

Microcontroladores I

1. Dado el siguiente circuito:

Realice un programa que permita explorar el estado del bit RA3. Si RA3 es uno, se debe mostrar en el display el nmero 5. Caso contrario se debe mostrar el nmero3. (8 ptos) SOLUCIN: Paso 1. Enunciado y delimitacin del Hardware: si el enunciado y el hardware ya se nos ha proporcionado, saltaremos este paso. Paso 2. Diagrama de Flujo:

Prof. Luis Zurita

Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: Si tenemos el Diagrama de Flujo bien diseado, lo dems es Carpintera, veamos: List Include org goto INICIO bsf bsf clrf bcf EXPLORA btfss goto goto CINCO movlw movwf goto TRES movlw movwf goto end Nota: Otra forma de hacer los bloques 3 y 4 sera la siguiente: Bloque 3: bsf bcf bsf bcf PORTB,7 PORTB,6 PORTB,5 PORTB,4 Bloque 4: bsf bsf bcf bcf PORTB,7 PORTB,6 PORTB,5 PORTB,4 P=16F84A P16F84A.inc 00H INICIO ; Bloque 1: STATUS,5 TRISA,3 TRISB STATUS,5 PORTA,3 TRES CINCO B10100000 PORTB EXPLORA B11000000 PORTB EXPLORA ;Ir a banco 1 ;RA3 se configura como entrada ;RB7 a RB4 como salida ;Regresar al banco 0 ; Bloque 2: ;RA3= 1? ;RA3 =0. Mostrar 3 en display ;Este paso podemos obviarlo. ; Bloque 3: ;RA3=1. Mostrar 5 en display ;5Display ;Seguimos explorando el Bit RA3 ; Bloque 4: ;RA3=0. Mostrar 3 en display ;3Display ;Seguimos explorando el Bit RA3 ; Encabezado

Observe la conexin del puerto B con el display.


Prof. Luis Zurita 6 Microcontroladores I

2. Dado el siguiente circuito:

Realice un programa que permita mostrar en el display la letra C, si la entrada est en nivel bajo la letra U si la entrada est en nivel alto. (8 ptos) SOLUCIN: Paso 1. Enunciado y delimitacin del Hardware: Tenemos el enunciado pero el hardware no est del todo claro. Como no se especifica que bit del microcontrolador controla a cul segmento del display, debemos especificarlo. Adems no se especifica que display vamos a utilizar, no sabemos si es nodo comn o ctodo comn. Por lo tanto lo asignaremos a nuestro criterio. Eligiendo un ctodo comn tendremos: Bits de microcontrolador RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Segmentos del Display dp g f e d c b a 0 0 1 1 1 0 0 1 0 0 1 1 1 1 1 0 La identificacin de los segmentos de un display siguiente:

LETRA Valor Hex C 39H U 3EH a nivel internacional es la

Prof. Luis Zurita

Microcontroladores I

Paso 2. Diagrama de Flujo:

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: El lenguaje ensamblador es similar al ejercicio 1: List Include org goto INICIO bsf bsf clrf bcf EXPLORA btfss goto
Prof. Luis Zurita

P=16F84A P16F84A.inc 00H INICIO ; Bloque 1: STATUS,5 TRISA,1 TRISB STATUS,5 PORTA,1 CCC
8

; Encabezado

;Ir a banco 1 ;RA1 se configura como entrada ;Todo el Puerto B como salida ;Regresar al banco 0 ; Bloque 2: ;RA1= 1? ;RA1 =0. Mostrar C en display
Microcontroladores I

goto UUU movlw movwf goto CCC movlw movwf goto end

UUU 3EH PORTB EXPLORA 39H PORTB EXPLORA

;Este paso podemos obviarlo. ; Bloque 3: ;RA1=1. Mostrar U en display ;3EHDisplay ;Seguimos explorando el Bit RA1 ; Bloque 4: ;RA1=0. Mostrar C en display ;39HDisplay ;Seguimos explorando el Bit RA1

3. Disee un contador de 8 bits, que se incrementa cada vez que se pulsa P (RA3). Visualice el resultado por el puerto B. Activar un led (RA0), cuando el contador llegue a D125 y apagarlo cuando llegue a D221. Repetir el ciclo. SOLUCIN: Paso 1. Enunciado y delimitacin del Hardware: Tenemos el enunciado y parte del hardware definido. Se ha asignado a RA3 como un sensor de entrada (Pulsador) Se ha asignado a RA0 como un elemento de salida (Led) Se pide al puerto B que muestre el valor de un contador (Son ocho bits), por lo que es un elemento de salida (8 leds)

Cmo quedara delimitado el hardware? Asignaremos la lgica del Pulsador (Lgica negativa): Si P es presionado, RA3=0 Si P no es presionado, RA3=1.

Si usted desea trabajar con lgica positiva, no hay problema, debe reconfigurar el circuito del pulsador.

Prof. Luis Zurita

Microcontroladores I

VDD

C1
22p

U1 X1
CRYSTAL 16 15 4 OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13 VSS

R1
1k

Pulsador PULSADOR

C2
VSS 22p

VSS

Todas las Resistencias= 330

Todas las Resistencias= 330 Ohmios

VSS

Listo, tenemos el cascarn vaco del proyecto. Ahora vamos a darle inteligencia.

Paso 2. Diagrama de Flujo: Debemos usar un registro que lleve la cuenta (Contador de 8 bits) por lo que debemos declararlo en el paso 3. Veamos el diagrama de flujo:

Prof. Luis Zurita

10

Microcontroladores I

INICIO Bloque 1 Declarar Registro Contador Bloque 2 Configurar Puerto A y B Bloque 3 Inicializamos Registro Contador ContadorPORTB Bloque 5 1 RA3=0? Se ha pulsado P? SI Contador=Contador+1 Bloque 7 ContadorPORTB Bloque 8 Contador=125? NO Contador=221? NO 1 Bloque 9 NO

Bloque 4

Bloque 6

SI Led=ON

SI Led=OFF

Prof. Luis Zurita

11

Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: Recuerde la declaracin el registro CONTADOR: List Include
CONTADOR equ

P=16F84A P16F84A.inc
20H

; Encabezado ;Bloque 1: (Declaraciones)


;Declaramos el Registro

org goto INICIO bsf bsf bcf clrf bcf clrf clrf movf movwf CUENTA NO btfsc goto goto SI incf movf movwf sublw
Prof. Luis Zurita

00H INICIO ; Bloque 2: STATUS,5 TRISA,3 TRISA,0 TRISB STATUS,5 CONTADOR PORTB CONTADOR,0 PORTB PORTA,3 CUENTA SI CONTADOR,1 CONTADOR,0 PORTB .125
12

;Ir a banco 1 ;RA1 se configura como entrada ;RA0 como salida ;Todo el Puerto B como salida ;Regresar al banco 0 ; Bloque 3: ;Inicializamos el contador ;Limpiamos el Puerto B ; Bloque 4: ;CONTADORW ; WPORTB ; Bloque 5: ;RA3= 1? Se ha pulsado P? ;No. Seguimos explorando ;Si. Vamos al bloque 6 ; Bloque 6: ;Si. Contador= Contador + 1 ; Bloque 7: ;CONTADORW ; WPORTB ; Bloque 8: ;Contador=125? W =Contador.
Microcontroladores I

btfss goto bsf goto VALOR2 movf sublw btfss goto bcf goto end

STATUS,2 VALOR2 PORTA,0 EXPLORA CONTADOR .221 STATUS,2 EXPLORA PORTA,0 EXPLORA

;Z=1? ;Ir a preguntar si Contador=221 ;Contador=125, Led=ON ;Volvemos a explorar el Pulsador ; Bloque 9: ; CONTADORW ;Contador=221? ;Z=1? ; Volvemos a explorar el Pulsador ;Contador=221, Led=OFF ;Volvemos a explorar el Pulsador

;Aqu pasamos contador a W porque no sabemos si W tena su valor

4. Disee un control de nivel para un tanque. Al pulsar INICIO, se activa la bomba B1. La bomba permanece encendida hasta alcanzar el nivel mximo, mediante el cual se apagar. Se debe abrir la vlvula de vaciado. La bomba (B1) se volver a activar de forma automtica cuando se alcance el nivel mnimo procediendo a cerrar la vlvula de vaciado, hasta que alcance el nivel mximo, repitiendo el ciclo de forma automtica sin necesidad de volver a pulsar INICIO.

Prof. Luis Zurita

13

Microcontroladores I

Paso 1. Enunciado y delimitacin del Hardware: Tenemos el enunciado pero el hardware debemos delimitarlo. Para lograr esta tarea debemos asignar los pines de control de Entrada y de salida, con la finalidad de saber qu vamos a controlar y quin nos dar la informacin. Debemos identificar cuales elementos son entrada y cuales salida: ENTRADA Sensor Mximo Sensor Mnimo Pulsador INICIO Qu pin SALIDA Asignamos? RA0 Bomba B1 RA1 Vlvula Vaciado RA2 Qu pin Asignamos? RB0 RB1

Y si quiero asignar otros pines? Perfecto, queda a libre eleccin.

Paso 2. Diagrama de Flujo: Veamos el diagrama de flujo:

Prof. Luis Zurita

14

Microcontroladores I

INICIO Bloque 1 Configurar Puerto A y B Bloque 2 Bomba=OFF Bloque 3 Vlvula Vaciado=OFF Bloque 4 RA2=0? Se puls Inicio? SI 1 Bomba=ON Bloque 6 Vlvula Vaciado=OFF Bloque 7 NO Nivel Mximo? Bloque 8 NO

Bloque 5

SI Bomba=OFF

Bloque 9 Vlvula Vaciado=ON

Bloque 10 NO Nivel Mnimo?

SI 1

Prof. Luis Zurita

15

Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: List Include org goto INICIO bsf bsf bsf bsf bcf bcf bcf bcf bcf EXPLORA btfsc goto bsf bcf MAXIMO btfsc goto bcf bsf btfsc goto goto end P=16F84A P16F84A.inc 00H INICIO STATUS,5 TRISA,0 TRISA,1 TRISA,2 TRISB,0 TRISB,1 STATUS,5 PORTB,0 PORTB,1 PORTA,2 EXPLORA PORTB,0 PORTB,1 PORTA,0 MAXIMO PORTB,0 PORTB,1 PORTA,1 MINIMO REPITE ; Encabezado

REPITE

SIMAX

MINIMO

; Bloque 1: ;Ir a banco 1 ;RA0 entrada. Sensor mximo. ;RA1 entrada. Sensor mnimo. ;RA2 entrada. Pulsador. ;RB0 salida. Bomba B1 ;RB1 salida. Vlvula Vaciado. ;Regresar al banco 0 ; Bloque 2: ;Bomba=OFF ; Bloque 3: ; Vlvula Vaciado=OFF ; Bloque 4: ;Se ha pulsado INICIO? ;No. Seguimos explorando ; Bloque 5: ;Se puls INICIO. Bomba=ON ; Bloque 6: ;Vlvula=OFF ; Bloque 7: ;Se ha llegado al mximo? ;No. Seguimos explorando ; Bloque 8: ;Nivel Mximo. Bomba=OFF. ; Bloque 9: ;Vlvula=ON ;Se ha llegado al mnimo? ;No. Seguimos explorando ;Nivel mnimo, repetimos ciclo.

Prof. Luis Zurita

16

Microcontroladores I

5. Se

desea

disear

un

sistema

de

proteccin

para

una

lnea

de

ensamblaje que contiene 4 mquinas soldadoras. M1 (RA0) M2 (RA1) M3 (RA2) M4 (RA3) Mquina activa= 1 Mquina inactiva= 0 * Cada mquina tiene dos leds que indican si estn funcionando: (Led Verde=ON) o si estn apagadas (Led Rojo=ON). * Si ninguna mquina est activa, debe activarse adicionalmente una seal sonora (RA4).

SOLUCIN: Paso 1. Enunciado y delimitacin del Hardware: si el enunciado y el hardware ya se nos ha proporcionado, saltaremos este paso.

Prof. Luis Zurita

17

Microcontroladores I

Paso 2. Diagrama de Flujo:


INICIO 1

Configurar Puerto A y B Declarar Registro Indicador Todos los Leds=OFF Sirena=OFF Registro Indicador=0 CICLO Motor 1= OK? SI LVM1=OFF LRM1=ON Indicador=0 NO LVM1=OFF LRM1=ON Indicador=1

Motor 4= OK? SI LVM4=OFF LRM4=ON

NO LVM4=OFF LRM4=ON Indicador=1

Indicador= 0? SI Sirena=ON

NO

Sirena=OFF

CICLO

CICLO

Qu funcin tiene el registro Indicador? El ciclo de exploracin de las mquinas empieza por la primera. Si esta no funciona, Indicador vale 0. Si funciona, Indicador vale 1. Si alguna de las restantes mquinas funciona, Indicador pasar a valer 1, lo que nos informa que al menos hay una mquina trabajando, por lo que no debera activarse la alarma. Ahora. Si la mquina 1 no funciona, y no funciona ninguna de las restantes, Indicador seguir valiendo 0, por lo que al preguntar por su valor, se debe activar la alarma, tal como se exige en el enunciado. Existen otras formas de hacerlo, como por ejemplo, preguntar al final si cada mquina es cero para activar o no la alarma, pero el diagrama de flujo quedara ms extenso, as como su programa.

Motor 2= OK? SI LVM2=OFF LRM2=ON

NO LVM2=OFF LRM2=ON Indicador=1

Motor 3= OK? SI LVM3=OFF LRM3=ON

NO LVM3=OFF LRM3=ON Indicador=1

Prof. Luis Zurita

18

Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: Existe una forma ms resumida de hacer este problema, pero necesitamos el uso de las tablas, tema que veremos en otra unidad. Veamos la forma extendida: List Include INDICADOR equ org goto INICIO bsf movlw movwf clrf bcf clrf bcf clrf btfsc goto bcf bsf clrf goto bsf bcf movlw movwf goto btfsc goto bcf bsf clrf goto P=16F84A P16F84A.inc 20H 00H INICIO STATUS,5 B00001111 TRISA TRISB STATUS,5 PORTB PORTA,4 INDICADOR PORTA,0 M1OK PORTB,0 PORTB,1 INDICADOR MAQ2 PORTB,0 PORTB,1 .1 INDICADOR MAQ2 PORTA,1 M2OK PORTB,2 PORTB,3 INDICADOR MAQ3
19

;Encabezado ;Declaramos el registro Indicador

;Ir a banco 1 ;Configuramos el Puerto A ;Configuramos el Puerto B ;Regresar al banco 0 ;Todos los Leds=OFF ;Sirena=OFF ;Registro Indicador=0 ;Mquina 1 inactiva? ;Vamos a Mquina 1 bien. ;LVM1=OFF ;LRM1=ON ;Indicador a cero ;Vamos a explorar Mquina 2 ;LVM1=ON ;LRM1=OFF ;Indicador=1 ;Vamos a explorar Mquina 2 ;Mquina 2 inactiva? ;Vamos a Mquina 2 bien. ;LVM2=OFF ;LRM2=ON ;Indicador a cero ;Vamos a explorar Mquina 2
Microcontroladores I

MAQ1 M1MAL

M1OK

MAQ2 M2MAL

Prof. Luis Zurita

M2OK

MAQ3 M3MAL

M3OK

MAQ4 M4MAL

M4OK

ALARMA

ALAON ALAOFF

bsf bcf movlw movwf goto btfsc goto bcf bsf clrf goto bsf bcf movlw movwf goto btfsc goto bcf bsf clrf goto bsf bcf movlw movwf goto movf sublw btfss goto goto bsf goto bcf goto end

PORTB,2 PORTB,3 .1 INDICADOR MAQ3 PORTA,2 M3OK PORTB,4 PORTB,5 INDICADOR MAQ4 PORTB,4 PORTB,5 .1 INDICADOR MAQ4 PORTA,3 M4OK PORTB,6 PORTB,7 INDICADOR ALARMA PORTB,6 PORTB,7 .1 INDICADOR ALARMA INDICADOR,0 00H STATUS,2 ALAOFF ALAON PORTA,4 MAQ1 PORTA,4 MAQ1

;LVM2=ON ;LRM2=OFF ;Indicador=1 ;Vamos a explorar Mquina 3 ;Mquina 3 inactiva? ;Vamos a Mquina 3 bien. ;LVM3=OFF ;LRM3=ON ;Indicador a cero ;Vamos a explorar Mquina 4 ;LVM3=ON ;LRM3=OFF ;Indicador=1 ;Vamos a explorar Mquina 4 ;Mquina 4 inactiva? ;Vamos a Mquina 4 bien. ;LVM4=OFF ;LRM4=ON ;Indicador a cero ;Vamos a explorar la Alarma ;LVM4=ON ;LRM4=OFF ;Indicador=1 ;Vamos a explorar la Alarma ;INDICADORW ;Z=1? INDICADOR=0? ; Hay al menos una mquina=ON. ; Todas las mquinas= OFF ; ALARMA=ON ;Repetimos el ciclo de exploracin. ; ALARMA=OFF ;Repetimos el ciclo de exploracin. ;Fin del Programa

Prof. Luis Zurita

20

Microcontroladores I

6. Disee un control de nivel para un tanque. Se tiene un interruptor selector de MODO Si MODO es manual, las bombas se activan sin importar el nivel del tanque subterrneo. Si MODO es automtico, la activacin de las bombas depender de: Si el nivel del agua est por debajo del nivel mnimo, se activar la bomba 1 hasta que se alcance el nivel Mximo, y proceder a apagarse. Si el nivel del agua est por encima del nivel mnimo, pero por debajo del nivel mximo, se activar la bomba 2 hasta que se alcance el nivel Mximo y proceder a apagarse. Se debe monitorear si ha cambiado el MODO.

SOLUCIN: Paso 1. Enunciado y delimitacin del Hardware: Tenemos el enunciado, sin embargo debemos delimitar el hardware. Para lograr esta tarea debemos asignar los pines de control de Entrada y de salida, con la finalidad de saber qu vamos a controlar y quin nos dar la informacin. Debemos identificar cuales elementos son entrada y cuales salida: Qu pin SALIDA Asignamos? Interruptor INICIO RA0 Bomba B1 Sensor Mximo RA1 Bomba B2 Sensor Mnimo RA2 ENTRADA Qu pin Asignamos? RB0 RB1

Y si quiero asignar otros pines? Perfecto, queda a libre eleccin.

Prof. Luis Zurita

21

Microcontroladores I

Paso 2. Diagrama de Flujo:

INICIO

Configurar Puerto A y B

Inicializar Puerto B

M SI Manual? NO SI SI Bomba 1= ON Bomba 2= OFF 1 Bomba 1= ON Bomba 2= ON

SMximo? NO 2

SMnimo? NO Bomba 1= OFF Bomba 2= ON

Smximo? NO Bomba 1= OFF Bomba 2= OFF

SI

Prof. Luis Zurita

22

Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: list include org goto INICIO P=16F84A P16F84A.INC 00H INICIO

bsf STATUS,5 clrf TRISB movlw 1FH movwf TRISA bcf STATUS,5 clrf PORTB btfsc goto bsf bsf goto btfsc goto btfsc goto bsf bcf btfss goto bcf bcf goto bcf bsf goto end PORTA,0 AUTO PORTB,0 PORTB,1 MODO PORTA,1 DOS PORTA,2 MODO1 PORTB,0 PORTB,1 PORTA,1 UNO PORTB,0 PORTB,1 MODO PORTB,0 PORTB,1 UNO ;MODO AUTO? ;No. Modo manual. Bomba 1= ON ;Bomba 2=ON ;MXIMO? ;MNIMO ;Bomba 1=ON ;Bomba 2=OFF ;MXIMO ALCANZADO ;Bomba 1=OFF ;Bomba 2=OFF ;Bomba 1=OFF ;Bomba 2=ON

MODO MANUAL

AUTO

MODO2 UNO DOS

MODO1

Prof. Luis Zurita

23

Microcontroladores I