0 оценок0% нашли этот документ полезным (0 голосов)
215 просмотров31 страница
Este documento presenta un procedimiento de tres pasos para resolver proyectos utilizando microcontroladores: 1) Enunciar el problema y delimitar el hardware, 2) Crear un diagrama de flujo, 3) Desarrollar el código en lenguaje ensamblador. Incluye ejemplos de cómo aplicar este procedimiento para programas que muestran números en un display según el estado de un bit y letras según la entrada. También presenta la solución a un contador de 8 bits controlado por un pulsador.
Este documento presenta un procedimiento de tres pasos para resolver proyectos utilizando microcontroladores: 1) Enunciar el problema y delimitar el hardware, 2) Crear un diagrama de flujo, 3) Desarrollar el código en lenguaje ensamblador. Incluye ejemplos de cómo aplicar este procedimiento para programas que muestran números en un display según el estado de un bit y letras según la entrada. También presenta la solución a un contador de 8 bits controlado por un pulsador.
Este documento presenta un procedimiento de tres pasos para resolver proyectos utilizando microcontroladores: 1) Enunciar el problema y delimitar el hardware, 2) Crear un diagrama de flujo, 3) Desarrollar el código en lenguaje ensamblador. Incluye ejemplos de cómo aplicar este procedimiento para programas que muestran números en un display según el estado de un bit y letras según la entrada. También presenta la solución a un contador de 8 bits controlado por un pulsador.
GUA DE EJERCICIOS RESUELTOS Y PROPUESTOS TEMA 2: HERRAMIENTAS DE PROGRAMACIN Prof. Luis Zurita 2 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. 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? Prof. Luis Zurita 3 Microcontroladores I 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 diagrama de flujo de la metodologa de resolucin de problemas: Prof. Luis Zurita 4 Microcontroladores I Prof. Luis Zurita 5 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 6 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 P=16F84A Include P16F84A.inc ; Encabezado org 00H goto INICIO ; Bloque 1: INICIO bsf STATUS,5 ;Ir a banco 1 bsf TRISA,3 ;RA3 se configura como entrada clrf TRISB ;RB7 a RB4 como salida bcf STATUS,5 ;Regresar al banco 0 ; Bloque 2: EXPLORA btfss PORTA,3 ;RA3= 1? goto TRES ;RA3 =0. Mostrar 3 en display goto CINCO ;Este paso podemos obviarlo. ; Bloque 3: CINCO movlw B10100000 ;RA3=1. Mostrar 5 en display movwf PORTB ;5Display goto EXPLORA ;Seguimos explorando el Bit RA3 ; Bloque 4: TRES movlw B11000000 ;RA3=0. Mostrar 3 en display movwf PORTB ;3Display goto EXPLORA ;Seguimos explorando el Bit RA3 end Nota: Otra forma de hacer los bloques 3 y 4 sera la siguiente: Bloque 3: Bloque 4: bsf PORTB,7 bsf PORTB,7 bcf PORTB,6 bsf PORTB,6 bsf PORTB,5 bcf PORTB,5 bcf PORTB,4 bcf PORTB,4 Observe la conexin del puerto B con el display. Prof. Luis Zurita 7 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 LETRA Valor Hex 0 0 1 1 1 0 0 1 C 39H 0 0 1 1 1 1 1 0 U 3EH La identificacin de los segmentos de un display a nivel internacional es la siguiente: Prof. Luis Zurita 8 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 P=16F84A Include P16F84A.inc ; Encabezado org 00H goto INICIO ; Bloque 1: INICIO bsf STATUS,5 ;Ir a banco 1 bsf TRISA,1 ;RA1 se configura como entrada clrf TRISB ;Todo el Puerto B como salida bcf STATUS,5 ;Regresar al banco 0 ; Bloque 2: EXPLORA btfss PORTA,1 ;RA1= 1? goto CCC ;RA1 =0. Mostrar C en display goto UUU ;Este paso podemos obviarlo. ; Bloque 3: UUU movlw 3EH ;RA1=1. Mostrar U en display Prof. Luis Zurita 9 Microcontroladores I movwf PORTB ;3EHDisplay goto EXPLORA ;Seguimos explorando el Bit RA1 ; Bloque 4: CCC movlw 39H ;RA1=0. Mostrar C en display movwf PORTB ;39HDisplay goto EXPLORA ;Seguimos explorando el Bit RA1 end 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 10 Microcontroladores I OSC1/CLKIN 16 RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 OSC2/CLKOUT 15 MCLR 4 U1 PIC16F84A C1 22p C2 22p X1 CRYSTAL R1 1k VDD VSS VSS VSS VSS PULSADOR Todas las Resistencias= 330 Ohmios 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. Todas las Resistencias= 330 Prof. Luis Zurita 11 Microcontroladores I Veamos el diagrama de flujo: INICIO Declarar Registro Contador Se ha pulsado P? 1 SI NO Bloque 5 Bloque 1 Configurar Puerto A y B Inicializamos Registro Contador ContadorPORTB Contador=Contador+1 Contador=125? Led=ON ContadorPORTB 1 SI Contador=221? Led=OFF 1 SI NO NO 1 Bloque 2 Bloque 3 Bloque 4 RA3=0? Bloque 6 Bloque 7 Bloque 8 Bloque 9 Prof. Luis Zurita 12 Microcontroladores I Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: Recuerde la declaracin el registro CONTADOR: List P=16F84A Include P16F84A.inc ; Encabezado ;Bloque 1: (Declaraciones) CONTADOR equ 20H ;Declaramos el Registro org 00H goto INICIO ; Bloque 2: INICIO bsf STATUS,5 ;Ir a banco 1 bsf TRISA,3 ;RA1 se configura como entrada bcf TRISA,0 ;RA0 como salida clrf TRISB ;Todo el Puerto B como salida bcf STATUS,5 ;Regresar al banco 0 ; Bloque 3: clrf CONTADOR ;Inicializamos el contador clrf PORTB ;Limpiamos el Puerto B ; Bloque 4: movf CONTADOR,0 ;CONTADORW movwf PORTB ; WPORTB ; Bloque 5: CUENTA btfsc PORTA,3 ;RA3= 1? Se ha pulsado P? NO goto CUENTA ;No. Seguimos explorando goto SI ;Si. Vamos al bloque 6 ; Bloque 6: SI incf CONTADOR,1 ;Si. Contador= Contador + 1 ; Bloque 7: movf CONTADOR,0 ;CONTADORW movwf PORTB ; WPORTB ; Bloque 8: sublw .125 ;Contador=125? W =Contador. btfss STATUS,2 ;Z=1? goto VALOR2 ;Ir a preguntar si Contador=221 bsf PORTA,0 ;Contador=125, Led=ON goto EXPLORA ;Volvemos a explorar el Pulsador ; Bloque 9: VALOR2 movf CONTADOR ; CONTADORW ;Aqu pasamos contador a W porque no sabemos si W tena su valor Prof. Luis Zurita 13 Microcontroladores I sublw .221 ;Contador=221? btfss STATUS,2 ;Z=1? goto EXPLORA ; Volvemos a explorar el Pulsador bcf PORTA,0 ;Contador=221, Led=OFF goto EXPLORA ;Volvemos a explorar el Pulsador end 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. 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 Qu pin Asignamos? SALIDA Qu pin Asignamos? Sensor Mximo RA0 Bomba B1 RB0 Sensor Mnimo RA1 Vlvula Vaciado RB1 Pulsador INICIO RA2 Prof. Luis Zurita 14 Microcontroladores I Y si quiero asignar otros pines? Perfecto, queda a libre eleccin. Paso 2. Diagrama de Flujo: Veamos el diagrama de flujo: INICIO Se puls Inicio? 1 SI NO Bloque 4 Configurar Puerto A y B Bomba=ON Nivel Mximo? Vlvula Vaciado=OFF 1 SI NO Bloque 1 Bloque 2 RA2=0? Bloque 5 Bloque 6 Bloque 7 Bloque 3 Bomba=OFF Vlvula Vaciado=ON Nivel Mnimo? SI NO Bloque 10 Bomba=OFF Vlvula Vaciado=OFF Bloque 8 Bloque 9 Prof. Luis Zurita 15 Microcontroladores I Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: List P=16F84A Include P16F84A.inc ; Encabezado org 00H goto INICIO ; Bloque 1: INICIO bsf STATUS,5 ;Ir a banco 1 bsf TRISA,0 ;RA0 entrada. Sensor mximo. bsf TRISA,1 ;RA1 entrada. Sensor mnimo. bsf TRISA,2 ;RA2 entrada. Pulsador. bcf TRISB,0 ;RB0 salida. Bomba B1 bcf TRISB,1 ;RB1 salida. Vlvula Vaciado. bcf STATUS,5 ;Regresar al banco 0 ; Bloque 2: bcf PORTB,0 ;Bomba=OFF ; Bloque 3: bcf PORTB,1 ; Vlvula Vaciado=OFF ; Bloque 4: EXPLORA btfsc PORTA,2 ;Se ha pulsado INICIO? goto EXPLORA ;No. Seguimos explorando ; Bloque 5: REPITE bsf PORTB,0 ;Se puls INICIO. Bomba=ON ; Bloque 6: bcf PORTB,1 ;Vlvula=OFF ; Bloque 7: MAXIMO btfsc PORTA,0 ;Se ha llegado al mximo? goto MAXIMO ;No. Seguimos explorando ; Bloque 8: SIMAX bcf PORTB,0 ;Nivel Mximo. Bomba=OFF. ; Bloque 9: bsf PORTB,1 ;Vlvula=ON MINIMO btfsc PORTA,1 ;Se ha llegado al mnimo? goto MINIMO ;No. Seguimos explorando goto REPITE ;Nivel mnimo, repetimos ciclo. end 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). Prof. Luis Zurita 16 Microcontroladores I * 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 Motor 1= OK? SI NO Configurar Puerto A y B LVM1=OFF LRM1=ON 1 Declarar Registro Indicador Todos los Leds=OFF Sirena=OFF Registro Indicador=0 Indicador=0 LVM1=OFF LRM1=ON Indicador=1 Motor 2= OK? SI NO LVM2=OFF LRM2=ON LVM2=OFF LRM2=ON Indicador=1 Motor 3= OK? SI NO LVM3=OFF LRM3=ON LVM3=OFF LRM3=ON Indicador=1 1 Motor 4= OK? SI NO LVM4=OFF LRM4=ON LVM4=OFF LRM4=ON Indicador=1 Indicador= 0? SI NO Sirena=ON CICLO 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. Sirena=OFF 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 P=16F84A Include P16F84A.inc ;Encabezado INDICADOR equ 20H ;Declaramos el registro Indicador org 00H goto INICIO INICIO bsf STATUS,5 ;Ir a banco 1 movlw B00001111 movwf TRISA ;Configuramos el Puerto A clrf TRISB ;Configuramos el Puerto B bcf STATUS,5 ;Regresar al banco 0 clrf PORTB ;Todos los Leds=OFF bcf PORTA,4 ;Sirena=OFF clrf INDICADOR ;Registro Indicador=0 MAQ1 btfsc PORTA,0 ;Mquina 1 inactiva? goto M1OK ;Vamos a Mquina 1 bien. M1MAL bcf PORTB,0 ;LVM1=OFF bsf PORTB,1 ;LRM1=ON clrf INDICADOR ;Indicador a cero goto MAQ2 ;Vamos a explorar Mquina 2 M1OK bsf PORTB,0 ;LVM1=ON bcf PORTB,1 ;LRM1=OFF movlw .1 movwf INDICADOR ;Indicador=1 goto MAQ2 ;Vamos a explorar Mquina 2 MAQ2 btfsc PORTA,1 ;Mquina 2 inactiva? goto M2OK ;Vamos a Mquina 2 bien. M2MAL bcf PORTB,2 ;LVM2=OFF bsf PORTB,3 ;LRM2=ON clrf INDICADOR ;Indicador a cero goto MAQ3 ;Vamos a explorar Mquina 2 M2OK bsf PORTB,2 ;LVM2=ON bcf PORTB,3 ;LRM2=OFF movlw .1 movwf INDICADOR ;Indicador=1 goto MAQ3 ;Vamos a explorar Mquina 3 MAQ3 btfsc PORTA,2 ;Mquina 3 inactiva? goto M3OK ;Vamos a Mquina 3 bien. M3MAL bcf PORTB,4 ;LVM3=OFF Prof. Luis Zurita 19 Microcontroladores I bsf PORTB,5 ;LRM3=ON clrf INDICADOR ;Indicador a cero goto MAQ4 ;Vamos a explorar Mquina 4 M3OK bsf PORTB,4 ;LVM3=ON bcf PORTB,5 ;LRM3=OFF movlw .1 movwf INDICADOR ;Indicador=1 goto MAQ4 ;Vamos a explorar Mquina 4 MAQ4 btfsc PORTA,3 ;Mquina 4 inactiva? goto M4OK ;Vamos a Mquina 4 bien. M4MAL bcf PORTB,6 ;LVM4=OFF bsf PORTB,7 ;LRM4=ON clrf INDICADOR ;Indicador a cero goto ALARMA ;Vamos a explorar la Alarma M4OK bsf PORTB,6 ;LVM4=ON bcf PORTB,7 ;LRM4=OFF movlw .1 movwf INDICADOR ;Indicador=1 goto ALARMA ;Vamos a explorar la Alarma ALARMA movf INDICADOR,0 ;INDICADORW sublw 00H btfss STATUS,2 ;Z=1? INDICADOR=0? goto ALAOFF ; Hay al menos una mquina=ON. goto ALAON ; Todas las mquinas= OFF ALAON bsf PORTA,4 ; ALARMA=ON goto MAQ1 ;Repetimos el ciclo de exploracin. ALAOFF bcf PORTA,4 ; ALARMA=OFF goto MAQ1 ;Repetimos el ciclo de exploracin. end ;Fin del Programa 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. Prof. Luis Zurita 20 Microcontroladores I 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: ENTRADA Qu pin Asignamos? SALIDA Qu pin Asignamos? Interruptor INICIO RA0 Bomba B1 RB0 Sensor Mximo RA1 Bomba B2 RB1 Sensor Mnimo RA2 Y si quiero asignar otros pines? Perfecto, queda a libre eleccin. MODO Manual Auto Prof. Luis Zurita 21 Microcontroladores I Paso 2. Diagrama de Flujo: INICIO Configurar Puerto A y B Inicializar Puerto B Manual? Bomba 1= ON Bomba 2= ON SMximo? SMnimo? Bomba 1= ON Bomba 2= OFF Smximo? Bomba 1= OFF Bomba 2= OFF Bomba 1= OFF Bomba 2= ON 2 M 1 M 1 2 SI NO SI NO SI NO SI NO Prof. Luis Zurita 22 Microcontroladores I Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: list P=16F84A include P16F84A.INC org 00H goto INICIO INICIO bsf STATUS,5 clrf TRISB movlw 1FH movwf TRISA bcf STATUS,5 clrf PORTB MODO btfsc PORTA,0 ;MODO AUTO? goto AUTO MANUAL bsf PORTB,0 ;No. Modo manual. Bomba 1= ON bsf PORTB,1 ;Bomba 2=ON goto MODO AUTO btfsc PORTA,1 ;MXIMO? goto DOS btfsc PORTA,2 ;MNIMO goto MODO1 MODO2 bsf PORTB,0 ;Bomba 1=ON bcf PORTB,1 ;Bomba 2=OFF UNO btfss PORTA,1 ;MXIMO ALCANZADO goto UNO DOS bcf PORTB,0 ;Bomba 1=OFF bcf PORTB,1 ;Bomba 2=OFF goto MODO MODO1 bcf PORTB,0 ;Bomba 1=OFF bsf PORTB,1 ;Bomba 2=ON goto UNO end Prof. Luis Zurita 23 Microcontroladores I 7. Veamos el mismo problema anterior, pero insertando un sensor de seguridad que mida el nivel del tanque subterrneo: Se han insertado tres cerrojos en caso de que no haya agua en el tanque subterrneo. (Enmarcados en lneas segmentadas) Paso 2: Diagrama de flujo: Prof. Luis Zurita 24 Microcontroladores I Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: list P=16F84A include P16F84A.INC org 00H goto INICIO INICIO bsf STATUS,5 clrf TRISB movlw 1FH movwf TRISA bcf STATUS,5 clrf PORTB ;Bombas 1 y 2= OFF MODO btfsc PORTA,0 ;MODO AUTO? goto AUTO MANUAL bsf PORTB,0 ;No. Modo manual. Bomba 1= ON bsf PORTB,1 ;Bomba 2=ON CERR1 btfsc PORTA,3 ;No hay agua en tanque subte? goto APAGA1 ;Mantiene alarma OFF ACTIVA1 bcf PORTB,0 ;No hay agua, Bombas=OFF bcf PORTB,1 bsf PORTB,2 ;Alarma= ON goto CERR1 ;Pregunta si hay agua en subte APAGA1 bcf PORTB,2 ;Alarma= OFF goto MODO AUTO btfsc PORTA,2 ;Por debajo de Nivel mnimo? goto MAX2 ; No. Va a preguntar por NMx CICLO2 bsf PORTB,0 ;Si. bcf PORTB,1 btfsc PORTA,1 ;Por debajo de Nivel mximo? goto MODO ;No. Bombas=OFF CERR2 btfsc PORTA,3 ;No hay agua en tanque subte? goto APAGA2 ;Mantiene alarma OFF ACTIVA2 bcf PORTB,0 ;No hay agua, Bombas=OFF bcf PORTB,1 bsf PORTB,2 ;Alarma= ON goto CERR12 ;Pregunta si hay agua en subte APAGA2 bcf PORTB,2 ;Alarma= OFF goto CICLO2 ;Ejecuta ltima tarea MAX2 btfsc PORTA,1 ;Por debajo de Nivel mximo? goto MODO ;No. Bombas=OFF CERR3 btfsc PORTA,3 ;No hay agua en tanque subte? goto APAGA3 ;Mantiene alarma OFF ACTIVA3 bcf PORTB,0 ;No hay agua, Bombas=OFF bcf PORTB,1 Prof. Luis Zurita 25 Microcontroladores I bsf PORTB,2 ;Alarma= ON goto CERR12 ;Pregunta si hay agua en subte APAGA3 bcf PORTB,2 ;Alarma= OFF goto MAX2 ;Ejecuta ltima tarea end Prof. Luis Zurita 26 Microcontroladores I EJERCICIOS PROPUESTOS (Estudio independiente) 1. Realice un programa que permita explorar la causa de un RESET, en un PIC16F84 2. En el cuerpo de un programa, se han sumado dos registros A (F0H) y B (1FH), Realice un programa, que permita ejecutar una rutina X, si el bit C de Status es 1 y que ejecute una rutina Y si ha ocurrido el caso contrario. Nota: Las rutinas X y Y, quedan expresadas solamente. Explique la funcionalidad del bit C. 3. Se tiene un PIC16F84, que tiene colocado 8 LEDs en el puerto B y tres interruptores en los pines RA3, RA1 y RA0. Configure los puertos, segn sea el caso. 4. Configure los bits impares del puerto A como entrada y los pares como salida. 5. Realice un programa que permita explorar si el bit 5 del puerto B del PIC16F84, es uno y que ejecute una rutina X. En caso contrario el PIC debe de ejecutar una rutina Y. Nota: Las rutinas X y Y quedan expresadas solamente. 6. Se desea manejar un decodificador 7448, y cuatro displays, con un PIC16F84, configure: A) El puerto B para que ejecute esta tarea. B) El puerto A para controlar el decodificador y el puerto B para el control de los displays. 7. Se desean activar dos LEDs del puerto B, si el bit Z del registro STATUS es 1. Realice una rutina que permita ejecutar esta tarea. 8. Configure al PIC16F84 para que el temporizador TMR0, trabaje con los pulsos provenientes de un reloj externo, y el mismo cambie en el flanco de subida del pulso externo. Qu pin permite ingresar estos pulsos al PIC? 9. Configure al PIC16F84 para que el flanco de interrupcin externa sea el de bajada y a su vez que las resistencias PULL-UP estn activadas. 10. Disee una alarma antirrobo de 8 zonas. Z1=Z2=Z3=Z4= 1 (Normal) 0 (Alarma) Z5=Z6=Z7=Z8= 1 (Alarma) 0 (Normal) - Si alguna zona se activa, debe activarse un led rojo. Prof. Luis Zurita 27 Microcontroladores I - Si ninguna zona se activa (Normal), debe activarse un led verde. 11. Disee un comparador digital: 12. Se desea controlar una lmpara, en este caso un diodo LED desde dos interruptores, de forma que cuando los dos interruptores estn abiertos el LED est apagado. A partir de esta situacin, cada vez que cambie el estado de un interruptor, el estado del LED bascula (si est apagado se enciende y viceversa). 13. Realice un codificador de prioridad de 8 bits: Prof. Luis Zurita 28 Microcontroladores I 14. Realice la suma de dos datos A y B, de cuatro bits cada uno. Si se produce un acarreo, se debe activar el bit RA4. Los datos A y B, provienen del nibble bajo del puerto A y B respectivamente. 15. Realice un contador decimal de 0 a 9, que cambie de forma manual por cada pulso introducido en el pulsador: 16. Se desea realizar un programa que lea el estado de tres interruptores (RB0, RB1, RB2) y que realice las siguientes tareas: RB2 RB1 RB0 Actividad 0 0 1 Motor1= on 1 1 0 Vlvula1= on 1 0 1 Bomba1= on Resto de las combinaciones M1=V1=B1= off y lmpara1= on 17. Disee un controlador ON-OFF, para el nivel de agua de un tanque. El sistema cuenta con los siguientes elementos: 1 Sensor de nivel Alto (NA), 1 Sensor de nivel Bajo (NB), 1 Sensor de nivel mximo (NMAX). 1 Pulsador de parada (PARE), 1 pulsador de arranque (MARCHA). 1 Actuador 110 VAC, para la bomba (B 1 ), 1 Vlvula solenoide de desage (Vd). El diseo debe de cumplir con las siguientes condiciones: Si el sensor NA, se ha activado, se debe de detener la bomba manteniendo la vlvula Vd cerrada. Si el sensor NB se ha activado Prof. Luis Zurita 29 Microcontroladores I se debe de activar la bomba y mantener la vlvula Vd cerrada. Si el sensor NMAX se ha activado, se debe de apagar la bomba y abrir la vlvula Vd, Si se ha pulsado PARE, se debe de detener la bomba manteniendo la vlvula Vd cerrada. Si se ha pulsado MARCHA, se debe de reiniciar la bomba, respetando las condiciones anteriores. Nota: Realice diagrama de flujo. 18. Realice un control de acceso formado por dos nmeros de 4 bits: D (D 3 ,D 2 ,D 1 ,D 0 ) y U (U 3 ,U 2 ,U 1 ,U 0 ). Se debe de comparar con una clave guardada en la RAM, que debe estar constituida por los dos ltimos nmeros de su cdula. Se dispone de un pulsador que permite leer la clave (LCLV). Se dispone de tres intentos, luego de los cuales el microcontrolador se bloquea. Se debe mostrar en la salida un led verde que indique que se ha ejecutado la clave de forma correcta y un led rojo que indique lo contrario, as como una sirena que debe activarse si se han alcanzado los tres intentos de forma errnea. Nota: Si la clave es correcta se debe de poner el contador de errores a cero. Nota: Debe realizar diagrama de flujo. Prof. Luis Zurita 30 Microcontroladores I 19. Realice un programa que ejecute las siguientes tareas: Sean A y B, dos nmeros de 3 bits cada uno, Sea S un interruptor selector de datos (Si S=1, selecciona dato A y en caso contrario, S=0 selecciona dato B), Sea F un interruptor selector de funciones (Si F=1, se debe mostrar por el decodificador el resultado de X + 2 (X= A B, segn sea el dato seleccionado por ud). Si F=0, se debe mostrar por el decodificador el resultado de A B. Adicional a esto, debe contar con un led, que indicar si la resta es negativa (Led ON) o si no lo es (Led OFF). 20. Realice un programa que ejecute las siguientes tareas: Sean A y B, dos nmeros de 3 bits cada uno, Sea S un interruptor selector de datos (Si S=1, selecciona dato B y en caso contrario, S=0 selecciona dato A), Sea F un interruptor selector de funciones (Si F=1, se debe mostrar por el decodificador el resultado de X + 2 (X= A B, segn sea el dato seleccionado por ud). Si F=0, se debe mostrar por el decodificador el resultado de A B. Adicional a esto, debe contar con un led, que indicar si la resta es negativa (Led ON) o si no lo es (Led OFF): Prof. Luis Zurita 31 Microcontroladores I 21. Realice el programa para un control de acceso de un local, cuya capacidad es de 95 personas. El local consta de dos sensores que se encargan de agregar o restar las personas que ingresan a ste. Al llegar a la cifra mxima, se debe mantener la puerta cerrada hasta que salga alguna persona y encender un led que indique: NO HAY CUPO. En caso de no haber llegado a la cifra mxima se debe mantener la puerta abierta y encender un led que indique: HAY CUPO NOTA: El local cuenta con una sola puerta de acceso. Por medidas de seguridad, solo puede ingresar o salir una persona a la vez.