guía de ejercicios resueltos tema 2

23
Prof. Luis Zurita 1 Microcontroladores I GUÍA DE EJERCICIOS RESUELTOS TEMA 3: HERRAMIENTAS DE PROGRAMACIÓN

Upload: luis-zurita

Post on 13-Jun-2015

27.395 views

Category:

Education


10 download

TRANSCRIPT

Page 1: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 1 Microcontroladores I

GUÍA DE EJERCICIOS RESUELTOS

TEMA 3:

HERRAMIENTAS DE PROGRAMACIÓN

Page 2: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 2 Microcontroladores I

PROCEDIMIENTO DE RESOLUCIÓN

El procedimiento estándar para la resolución de un proyecto en general

recomendado por el autor, consiste en segmentar el proyecto en tres pasos:

Paso 1. Enunciado y delimitación del Hardware: El enunciado es la

razón 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 diseño que se está proponiendo. Se debe establecer un

resumen de cómo se debe comportar el circuito de control en base a lo que

queremos diseñar.

Sirve para:

• Ponerle límites 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 lógico

del problema, proyecto o sistema que queremos diseñar.

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

pequeñas para su entendimiento y luego se agrupan, obteniendo la solución total

del proyecto.

Page 3: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 3 Microcontroladores I

Generalmente se parte del enunciado que se ha delimitado en el paso

anterior.

Como recomendación general, antes de pasar a la elaboración del lenguaje

ensamblador, hágase las siguientes preguntas:

¿El diagrama de flujo tiene continuidad y lógica?

¿Cumplo con las normas de elaboración 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. Elaboración 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 documentación previa, experiencia, inventiva e

ingenio le permitirán combinarlas para que realicen la misma función 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 estándares que existen para el uso en

diferentes procedimientos, tales como: Rutinas matemáticas, manejo de LCD,

comunicaciones, conversiones entre códigos, etc.

Veamos un diagrama de flujo de la metodología de resolución de

problemas:

Page 4: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 4 Microcontroladores I

Page 5: Guía de ejercicios resueltos tema 2

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 número 5. Caso contrario se debe mostrar el

número3. (8 ptos)

SOLUCIÓN:

Paso 1. Enunciado y delimitación del Hardware: si el enunciado y el hardware

ya se nos ha proporcionado, saltaremos este paso.

Paso 2. Diagrama de Flujo:

Page 6: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 6 Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:

Si tenemos el Diagrama de Flujo bien diseñado, lo demás es “Carpintería”,

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 B’10100000’ ;RA3=1. Mostrar 5 en display

movwf PORTB ;5→Display

goto EXPLORA ;Seguimos explorando el Bit RA3

; Bloque 4:

TRES movlw B’11000000’ ;RA3=0. Mostrar 3 en display

movwf PORTB ;3→Display

goto EXPLORA ;Seguimos explorando el Bit RA3

end

Nota: Otra forma de hacer los bloques 3 y 4 sería 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 conexión del puerto B con el display.

Page 7: Guía de ejercicios resueltos tema 2

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)

SOLUCIÓN:

Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado pero

el hardware no está del todo claro.

Como no se especifica que bit del microcontrolador controla a cuál

segmento del display, debemos especificarlo. Además no se especifica que

display vamos a utilizar, no sabemos si es ánodo común o cátodo común. Por lo

tanto lo asignaremos a nuestro criterio. Eligiendo un cátodo común 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 identificación de los segmentos de un display a nivel internacional es la

siguiente:

Page 8: Guía de ejercicios resueltos tema 2

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

Page 9: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 9 Microcontroladores I

goto UUU ;Este paso podemos obviarlo.

; Bloque 3:

UUU movlw 3EH ;RA1=1. Mostrar U en display

movwf PORTB ;3EH→Display

goto EXPLORA ;Seguimos explorando el Bit RA1

; Bloque 4:

CCC movlw 39H ;RA1=0. Mostrar C en display

movwf PORTB ;39H→Display

goto EXPLORA ;Seguimos explorando el Bit RA1

end

3. Diseñe 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 D’125’ y apagarlo cuando llegue a D’221’.

Repetir el ciclo.

SOLUCIÓN:

Paso 1. Enunciado y delimitación 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)

¿Cómo quedaría delimitado el hardware?

Asignaremos la lógica del Pulsador (Lógica negativa):

Si P es presionado, RA3=0

Si P no es presionado, RA3=1.

Si usted desea trabajar con lógica positiva, no hay problema, debe

reconfigurar el circuito del pulsador.

Page 10: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 10 Microcontroladores I

OSC1/CLKIN16

RB0/INT6

RB17

RB28

RB39

RB410

RB511

RB612

RB713

RA017

RA118

RA21

RA32

RA4/T0CKI3

OSC2/CLKOUT15

MCLR4

U1

PIC16F84A

C1

22p

C2

22p

X1CRYSTAL

R11k

VDD

VSS

VSS

VSS

VSS

PULSADOR

Todas las Resistencias= 330 Ohmios

Listo, tenemos el cascarón vacío 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:

Todas las Resistencias= 330 Ω

Pulsador

Page 11: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 11 Microcontroladores I

INICIO

DeclararRegistro Contador

¿Se hapulsado P?

1

SI

NO

Bloque 5

Bloque 1

ConfigurarPuerto A y B

InicializamosRegistro Contador

Contador→PORTB

Contador=Contador+1

¿Contador=125?

Led=ON

Contador→PORTB

1

SI

¿Contador=221?

Led=OFF

1

SI

NO NO1

Bloque 2

Bloque 3

Bloque 4

RA3=0?

Bloque 6

Bloque 7

Bloque 8Bloque 9

Page 12: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 12 Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:

Recuerde la declaración 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 ;CONTADOR→W

movwf PORTB ; W→PORTB

; 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 ;CONTADOR→W

movwf PORTB ; W→PORTB

; Bloque 8:

sublw .125 ;¿Contador=125? W =Contador.

Page 13: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 13 Microcontroladores I

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 ; CONTADOR→W

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

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. Diseñe un control de nivel para un tanque. Al pulsar “INICIO”, se

activa la bomba B1. La bomba permanece encendida hasta alcanzar el

nivel máximo, mediante el cual se apagará. Se debe abrir la válvula de

vaciado. La bomba (B1) se volverá a activar de forma automática

cuando se alcance el nivel mínimo procediendo a cerrar la válvula de

vaciado, hasta que alcance el nivel máximo, repitiendo el ciclo de forma

automática sin necesidad de volver a pulsar “INICIO”.

Page 14: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 14 Microcontroladores I

Paso 1. Enunciado y delimitación 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 quién nos dará la

información.

Debemos identificar cuales elementos son entrada y cuales salida:

ENTRADA ¿Qué pin

Asignamos?

SALIDA ¿Qué pin

Asignamos?

Sensor Máximo RA0 Bomba B1 RB0

Sensor Mínimo RA1 Válvula Vaciado RB1

Pulsador “INICIO” RA2

¿Y si quiero asignar otros pines? Perfecto, queda a libre elección.

Paso 2. Diagrama de Flujo:

Veamos el diagrama de flujo:

Page 15: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 15 Microcontroladores I

INICIO

¿Se pulsóInicio?

1SI

NO

Bloque 4

ConfigurarPuerto A y B

Bomba=ON

¿Nivel Máximo?

Válvula Vaciado=OFF

1

SI

NO

Bloque 1

Bloque 2

RA2=0?

Bloque 5

Bloque 6

Bloque 7

Bloque 3

Bomba=OFF

Válvula Vaciado=ON

¿Nivel Mínimo?

SI

NOBloque 10

Bomba=OFF

Válvula Vaciado=OFF

Bloque 8

Bloque 9

Page 16: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 16 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 máximo.

bsf TRISA,1 ;RA1 entrada. Sensor mínimo.

bsf TRISA,2 ;RA2 entrada. Pulsador.

bcf TRISB,0 ;RB0 salida. Bomba B1

bcf TRISB,1 ;RB1 salida. Válvula Vaciado.

bcf STATUS,5 ;Regresar al banco 0

; Bloque 2:

bcf PORTB,0 ;Bomba=OFF

; Bloque 3:

bcf PORTB,1 ; Válvula 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 ;Válvula=OFF

; Bloque 7:

MAXIMO btfsc PORTA,0 ;¿Se ha llegado al máximo?

goto MAXIMO ;No. Seguimos explorando

; Bloque 8:

SIMAX bcf PORTB,0 ;Nivel Máximo. Bomba=OFF.

; Bloque 9:

bsf PORTB,1 ;Válvula=ON

MINIMO btfsc PORTA,1 ;¿Se ha llegado al mínimo?

goto MINIMO ;No. Seguimos explorando

goto REPITE ;Nivel mínimo, repetimos ciclo.

end

Page 17: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 17 Microcontroladores I

5. Se desea diseñar un sistema de protección para una línea de

ensamblaje que contiene 4 máquinas soldadoras.

M1 (RA0) M2 (RA1) M3 (RA2) M4 (RA3)

Máquina activa= 1 Máquina inactiva= 0

* Cada máquina tiene dos leds que indican si están funcionando:

(Led Verde=ON) o si están apagadas (Led Rojo=ON).

* Si ninguna máquina está activa, debe activarse adicionalmente una señal

sonora (RA4).

SOLUCIÓN:

Paso 1. Enunciado y delimitación del Hardware: si el enunciado y el hardware

ya se nos ha proporcionado, saltaremos este paso.

Page 18: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 18 Microcontroladores I

Paso 2. Diagrama de Flujo:

INICIO

¿Motor 1=OK?

SI

NO

ConfigurarPuerto A y B

LVM1=OFF

LRM1=ON

1

Declarar RegistroIndicador

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

CICLOCICLO

CICLO

¿Qué función tiene el registro Indicador?

El ciclo de exploración de las máquinasempieza por la primera. Si esta no funciona,

Indicador vale 0. Si funciona, Indicador vale 1.

Si alguna de las restantes máquinasfunciona, Indicador pasará a valer 1, lo que

nos informa que al menos hay una máquina

trabajando, por lo que no debería activarse laalarma.

Ahora. Si la máquina 1 no funciona, y no

funciona ninguna de las restantes, Indicadorseguirá 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 máquina es

cero para activar o no la alarma, pero eldiagrama de flujo quedaría más extenso, así

como su programa.

Sirena=OFF

Page 19: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 19 Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:

Existe una forma más 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 B’00001111’

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 ;Máquina 1 inactiva?

goto M1OK ;Vamos a Máquina 1 bien.

M1MAL bcf PORTB,0 ;LVM1=OFF

bsf PORTB,1 ;LRM1=ON

clrf INDICADOR ;Indicador a cero

goto MAQ2 ;Vamos a explorar Máquina 2

M1OK bsf PORTB,0 ;LVM1=ON

bcf PORTB,1 ;LRM1=OFF

movlw .1

movwf INDICADOR ;Indicador=1

goto MAQ2 ;Vamos a explorar Máquina 2

MAQ2 btfsc PORTA,1 ;Máquina 2 inactiva?

goto M2OK ;Vamos a Máquina 2 bien.

M2MAL bcf PORTB,2 ;LVM2=OFF

bsf PORTB,3 ;LRM2=ON

clrf INDICADOR ;Indicador a cero

goto MAQ3 ;Vamos a explorar Máquina 2

Page 20: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 20 Microcontroladores I

M2OK bsf PORTB,2 ;LVM2=ON

bcf PORTB,3 ;LRM2=OFF

movlw .1

movwf INDICADOR ;Indicador=1

goto MAQ3 ;Vamos a explorar Máquina 3

MAQ3 btfsc PORTA,2 ;Máquina 3 inactiva?

goto M3OK ;Vamos a Máquina 3 bien.

M3MAL bcf PORTB,4 ;LVM3=OFF

bsf PORTB,5 ;LRM3=ON

clrf INDICADOR ;Indicador a cero

goto MAQ4 ;Vamos a explorar Máquina 4

M3OK bsf PORTB,4 ;LVM3=ON

bcf PORTB,5 ;LRM3=OFF

movlw .1

movwf INDICADOR ;Indicador=1

goto MAQ4 ;Vamos a explorar Máquina 4

MAQ4 btfsc PORTA,3 ;Máquina 4 inactiva?

goto M4OK ;Vamos a Máquina 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 ;INDICADOR→W

sublw 00H

btfss STATUS,2 ;Z=1? INDICADOR=0?

goto ALAOFF ; Hay al menos una máquina=ON.

goto ALAON ; Todas las máquinas= OFF

ALAON bsf PORTA,4 ; ALARMA=ON

goto MAQ1 ;Repetimos el ciclo de exploración.

ALAOFF bcf PORTA,4 ; ALARMA=OFF

goto MAQ1 ;Repetimos el ciclo de exploración.

end ;Fin del Programa

Page 21: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 21 Microcontroladores I

6. Diseñe 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 subterráneo.

Si “MODO” es automático, la activación de las bombas dependerá

de:

Si el nivel del agua está por debajo del nivel mínimo, se activará la

bomba 1 hasta que se alcance el nivel Máximo, y procederá a apagarse.

Si el nivel del agua está por encima del nivel mínimo, pero por

debajo del nivel máximo, se activará la bomba 2 hasta que se alcance

el nivel Máximo y procederá a apagarse.

Se debe monitorear si ha cambiado el “MODO”.

SOLUCIÓN:

Paso 1. Enunciado y delimitación 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 quién nos dará la

información.

Debemos identificar cuales elementos son entrada y cuales salida:

ENTRADA ¿Qué pin

Asignamos?

SALIDA ¿Qué pin

Asignamos?

Interruptor “INICIO” RA0 Bomba B1 RB0

Sensor Máximo RA1 Bomba B2 RB1

Sensor Mínimo RA2

¿Y si quiero asignar otros pines? Perfecto, queda a libre elección.

Page 22: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 22 Microcontroladores I

Paso 2. Diagrama de Flujo:

INICIO

ConfigurarPuerto A y B

InicializarPuerto B

¿Manual?Bomba 1= ONBomba 2= ON

¿SMáximo? ¿SMínimo?Bomba 1= ON

Bomba 2= OFF

¿Smáximo?

Bomba 1= OFFBomba 2= OFF

Bomba 1= OFFBomba 2= ON

2

M

1

M

1

2

SI

NO

SI

NO

SI

NO

SI

NO

Page 23: Guía de ejercicios resueltos tema 2

Prof. Luis Zurita 23 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 ;MÁXIMO?

goto DOS

btfsc PORTA,2 ;MÍNIMO

goto MODO1

MODO2 bsf PORTB,0 ;Bomba 1=ON

bcf PORTB,1 ;Bomba 2=OFF

UNO btfss PORTA,1 ;MÁXIMO 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