Anda di halaman 1dari 31

Prof.

Luis Zurita 1 Microcontroladores I


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.

Anda mungkin juga menyukai