Guía de ejercicios resueltos y propuestos tema 4

40
Prof. Luis Zurita 1 Microcontroladores I GUÍA DE EJERCICIOS RESUELTOS Y PROPUESTOS TEMA 4: TIMER 0 E INTERRUPCIONES

Transcript of Guía de ejercicios resueltos y propuestos tema 4

Page 1: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 1 Microcontroladores I

GUÍA DE EJERCICIOS RESUELTOS Y

PROPUESTOS

TEMA 4:

TIMER 0 E INTERRUPCIONES

Page 2: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita

1. Realicemos un programa completo que contenga varias interrupciones.

Si la causa ha sido la activación del pin

binario en el puerto A, si ha sido un cambio de nivel en RB4:RB7, se debe

mostrar el uno en binario en el puerto A y si se ha desbordado el TMR0,

se debe mostrar el cuatro en binario en el puerto A.

analizar y determinar la causa de una interrupción, y ejecutar las tareas

que le correspondan a la interrupción que se ha activado.

Paso 1. Diagrama de Flujo.

2 Microcontroladores I

Realicemos un programa completo que contenga varias interrupciones.

Si la causa ha sido la activación del pin RB0, se debe mostrar un dos en

binario en el puerto A, si ha sido un cambio de nivel en RB4:RB7, se debe

mostrar el uno en binario en el puerto A y si se ha desbordado el TMR0,

se debe mostrar el cuatro en binario en el puerto A. Este ejercicio permite

alizar y determinar la causa de una interrupción, y ejecutar las tareas

que le correspondan a la interrupción que se ha activado.

Paso 1. Diagrama de Flujo. Es el mismo que se mostró en la clase de teoría:

Microcontroladores I

Realicemos un programa completo que contenga varias interrupciones.

RB0, se debe mostrar un dos en

binario en el puerto A, si ha sido un cambio de nivel en RB4:RB7, se debe

mostrar el uno en binario en el puerto A y si se ha desbordado el TMR0,

Este ejercicio permite

alizar y determinar la causa de una interrupción, y ejecutar las tareas

que le correspondan a la interrupción que se ha activado.

Es el mismo que se mostró en la clase de teoría:

Page 3: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 3 Microcontroladores I

Paso 2. Lenguaje ensamblador.

LIST P=16F84A

INCLUDE P16F84A.INC

W_TEMP equ 20H ; Se declaran los registros generales pa

ESTADO_TEMP equ 21H ; salvar los registros STATUS y W

org 00H

goto INICIO

org 04H ; Se coloca el vector interrupción para que se

goto RUTINTERR ; Ejecute la rutina de interrupción

RUTINTERR movwf W_TEMP ; Se inicia a la rutina de servicio de

swapf W_TEMP,1 ; interrupción (RSI)

movf STATUS,0

movwf ESTADO_TEMP

btfsc INTCON,0 ; Se empieza exploración de causa de

goto INTERRB47 ; interrupción. Si RBIF=1, se va a ejecutar

btfsc INTCON,1

goto INTERRB0 ; Si INTF=1, se va a ejecutar

btfsc INTCON,2

goto INTERRTMR ; Si TOIF=1, se va a ejecutar

goto SALIRINT ; Si no es ninguna, se sale de la interrupción

SALIRINT bsf INTCON,7 ; Se habilita GIE, para permitir de nuevo otra

movf ESTADO_TEMP,0 ; Interrupción y se restaura el entorno

movwf STATUS

swapf W_TEMP,0

retfie ; El uso de return o retlw k, puede producir

; errores en la ejecución del programa

;*** Subrutina de tratamiento de cambio de RB4:RB7 ***

INTERRB47 bcf INTCON,0

movlw 01H

movwf PORTA

movf PORTB,0 ; Ver NOTA (1)

bcf INTCON,0 ; Se borra por software el

señalizador de esta

goto SALIRINT ; Interrupción

Page 4: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 4 Microcontroladores I

;*** Subrutina de tratamiento de activación de INT/RB0 ***

INTERRB0 movlw 02H

movwf PORTA

bcf INTCON,1 ; Se borra por software el señalizador

goto SALIRINT

;*** Subrutina de tratamiento del desborde del TMR0 ***

INTERRTMR movlw 04H

movwf PORTA

movlw d'100' ; Se carga el valor calculado para el TMR0

movwf TMR0 ; para asegurarnos que al regresar tenga este valor

bcf INTCON,2 ; Se borra el señalizador

goto SALIRINT

;***Programa Principal***

INICIO bsf STATUS,5

clrf PORTA ; PORTA como entrada

movlw 0FFH

movwf PORTB ; PORTB como entrada

movlw b'01000110'

movwf OPTION_REG ; Diga: ¿Cómo se configuró OPTION?

bcf STATUS,5

movlw b'10111000' ; Se habilita GIE y las interrupciones

movwf INTCON ; Individuales

DORMIR nop

movlw d'100'

movwf TMR0

SINFIN CLRWDT

goto SINFIN ; Se coloca al microcontrolador en

; bucle o lazo sin fin

end

;NOTA (1): En este tipo de interrupción, internamente el procesador lee el nibble

;alto del puerto B y hace una copia; la interrupción se genera cuando la lectura del

;nibble alto del puerto B difiere de la ;copia. Dentro de la ejecución de esta rutina

;de interrupción, es importante que se lea el puerto B, para actualizar la copia, y el

;procedimiento adecuado es el mostrado anteriormente.

Page 5: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 5 Microcontroladores I

2. Genere una señal cuadrada de 200 Hz. Diseño libre.Este ejercicio permite generar una señal cuadrada, con el desborde delTMR0, sea o no por interrupción. Se muestran los dos casos, sin embargose recomienda el manejo por interrupción por ser de mayor efectividad yde aprovechamiento de recursos disponibles en los PIC’s.

Paso 1. Enunciado y delimitación del problema:

Como no se ha especificado por cual pin del microcontrolador saldrá laseñal, asumiremos RB0.

Cuando se trabaja con el Timer 0, se deben incluir los cálculos que sehayan realizado para generar el retardo deseado.

Para una frecuencia de 200 Hz, tendremos un período de:

ܨ =1

ݎ ݑݍ =

1

ܨ=

1

200 ݖܪ= 5 ݏ

Como no se ha especificado el ciclo de trabajo, asumiremos el 50 %, por loque el período en alto y en bajo serán iguales, es decir 2,5 ms

Hagamos los cálculos para 2,5 ms:

De la fórmula proporcionada en la Unidad IV, despejando nos quedará:

ெ ோை = ݎ ݖ ó

4 ∗ ݏ ∗ ݎ ݒ 0ܯݎݏ

Sustituyendo los valores (Como no se nos especificó el oscilador,asumiremos el estándar de 4 MHz:

ெ ோை =2,5 ݏ

4 ∗ ቀ1

ݖܪܯ4ቁ∗ 64

= 39,0625 ≅ 39

ெ ோை = 256 − ݎ ܯ 0 → ݎ ܯ 0 = 256 − ெ ோை = 256 − 39 = 217

Por lo que el valor a cargar en el TMR0= 217

Page 6: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 6 Microcontroladores I

Paso 2. Diagrama de Flujo:

Page 7: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 7 Microcontroladores I

Paso 3. Lenguaje ensamblador:

FORMA A. POR EXPLORACIÓN (POLLING) DEL BIT TOIF:

list P=16F84Ainclude P16F84A.inc

org 00Hgoto INICIO

;************************************;***PROGRAMA PRINCIPAL***;************************************INICIO bsf STATUS,5 ;Zona de configuraciones

clrf TRISBmovlw B'00010101' ; Reloj interno (Temporizador) Predivisormovwf OPTION_REG ; asignado a TMR0, valor= 128bcf STATUS,5clrf PORTB ;Inicializamos el Puerto Bnop

Page 8: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 8 Microcontroladores I

CICLO bsf PORTB,0 ;Señal a nivel altocall DELAY2_5MS ;Llamamos subrutina 2,5 msbcf PORTB,0 ;Señal a nivel bajocall DELAY2_5MS ;Llamamos subrutina 2,5 msgoto CICLO ;Repetimos ciclo

DELAY2_5MS movlw .217 ;Cargamos TMR0 con valormovwf TMR0 ;calculado previamentebcf INTCON,2 ;Borramos el señalizador

ESPERA btfss INTCON,2 ;Se desbordó el TMR0?goto ESPERA ;No. Seguimos esperamosreturn ;Si, han transcurrido 2,5 msend

FORMA B. POR INTERRUPCIÓNlist P=16F84Ainclude P16F84A.inc

org 00H ;Vector de iniciogoto INICIO ;del programa principalorg 04H ;Vector de inicio degoto RSI ;la subrutina de interrupción

;*****************************************;***RUTINA DE INTERRUPCIÓN***;*****************************************RSI bcf INTCON,7 ;Deshabilitamos las interrupciones

btfss INTCON,2 ;La causa de la interrupción es desborde;del TIMER0 TOIF=1?

goto SALIR ;No, Salimosbcf INTCON,2 ;Si, borramos el señalizador TOIFmovlw .01xorwf PORTB,1movlw .217 ;Cargamos el valor del TMR0movwf TMR0 ;Para una nueva temporización

SALIR bsf INTCON,7 ;Habilitamos las interrupcionesretfie

;*************************************;***PROGRAMA PRINCIPAL***;*************************************INICIO bsf STATUS,5

clrf TRISBmovlw B'00010101' ; Reloj interno (Temporizador) Predivisormovwf OPTION_REG ; asignado a TMR0, valor= 128movlw B'10100000' ; Habilitamos las interrupciones

Page 9: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 9 Microcontroladores I

movwf INTCON ;Con GIE=1 y TOIE=1bcf STATUS,5clrf PORTB ;Inicializamos el Puerto Bmovlw .217 ;Cargamos el TMR0 con elmovwf TMR0 ;valor previamente calculado

SINFIN clrwdt ;Usamos esta instrucción paragoto SINFIN ;evitar reinicio del programa

;De resto, el programa se queda en este bucle sin fin esperando el desborde;del TMR0, que ocurrirá según sea el tiempo calculado.

end

Nota: Generalmente cuando los puertos A y/o B pueden sufrir modificacionesdentro de la rutina de interrupción, se salva el entorno (Se verán en los ejemplos3, 4 y 5), sin embargo para este ejemplo, no se modifican otros bits de los puertos,por lo que no es necesario salvar el entorno.

3. Diseñe un control de nivel para un tanque.

Este ejercicio muestra el uso de un botón, pulsador o sensor de

emergencia, que debe detener todo el proceso de manera automática,

protegiendo al operador o a los equipos. Se introduce el concepto de

“Salvar/Restaurar el entorno”.

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á labomba 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 debajodel nivel máximo, se activará la bomba 2 hasta que se alcance el nivelMáximo y procederá a apagarse.

Se debe monitorear si ha cambiado el “MODO”. Importante: Si no hay agua en el tanque subterráneo, se deben apagar

las bombas hasta que el nivel del tanque de trabajo alcance al sensor deoperación

Page 10: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 10 Microcontroladores I

SOLUCIÓN:

Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sinembargo debemos delimitar el hardware.

Para lograr esta tarea debemos asignar los pines de control de Entrada y desalida, con la finalidad de saber qué vamos a controlar y quién nos dará lainformación.

Como el sensor de parada se va a utilizar por interrupción de cambio denivel de RB0, este será configurado como entrada

Debemos identificar cuales elementos son entrada y cuales salida:

ENTRADA ¿Qué pinAsignamos?

SALIDA ¿Qué pinAsignamos?

Interruptor “INICIO” RA0 Bomba B1 RB3Sensor Máximo RA1 Bomba B2 RB1

Sensor Mínimo RA2 IndicadorManual

RB2

Sensor Parada RB0 Indicador Auto RB3

Sensor Operación RA3

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

MODO

ManualAuto

PARADA

OPERACIÓN

Page 11: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 11 Microcontroladores I

R11k

R31k

OSC1/CLKIN16

RB0/INT6

RB17

RB28

RB39

RB410

RB511

RB612

RB713

RA017

RA118

RA21

RA32

RA4/T0CKI3

OSC2/CLKOUT15

MCLR4

U1

PIC16F84A

X1

C1

22p

C2

22p

VDD

VDD

R21k

VDD

VSS

VSSVSS

VSS

VSS

VSS

NIVEL MÁXIMO

VSS

MANUAL

AUTO

RB2

RB2

SENSOR NIVEL ALTO

SENSOR NIVEL BAJO

PARADA

OPERACIÓN

TANQUE

PRINCIPALB1M1 B2 M2

TANQUE SUBTERRÁNEO

MODO

RA0

RA0

RA1

RA1RA2

RA2

RB1

RB

1

RB

3

R1A1k

VDD

VSS

RB0

R1B1k

VDD

VSS

RA3

RB3

RB0

RA3VDD

RB4

RB4

Page 12: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 12 Microcontroladores I

Paso 2. Diagrama de Flujo:

INICIO

ConfigurarPuerto A y B

Bomba 1= OFFBomba 2=OFF

¿Manual?Bomba 1= ONBomba 2= ON

¿NivelMínimo?

¿NivelMáximo?

Bomba 1= ONBomba 2= OFF

¿NivelMáximo?

Bomba 1= OFFBomba 2= OFF

Bomba 1= OFFBomba 2= ON

M

M

M

SI

NO

SI

NO

SI

NO

SI

NO

ConfigurarINTCON

RSI

Salvar entorno

¿Llegó aNoperación?

Bomba 1= OFFBomba 2= OFF

SI

NO

DeshabilitarInterrupciones

¿INTF=1?

SI

NOSALIR

Restaurar entorno

SALIR

HabilitarInterrupciones

INTF=0

retfie

Auto

Page 13: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 13 Microcontroladores I

Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:

list P=16F84Ainclude P16F84A.INC

WTEMP equ 20H ;Declaramos registros paraPBTEMP equ 21H ;Utilizarse para salvar y restaurarSTATEMP equ 22H ;El entorno

org 00H ;Vector de Iniciogoto INICIOorg 04H ;Vector de Interrupcióngoto RSI

;*************************************;***Rutina de servicio de Interrupción***;*************************************RSI bcf INTCON,7 ;Interrupciones deshabilitadasPUSH movwf WTEMP ;Salvamos el entorno

movf STATUS,0movwf STATEMPmovf PORTB,0movwf PBTEMPbtfss INTCON,1 ;INTF=1? Fue por RB0/INT?goto PULL ;No. Salimos de la RSI

SI bcf PORTB,2bcf PORTB,3 ;Bomba 1= OFFbcf PORTB,1 ;Bomba 2= OFF

OPER btfsc PORTA,3 ;Nivel de Operación?goto OPER ;No. Esperamos a que se alcance el

;nivel de operaciónPULL movf PBTEMP,0 ;Restauramos el entorno

movwf PORTBmovf STATEMP,0movwf STATUSmovf WTEMP,0bcf INTCON,1 ;Borramos el señalizadorbsf INTCON,7 ;Interrupciones habilitadasretfie ;Salimos de las interrupciones

;***********************;***Programa Principal***;***********************

INICIO bsf STATUS,5 ;Vamos al banco 1 a configurar

movlw 1FH

movwf TRISA

movlw B'00000001' ;RB0= Entrada, Resto Salidas

Page 14: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 14 Microcontroladores I

movwf TRISB

movlw B'10010000' ;Habilitamos las interrupciones

movwf INTCON ;Con GIE=1 y INTE=1

movlw B'01000000' ;Configuramos el tipo de flanco

movwf OPTION_REG ;De activación de RB0/INT

bcf STATUS,5 ;Vamos al banco 0 a trabajar

clrf TRISB ;Bombas=OFF

MODO btfsc PORTA,0 ;MODO AUTO?

goto AUTO

MANUAL bsf PORTB,2 ;No. Modo manual= ON

bcf PORTB,4 ;Modo Auto=OFF

bsf PORTB,3 ;Bomba 1=ON

bsf PORTB,1 ;Bomba 2=ON

goto MODO

AUTO btfsc PORTA,2 ;MÍNIMO?

goto DOS ;Hay Agua

bsf PORTB,2 ; Modo Auto=ON

bcf PORTB,4 ;Modo Manual=OFF

bsf PORTB,3 ;Bomba 1=ON

bcf PORTB,1 ;Bomba 2=OFF

CERR btfss PORTA,1 ;(NHA)MÁXIMO?

goto CERR ;No Hay Agua

MODO2 bcf PORTB,2 ; Modo Auto=OFF

bcf PORTB,3 ;Bomba 1=ON

bcf PORTB,1 ;Bomba 2=OFF

goto MODO

DOS btfsc PORTA,1 ;(NHA)MÁXIMO?

goto MODO ;HA

MODO1 bcf PORTB,2 ; Modo Auto=OFF

bcf PORTB,3 ;Bomba 1=OFF

bsf PORTB,1 ;Bomba 2=ON

goto CERR

end

Page 15: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 15 Microcontroladores I

4. Realice la automatización de la mezcladora de pinturas, mostrada en la

figura siguiente, bajo la siguiente secuencia de funcionamiento:

El sistema de mezclado se inicia al pulsarse “MARCHA”, mediante el cual,se activa B1, por espacio de por espacio de 10 minutos. B2, MM, VD, MA

deben estar apagados. Se enciende un led verde que indica que el sistemaesta en marcha.

Transcurrido este tiempo, se enciende B2. B1, MM, VD, MA, deben estarapagados.

B2 se mantiene encendido hasta que el sensor “Nivel alto” se activa,mediante el cual se detiene B2, se activa MM. B1, VD, MA, se mantienenapagados.

MM se mantiene encendido por espacio de 2 minutos. B1, B2, VD, MA semantienen apagados. Una vez transcurrido este tiempo, se detiene MM.

Se activa VD, hasta que se activa el sensor “Nivel bajo”, mediante el cual secierra VD y se activa MA por espacio de 7,5 minutos, reiniciándose elproceso nuevamente.

El sistema cuenta con un pulsador de “PARE”, que al activarse encualquier momento detiene todo el proceso, apagando B1, B2, VD, MM y MA,activando un led rojo y apagando al led verde, indicando que existe unaparada del proceso.

Para reiniciar el proceso nuevamente en donde se quedó al momento dedetenerlo, se debe pulsar “REINICIO”.

Este ejercicio muestra el uso de un botón, pulsador o sensor de

emergencia, que debe detener todo el proceso de manera automática,

protegiendo al operador o a los equipos. Se introduce el concepto de

“Salvar/Restaurar el entorno”.

Nota: Utilice el TMR0 para generar la rutina de 1 segundo. (no se realiza por

interrupción sino por polling, puede ser sustituida por una rutina de 1

segundo generada por el PICDEL)

Page 16: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 16 Microcontroladores I

MEZCLADORA DE PINTURAS

TANQUE MEZCLADOR

MM

PINTURA 2PINTURA 1

Nivel Alto

Nivel Bajo

B B

VD

PINTURA

LISTA

MA

PINTURA

LISTA

Page 17: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 17 Microcontroladores I

Nomenclaturas:B1: Bomba 1B2: Bomba 2MM: Motor de MezcladoVD: Válvula de DesagüeMA: Motor de Avance

Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sinembargo debemos delimitar el hardware.

Debemos identificar cuales elementos son entrada y cuales salida:

ENTRADA ¿Qué pinAsignamos?

SALIDA ¿Qué pinAsignamos?

Pulsador “MARCHA” RA0 Led Marcha RB1Pulsador “REINICIO” RA1 Led PARE RB2Sensor Nivel Alto RA2 Válvula

Pintura 1RB3

Sensor Nivel Bajo RA3 VálvulaPintura 2

RB4

Sensor “PARE” RB0 MotorMezclado

RB5

VálvulaDesagüe

RB6

MotorAvance

RB7

Page 18: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 18 Microcontroladores I

El circuito quedaría de la siguiente manera:

PINTURA 1 PINTURA 2

NIVEL ALTO

NIVEL BAJO

CAJA DE CONTROL

MARCHA

PARE

REINICIO

TANQUE

MEZCLADOR

MOTOR MZ

MOTOR AVANCE

VÁLVULA DESAGUE

VDD

VDD

RA2

RA3

VSS

VSS

RB

3

RB

4

RB

5

VSS

RB6

VSS

RB

7

VSS

VDD

VDD

VDD

RA0

RB0

RA1

RB1

RB2

PINTURA

LISTA

PINTURA

LISTA

RB7

Page 19: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 19 Microcontroladores I

Paso 2. Diagramas de Flujo:

INICIO

ConfigurarPuerto A y B

Limpiar Registros en generaly Puerto B

¿MARCHA=0?

B1=ONB2=OFFMM=OFFVD=OFFMA=OFF

LMARCHA=ONLPARE=OFF

SI

NO

ConfigurarINTCON y OPTION_REG

Declarar Registros detrabajo

LEYENDA:VD=Válvula de Desagüe

B1= Válvula de Llenado Pintura 1B2= Válvula de Llenado Pintura 2

LMARCHA= Led MarchaLPARE= Led Pare

NALTO= Sensor Nivel AltoNBAJO=Sensor Nivel Bajo

MM= Motor MezcladoMA= Motor de Avance

MARCHA= Pulsador de inicioPARE= Pulsador de parada

REINICIO= Pulsador de reinicio del procesoLógica de los sensores=

0=Activado1= Desactivado

¿NALTO=0?

NO

SI

B2=OFFMM=ON

VD=ON

¿NBAJO=0?

NO

SI

1

VD=OFFMA=ON

RET7_5S

1

A

RET13SEG

B1=OFFB2=ON

LMARCHA=ONLPARE=OFF

RET1M

MM=OFF

MA=OFF

1

RSI

Salvar entorno

¿REINICIO=0?

SI

NO

DeshabilitarInterrupciones

¿INTF=1?

SI

NOSALIR

Restaurar entorno

SALIR

HabilitarInterrupciones

INTF=0

retfie

LPARE=OFF

B1=OFFB2=OFFMM=OFFVD=OFFMA=OFF

LMARCHA=OFFLPARE=ON

Page 20: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 20 Microcontroladores I

Paso 3. Lenguaje Ensamblador:list P=16F84Ainclude p16F84A.inc

W_TEMP equ 20H ;Declaramos los registrosESTADO_TEMP equ 21H ;A utilizar para salvar y restaurarPB_TEMP equ 22H ;El entornoREGAUX1 equ 23H ;Registros para generar retardosREGAUX2 equ 24H ;Por Software

org 00Hgoto INICIOorg 04Hgoto RSI

;***********************************;***Rutina de Servicio de Interrupción***;***********************************RSI btfss INTCON,1 ;INTF=1?

goto SALIR ;No. Salimos de la Interrupciónmovwf W_TEMP ;Salvamos el entornoswapf W_TEMP,1movf STATUS,0movwf ESTADO_TEMPmovf PORTB,0movwf PB_TEMPmovlw b'00000100' ;Si. Todo OFF. LPARE= ONmovwf PORTB ;(ROJO=ON)

REINI btfsc PORTA,1 ;Se pulsó REINICIO?goto REINI ;Esperamosbcf INTCON,1 ;Borramos señalizador INTFmovf PB_TEMP,0 ;Restauramos el entornomovwf PORTBmovf ESTADO_TEMP,0movwf STATUSswapf W_TEMP,0

SALIR bsf INTCON,7 ;Habilitamos las interrupcionesretfie ;Salimos de la RSI

;**********************;***Programa Principal ***;**********************INICIO bsf STATUS,5 ;Configuramos los Puertos

movlw 01FHmovwf TRISA ;PA como entradamovlw b'00000001'movwf TRISB ;PB como entrada/salidamovlw b'01000111' ;Prescaler= 256

Page 21: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 21 Microcontroladores I

movwf OPTION_REG ;Y configuramos el flanco de RBO/INT

movlw b'10010000' ;GIE= 1 y INTE=1movwf INTCONbcf STATUS,5clrf PORTB ;Limpiamos el Puerto B

EMPIEZA btfsc PORTA,0 ;Se pulsó “INICIO”goto EMPIEZA ;No. Esperamos

REPITE bsf PORTB,3 ;B1= ONbsf PORTB,1 ;Led Marcha=ON (Verde= ON)bcf PORTB,2 ;Led PARE=OFFbcf PORTB,4 ;B1=OFFbcf PORTB,5 ;MM=OFFbcf PORTB,6 ;VD=OFFbcf PORTB,7 ;MA=OFFcall RET13 ;Llamamos a Subrutina de 13 seg.bcf PORTB,3 ;B1= OFFbsf PORTB,4 ;B2= ON

NAOK btfsc PORTA,2 ;Nivel Alto= 0?goto NAOK ;No. Esperamosbcf PORTB,4 ;B2= OFFbsf PORTB,5 ;MM= ONcall RET1M ;Llamamos subrutina de 1 minuto.bcf PORTB,5 ;MM= OFFbsf PORTB,6 ;VD= ON

NBOK btfsc PORTA,3 ;Nivel Bajo= 0?goto NBOK ;No. Esperamosbcf PORTB,6 ;VD= OFFbsf PORTB,7 ;MA= ONcall RET7_5 ;Subrutina de 7,5 segbcf PORTB,7goto REPITE

;**********************************;***Rutina de 7,5 segundos***;**********************************RET7_5 bcf INTCON,2

movlw d'114'movwf REGAUX1

RECAR75 bcf INTCON,2clrf TMR0

ESPERA1 btfss INTCON,2goto ESPERA1decfsz REGAUX1,1goto RECAR75return

Page 22: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 22 Microcontroladores I

;*********************************;***Rutina de 13 segundos***;*********************************RET13 bcf INTCON,2

movlw d'198'movwf REGAUX1

RECAR13 bcf INTCON,2clrf TMR0

ESPERA2 btfss INTCON,2goto ESPERA2decfsz REGAUX1,1goto RECAR13return

;****************************;***Rutina de 1 minuto***;****************************RET1M movlw d'30' ;Original= 60, se cambió para la simulación

movwf REGAUX2RECAR4 movlw d'15'

movwf REGAUX1RECAR5 bcf INTCON,2

clrf TMR0ESPERA4 btfss INTCON,2

goto ESPERA4decfsz REGAUX1,1goto RECAR5decfsz REGAUX2,1goto RECAR4returnend ;Fin del programa

Page 23: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 23 Microcontroladores I

5. Se desea automatizar una lavadora “CHACACHACA” bajo dos modos de

lavado (uno de Lavado Rápido de 30 minutos de duración y otro de

Lavado Lento de 50 minutos de duración), el sistema constará de un

pulsador de “INICIO” y un interruptor selector de modo de lavado.

Automatice bajo las siguientes condiciones:Este ejercicio muestra el uso de un botón, pulsador o sensor de emergencia,

que debe detener todo el proceso de manera automática, protegiendo al

operador o a los equipos. Se introduce el concepto de “Salvar/Restaurar el

entorno”.

Se elige entre lavado rápido ó lento Se presiona “INICIO” y realiza lo siguiente: Se llena la CHACACHACA hasta el nivel de agua máximo; lava ó “bate” por

la mitad del tiempo; se detiene; se vacía; se llena otra vez de agua; lava ó“bate” hasta que falten tres minutos; se detiene; se vacía; se llena otra vezde agua; lava ó “bate” por el resto del tiempo; se vacía nuevamente y emiteuna alarma sonora por espacio de 10 segundos; y se detiene a la espera deun nuevo proceso de lavado.

Si no hay agua en el depósito de agua, se detiene el lavado, se cierra laválvula de llenado y se emite una alarma sonora hasta que se solucione elproblema agregando agua al depósito hasta el nivel mínimo de lavado.

ML: Motor de Lavadora. VD: Válvula de Desagüe. VLL: Válvula deLlenado.

Nmínimo, Nmáximo, Nmínimo de lavado, Nivel de alarma: Sensores denivel.

Nota: Utilice el TMR0 para generar la rutina de 1 segundo.

Page 24: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 24 Microcontroladores I

Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sinembargo debemos delimitar el hardware.

Debemos identificar cuales elementos son entrada y cuales salida:

ENTRADA ¿Qué pinAsignamos?

SALIDA ¿Qué pinAsignamos?

Interruptor “MODO” deLavado

RA0 Motor deLavadora

RB1

Pulsador “INICIO” RA1 Válvula deDesagüe

RB2

Sensor Nivel Mínimo RA2 Válvula deLlenado

RB3

Sensor Nivel Máximo RA3 Led“INICIO”

RB4

Sensor Nivel Mínimode lavado

RA4 Led“Rápido”

RB5

Sensor Nivel de Alarma RB0 Led “Lento” RB6ALARMA RB7

Como podemos observar, de manera común, se asignan las entradas alpuerto A y las salidas al puerto B.

Page 25: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 25 Microcontroladores I

El circuito del hardware a simular quedaría de la siguiente manera:

NIVEL ALTO

NIVEL BAJO

PANEL DE CONTROL

INICIO

LAVADO

LAVADORA

MOTOR MZ VÁLVULA DESAGUE

VDD

VDD

RA3

RA2

VSS

RB

3

RB

1

VSS

RB2

VSS

VSS

VDD

VDD

VDD

RA1

RB0

RA4

RB4

RB5

VSS

DEPÓSITO

DE AGUA

NIVEL DE ALARMA

NMÍNIMO DE LAVADO

VÁLVULA DE LLENADO

VDD

RA0RB6

ON

RÁPIDO

LENTO

RB

7

VSS

ALARMA

Page 26: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 26 Microcontroladores I

Paso 2. Diagramas de Flujo:

INICIO

ConfigurarPuerto A y B

Limpiar Registros en generaly Puerto B

¿INTLAV?

Led Rápido=ONLed Lento=OFFContaMed=22ContaLav=45

¿INICIO?

SI

NO

ConfigurarINTCON y OPTION_REG

(Rápido)

Declarar Registros detrabajo

Led Rápido=OFFLed Lento=ONContaMed=12ContaLav=25

(Lento)

NO

SI

VD=OFFLed Inicio=ON

VLL=ON

LEYENDA:VD=Válvula de DesagüeVLL= Válvula de Llenado

NMAX= Sensor Nivel MáximoNMIN=Sensor Nivel Mínimo

NMINLAV=Sensor Nivel Mínimo de LavadoMotorL= Motor Lavadora

CONTA=Contador de minutosCONTAMEDIO=Contador precargado con la

mitad del tiempoCONTALAV=Contador precargado con el

tiempo total de lavadaLógica de los sensores=

0=Activado1= Desactivado

¿NMAX=0?NO

SI

VLL=OFFMotorL=ON

¿CONTA=CONTAMEDIO?

NO SI

RET1MIN

CONTA=CONTA+1

1

VLL=OFFMotorL=OFF

VD=ON

¿NMIN=0?NO

SI

1

VD=OFFVLL=ON

¿NMAX=0?NO

SI

VLL=OFFMotorL=ON

CONTALAV=CONTALAV-3

¿CONTA=CONTALAV?

NO

SI

RET1MIN

CONTA=CONTA+1

2

VLL=OFFMotorL=OFF

VD=ON

¿NMIN=0?NO

SI

A

Page 27: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 27 Microcontroladores I

SI

VD=OFFVLL=ON

¿NMAX=0?NO

SI

VLL=OFFMotorL=ON

RET1MIN

2

RET1MIN

RET1MIN

VLL=OFFMotorL=OFF

VD=ON

¿NMIN=0?NO

SI

RET10SEG

A

Vamos al Iniciodel programa

para una nuevalavada

RSI

Salvar entorno

¿Llegó aNMINLAV?

ALARMA=ONMotorL= OFF

VLL= OFFVD=OFF

SI

NO

DeshabilitarInterrupciones

¿INTF=1?

SI

NOSALIR

Restaurar entorno

SALIR

HabilitarInterrupciones

INTF=0

retfie

ALARMA=OFF

Page 28: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 28 Microcontroladores I

Paso 3. Lenguaje Ensamblador:

LIST P=16F84A

INCLUDE P16F84A.INC

;Declaraciones de registros:

RET4 EQU 2DH ;Registros para generarRET5 EQU 2EH ;Rutinas de retardoRET6 EQU 2FHW_TEMP EQU 30H ;Registros para salvar elSTATUS_TEMP EQU 31H ;Entorno durante la interrupciónPA_TEMP EQU 32HPB_TEMP EQU 33HPC_TEMP EQU 34HCONTA EQU 35H ;Registro contador de comparaciónCONTAMED EQU 20H ;Registro que se cargará con el tiempo

;medio de la duración del lavadoCONTALAV EQU 21H ;Registro que posee el tiempo total de

;lavadoCONTASEG EQU 22H ;Registro contador de segundos

ORG 00HGOTO INICIOORG 04HGOTO RUTIN

;***********************************;***Rutina de Servicio de Interrupción***;***********************************RUTIN BCF INTCON,7 ;Deshabilitamos las interrupciones

BTFSS INTCON,5GOTO SALIRMOVWF W_TEMP ;Salvamos el entorno durante laSWAPF W_TEMP,1 ;Interrupción al modificarse el Puerto BMOVF STATUS,0 ;dentro de la RSIMOVWF STATUS_TEMPMOVF PORTA,0MOVWF PA_TEMPMOVF PORTB,0MOVWF PB_TEMP

ESPERA BSF PORTB,7 ;SSONORA=ONBCF PORTB,1 ;ML=OFFBCF PORTB,2 ;VD=OFFBCF PORTB,3 ;VLL=OFFBTFSC PORTA,4 ;NMINLAV?GOTO ESPERABCF PORTB,7 ;SSONORA=OFF

POP MOVF PB_TEMP,0MOVWF PORTB

Page 29: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 29 Microcontroladores I

MOVF PA_TEMP,0MOVWF PORTAMOVF STATUS_TEMP,0MOVWF STATUSSWAPF W_TEMP,1MOVF W_TEMP,0BCF INTCON,1 ;INTF=0

SALIR BSF INTCON,7 ;GIE=1RETFIE

;*****************************;***Programa Principal***;*****************************

INICIO BSF STATUS,5 ;Configuramos los Puertos A y BMOVLW 1FHMOVWF TRISAMOVLW B'00000001' ;RB0 como entradaMOVWF TRISBBCF OPTION_REG,6 ;Configuramos el flanco de RB0/INT

MOVLW B'10010000' ;Activamos GIE y INTEMOVWF INTCONBCF STATUS,5

NUEVOLAV CLRF CONTASEG ;Inicializamos los registrosCLRF CONTA ;Y el Puerto BCLRF PORTB

MODO BTFSS PORTA,0 ;¿Qué MODO es?GOTO MODOLENTO ;Ir al modo lentoBSF PORTB,5 ;Modo RÁPIDO= ONBCF PORTB,6 ;LENTO OFFMOVLW D'12' ;Precargamos los valoresMOVWF CONTAMED ;Para el lavado rápidoMOVLW D'25'MOVWF CONTALAVGOTO MARCHA ;Va a preguntar si se pulsó INICIO

MODOLENTO BCF PORTB,5 ;Activamos el MODO lentoBSF PORTB,6MOVLW D'22' ;Y precargamos los valoresMOVWF CONTAMED ;de este modoMOVLW D'45'MOVWF CONTALAVGOTO MARCHA

MARCHA BTFSC PORTA,1 ;¿INICIO?GOTO MODO ;No, vamos a explorar el MODO

ESPLL1 BSF PORTB,4 ;LEDINI=ONBSF PORTB,3 ;VLL ONBTFSC PORTA,3 ;NMAX?

Page 30: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 30 Microcontroladores I

GOTO ESPLL1BCF PORTB,3 ;VLL OFFBSF PORTB,1 ;ML ON

SUBEMIN1CALL RET1s ;PARA SIMULACION, ES UN MINUTOINCF CONTA,1MOVF CONTAMED,0SUBWF CONTA,0 ;CONTA=CONTAMED?BTFSS STATUS,2 ;Z=1?GOTO SUBEMIN1

ESPVAC BCF PORTB,3 ;VLL OFFBCF PORTB,1 ;ML OFFBSF PORTB,2 ;VD ONBTFSC PORTA,2 ;NMIN?GOTO ESPVAC

ESPLL2 BCF PORTB,2 ;VD OFFBSF PORTB,3 ;VLL ONBTFSC PORTA,3 ;NMAX=0?GOTO ESPLL2BCF PORTB,3 ;VLL OFFBSF PORTB,1 ;ML ONDECF CONTALAV,1DECF CONTALAV,1DECF CONTALAV,1 ;A FALTA DE 3 MINUTOS

SUBEMIN2 CALL RET1s ;PARA SIMULACION, ES UNMINUTO

INCF CONTA,1MOVF CONTALAV,0SUBWF CONTA,0 ;CONTA=CONTALAV?BTFSS STATUS,2 ;Z=1?GOTO SUBEMIN2

ESPVAC2 BCF PORTB,3 ;VLL OFFBCF PORTB,1 ;ML OFFBSF PORTB,2 ;VD ONBTFSC PORTA,2 ;NMIN?GOTO ESPVAC2

ESPLL3 BCF PORTB,2 ;VD OFFBSF PORTB,3 ;VLL ONBTFSC PORTA,3 ;NMAX?GOTO ESPLL3BCF PORTB,3 ;VLL OFFBSF PORTB,1 ;ML ONCALL RET1sCALL RET1s ;ESPERA 3 MINUTOS FINALESCALL RET1s ;(SE SIMULA CON 1 SEG)

ESPVAC3 BCF PORTB,3 ;VLL OFFBCF PORTB,1 ;ML OFF

Page 31: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 31 Microcontroladores I

BSF PORTB,2 ;VD ONBTFSC PORTA,2 ;NMIN?GOTO ESPVAC3BCF PORTB,2 ;VD OFF

PITAZO BSF PORTB,7 ;ALARMA SONORA ONCALL RET1sINCF CONTASEG,1MOVLW D'10'SUBWF CONTASEG,0BTFSS STATUS,2 ;10 SEG?GOTO PITAZOBCF PORTB,7 ;ALARMA SONORA OFFGOTO NUEVOLAV

;*********************************************************

;***Rutina de 1 segundo. Generada por PDEL***

;*********************************************************

RET1s movlw .14 ; 1 set numero de repeticion (C)movwf RET4 ; 1 |

PLoop0 movlw .72 ; 1 set numero de repeticion (B)movwf RET5 ; 1 |

PLoop1 movlw .247 ; 1 set numero de repeticion (A)movwf RET6 ; 1 |

PLoop2 clrwdt ; 1 clear watchdogdecfsz RET6, 1 ; 1 + (1) es el tiempo 0 ? (A)goto PLoop2 ; 2 no, loopdecfsz RET5, 1 ; 1 + (1) es el tiempo 0 ? (B)goto PLoop1 ; 2 no, loopdecfsz RET4, 1 ; 1 + (1) es el tiempo 0 ? (C)goto PLoop0 ; 2 no, loop

PDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay

return ; 2+2 Fin.

END

Page 32: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 32 Microcontroladores I

6. PROGRAMA PARA GENERAR UN CONTADOR DE 00-99 mediante interrupción delTMR0

Paso 1. Enunciado: El TMR0 se desbordará cada 50 ms, luego de 20 desbordes(50ms*20=1000 ms) se incrementará en uno. Existe un contador que llevará la cantidadde estados que se muestra en los displays de 7 segmentos conectados directamente alPUERTO B. Como se van a mostrar todos los estados, es decir del 00 al 99, se utilizan dosregistros (UNIDAD y DECENA) sin tener que utilizar la rutina de binario a bcd. Porsimplicidad se colocó en el diagrama de flujo un solo registro contador que va aincrementarse, pero que en realidad incrementa un contador clásico de 00 a 99. Esteprograma muestra el uso de un registro auxiliar para obtener retardos mayores a losque se pueden obtener directamente con el TMR0. Adicional a esto realiza un contadorcon el uso de la interrupción del TMR0, permitiendo utilizar el programa principal paratareas de automatización.

Paso 2. Diagrama de Flujo

INICIO

ConfigurarOPTION_REG E INTCON

InicializamosPORTA Y B, CONTADORES

ConfigurarPuerto A y B

¿van 20desbordes?

SI

NO

RETFIE

Borramos elSeñalizador TOIF

¿CONTADOR=100?

SI

NO

Decf CONTAVECES

Programa Principal

Rutina de Interrupción

Cargamos valor calculadoen el TIMER0

CONTAVECES=20

incf CONTADOR

CONTADOR=0

Cargamos valorcalculado en el TIMER0

REGISTRO AUXILIARHABILITAMOS TOIE=1

RSI TMR0 (50ms)

¿ARRANCAR?

MOSTRAR

NO

SI

¿CONTADOR=100?

NO

SI

MOSTRAR

Page 33: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 33 Microcontroladores I

Paso3. Lenguaje Ensamblador:

LIST P=16F84A ;TIPO DE PROCESADORINCLUDE P16F84A.INC ;DEFINICIONES DE REGISTROS INTERNOS

;*******************************;****ZONA DE DECLARACIONES******;*******************************UNIDAD EQU 20H ;UNIDADDECENA EQU 21H ;DECENACONTAVECES EQU 22H ;REGISTRO AUXILIAR, CONTADOR DE 20 DESBORDESCONTADOR EQU 23H ;CONTADOR GLOBAL DE 100 ESTADOSPDEL00 EQU 24H ;REGISTRO DE TIEMPO DEL PICDELPDEL11 EQU 25H ;REGISTRO DE TIEMPO DEL PICDEL

ORG 00H ;VECTOR DE RESETGOTO INICIOORG 04H ;VECTOR DE INTERRUPCIÓNGOTO RUTIN ;VA A RUTINA DE INTERRUPCIÓN

;*****************************;****SUBRUTINA DE INTERRUPCIÓN****;*****************************RUTIN BCF INTCON,T0IF ;REPONE FLAG DEL TMR0

DECFSZ CONTAVECES,F ;DECREMENTA EL CONTADORGOTO COMUNMOVLW .20 ;SI HAN OCURRIDO 20 DESBORDES (1000 MS) SE INCREMENTA

;EL CONTADOR EN EL DISPLAYMOVWF CONTAVECES ;REPONE EL CONTADOR DE DESBORDE DEL TMR0

SUBE MOVF UNIDAD,0SUBLW .9BTFSS STATUS,Z ;ES 9?GOTO SUBEUNI ;NO. VA A INCREMENTAR UNIDADCLRF UNIDAD ;SI. VA A SUBIR DECENAINCF CONTADOR,1MOVF DECENA,0SUBLW .9BTFSS STATUS,Z ;ES 9?GOTO SUBEDEC ;NO. VA A INCREMENTAR DECENACLRF DECENA ;SI. REINICIA EL CONTADOR

SUBEUNI INCF CONTADOR,1INCF UNIDAD,1GOTO COMUN

SUBEDEC INCF DECENA,1GOTO COMUN

COMUN MOVLW .61MOVWF TMR0 ;REPONE EL TMR0 CON 61 PARA NUEVO DESBORDERETFIE ;RETORNO DE INTERRUPCIÓN

Page 34: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 34 Microcontroladores I

;********************************;****ZONA DE CONFIGURACIONES****;********************************INICIO CLRF PORTB ; BORRA LOS SEGMENTOS DE SALIDA

BSF STATUS,5 ; SELECCIONA BANCO 1MOVLW B'00000100' ;RA0 Y RA1 SALIDAS Y RA2 ENTRADAMOVWF TRISA ; PORTA SE CONFIGURACLRF TRISB ; PORTB SE CONFIGURA COMO SALIDAMOVLW B'00000111'MOVWF OPTION_REG ; PREESCALER DE 256 PARA EL TMR0,BCF STATUS,5 ;SELECCIONA BANCO 0

REINICIO MOVLW B'10000000'MOVWF INTCON ;ACTIVA LA INTERRUPCIÓN GLOBAL GIE=1.CLRF UNIDAD ;PUESTA A 0 DE UNIDAD Y DECENA QUE SE MOSTRARÁNCLRF DECENA ;EN EL DISPLAYCLRF CONTADOR ;CONTADOR GENERAL DE 100 ESTADOS

;*************************;***PROGRAMA PRINCIPAL***;*************************;***CERROJO PARA ARRANCAR CUENTA***ARRANCA CALL MOSTRAR

BTFSC PORTA,2 ;SE PRESIONÓ ARRANCA?GOTO ARRANCA ;NO.SE QUEDA MOSTRANDO EL NÚMERO EN EL DISPLAY

;***CARGA REGISTRO AUXILIAR, TIEMPO DE DESBORDE DEL TMR0;***Y HABILITA LA INTERRUPCION POR DESBORDE DEL TMR0CARGA MOVLW .20 ;SI. CARGA EL REGISTRO AUXILIAR CON

MOVWF CONTAVECES ;EL Nº DE VECES DE DESBORDE DEL TMR0MOVLW .61 ;CARGA EL VALOR DEL PRIMER DESBORDEMOVWF TMR0 ;CARGA EL TMR0 CON 61BSF INTCON,5 ;Y ACTIVA INTERRUPCIÓN DE TMR0. TOIE=1

;***SE QUEDA MOSTRANDO UNIDAD Y DECENA EN DISPLAY;HASTA QUE SE CUENTEN 100 ESTADOS (FUNCIÓN DEL REGISTRO CONTADOR)CICLO2 CALL MOSTRAR

MOVF CONTADOR,0SUBLW .101BTFSS STATUS,2 ;UNIDAD=0?GOTO CICLO2 ;NO.CONTADOR LLEGÓ A 100 ESTADOS? ESPERAGOTO REINICIO ;SI. DECENA=0 Y UNIDAD=0

;VA A REINICIAR EL CONTADOR PARA NUEVO CICLO DE CUENTA;******************************;***RUTINA MOSTRAR EN DISPLAYS;******************************MOSTRAR BSF PORTA,0 ;DISPLAY UNI ON

BCF PORTA,1 ;DISPLAY DEC OFFMOVF UNIDAD,WCALL TABLA ; CONVIERTE BCD A 7 SEGMENTOSMOVWF PORTB ; VISUALIZA EL VALOR DE LA UNIDADCALL DELAY5MS

Page 35: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 35 Microcontroladores I

BCF PORTA,0 ;DISPLAY UNI OFFBSF PORTA,1 ;DISPLAY DEC ONMOVF DECENA,WCALL TABLA ; CONVIERTE BCD A 7 SEGMENTOSMOVWF PORTB ; VISUALIZA EL VALOR DE LA UNIDADCALL DELAY5MSRETURN

;************************************************;****TABLA DE CONVERSIÓN DE BCD A 7 SEGMENTOS****;************************************************;TABLA: ESTA RUTINA CONVIERTE EL CÓDIGO BCD PRESENTE EN LOS 4 BITS DE MENOS PESO;DEL REG. W EN SU EQUIVALENTE A 7 SEGMENTOS. EL CÓDIGO 7 SEGMENTOS RETORNA TAMBIÉN;EN EL REG. WTABLA ADDWFPCL,1 ;PUNTERO O ENCABEZADO DE LA TABLA

RETLW B'11000000' ;0. VALOR 0RETLW B'11111001' ;1. VALOR 1RETLW B'10100100' ;2. VALOR 2RETLW B'10110000' ;3. VALOR 3RETLW B'10011001' ;4. VALOR 4RETLW B'10010010' ;5. VALOR 5RETLW B'10000011' ;6. VALOR 6RETLW B'11111000' ;7. VALOR 7RETLW B'10000000' ;8. VALOR 8RETLW B'10011000' ;9. VALOR 9

;***************************RUTINA DE 5mS******************************;**********************GENERADA POR EL PICDEL**************************;***************************RUTINA DE 5mS******************************DELAY5MS movlw .6 ; 1 set numero de repeticion (B)

movwf PDel00 ; 1 |PLoop11 movlw .207 ; 1 set numero de repeticion (A)

movwf PDel11 ; 1 |PLoop22 clrwdt ; 1 clear watchdog

decfsz PDel11, 1 ; 1 + (1) es el tiempo 0 ? (A)goto PLoop22 ; 2 no, loopdecfsz PDel00, 1 ; 1 + (1) es el tiempo 0 ? (B)goto PLoop11 ; 2 no, loop

PDelL11 goto PDelL22 ; 2 ciclos delayPDelL22 clrwdt ; 1 ciclo delay

return ; 2+2 Fin.END ;FIN DEL PROGRAMA

Page 36: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 36 Microcontroladores I

7. Generar la siguiente señal. (Use Timer 0 e interrupción) (Este tipo deseñal es utilizada como señal patrón para algunas pruebas que realizanlos estudiantes de Ingeniería en Electrónica) (no aplica para losestudiantes de Ingeniería en Instrumentación y Control)

Paso 1. Enunciado y delimitación del problema:

Como no se ha especificado por cual pin del microcontrolador saldrá laseñal, asumiremos RB0.

Cuando se trabaja con el Timer 0, se deben incluir los cálculos que sehayan realizado para generar el retardo deseado.

En la gráfica, podemos extraer el período de la señal cuadrada cuyo valores de 100 ms, y asumiendo un ciclo de trabajo del 50 %, tendremos que la señal

100 ms

2 segundos

Page 37: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 37 Microcontroladores I

en alto es igual a la señal en bajo, por lo tanto su duración o período será de 50ms.

Hagamos los cálculos para 50 ms:

De la fórmula proporcionada en la Unidad IV, despejando nos quedará:

ெ ோை = ݎ ݖ ó

4 ∗ ݏ ∗ ݎ ݒ 0ܯݎݏ

Sustituyendo los valores (Como no se nos especificó el oscilador),asumiremos el estándar de 4 MHz:

ெ ோை =50 ݏ

4 ∗ ቀ1

ݖܪܯ4ቁ∗ 256

= 195,31 ≅ 195

ெ ோை = 256 − ݎ ܯ 0 → ݎ ܯ 0 = 256 − ெ ோை = 256 − 195= 61

Por lo que el valor a cargar en el TMR0= 61

¿Por qué el predivisor de 256?

Sencillo, repasando la teoría, recordaremos que el valor del Timer 0 acargar no podrá exceder bajo ningún concepto 256. Si colocamos otro predivisordel rango disponible, el resultado será mayor a 256.

¿Cómo encaro el problema?

En esta señal solicitada, si nos damos cuenta, la señal cuadrada se genera10 veces, dando un tiempo de 1 segundo, si la señal entera, antes de que serepita el ciclo nuevamente, es de 2 segundos, vale decir que durante 10 veces eltiempo de 100 ms, la señal no bascula u oscila, por lo que podemos utilizar uncontador de temporización para determinar si la señal oscilará o no.

Durante las primeras 20 temporizaciones de 50 ms, la señal de salidaoscilará, durante las siguientes 20 temporizaciones de 50 ms, la señal de salida nooscilará, utilizando el contador resolveremos este problema.

¿Y dónde utilizo el contador?

El desarrollo de la señal se fundamenta en una interrupción por desbordedel Timer0 para los 50 ms calculados, por lo tanto el contador se utilizará dentrode la rutina de servicio de la interrupción. Veamos el Diagrama de flujo paraentenderlo mejor:

Paso 2. Diagrama de Flujo:

Page 38: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 38 Microcontroladores I

Paso 3. Lenguaje ensamblador:

list P=16F84Ainclude P16F84A.inc

CONTADOR equ 20H ;Declaramos el registro

org 00Hgoto INICIOorg 04Hgoto RSI

;********************************;***RUTINA DE INTERRUPCIÓN***;********************************RSI bcf INTCON,7 ;Deshabilitamos las interrupciones

btfss INTCON,2 ;La causa de la interrupción es;desborde del TIMER0 TOIF=1?

goto SALIR ;No, Salimosbcf INTCON,2 ;Si, borramos el señalizador TOIF

INICIO

ConfigurarINTCON y OPTION_REG

InicializamosCONTADOR y PORTB

ConfigurarPuerto A y B

DeclararCONTADOR

Cargamos valor calculadoen el TIMER0

Para evitar un reinicio del programaLimpiamos el Perro Guardián

RSI

¿Contador>20?

Borramos elSeñalizador TOIF

SI

NO

DeshabilitarInterrupciones

¿TOIF=1?

SI

NOSALIR

Bascular RB0

SALIR

HabilitarInterrupciones

retfie

CONTADOR=CONTADOR+1

¿Contador>40?

CONTADOR=0

SUBE

SI

NO

SUBE

Page 39: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 39 Microcontroladores I

movlw .20subwf CONTADOR,0 ;Contador-20.btfsc STATUS,0 ;C=0? ó Contador < 20?goto NOBASCULA ;No.

BASCULA movlw .01 ;Si.xorwf PORTB,1 ;Basculamos (Toggle) RB0goto SUBECONT

NOBASCULA movlw .40subwf CONTADOR,0 ;Contador-40. Contador>40?btfsc STATUS,0 ;C=0?goto LIMPIAR

SUBECONT incf CONTADOR,1 ;Contador=Contador+1movlw .61 ;Cargamos el valor del TMR0movwf TMR0 ;Para una nueva temporizaciónbsf INTCON,7 ;Habilitamos las interrupcionesretfie ;Salimos de la RSI

LIMPIAR clrf CONTADOR ;Limpiamos el contadorSALIR bsf INTCON,7 ;Habilitamos las interrupciones

retfie ;Salimos de la RSI

;***************************;***PROGRAMA PRINCIPAL***;***************************INICIO bsf STATUS,5 ;Zona de configuraciones

clrf TRISBmovlw B'00010111' ;Predivisor=256movwf OPTION_REGmovlw B'10100000' ;Habilitamos las interrupcionesmovwf INTCON ;Con GIE=1 y TOIE=1bcf STATUS,5clrf PORTBclrf CONTADORbcf PORTB,0movlw .61 ;Cargamos el valor del TMROmovwf TMR0 ;Previamente calculado

SINFIN clrwdtgoto SINFINend

Page 40: Guía de ejercicios resueltos y propuestos tema 4

Prof. Luis Zurita 40 Microcontroladores I

Señal en el osciloscopio del Proteus

R1

330R

X1CRYSTAL

D1LED-GREEN

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

VDD

VSS

VSS

A

B

C

D