• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Guía de ejercicios resueltos y propuestos tema 4
 

Guía de ejercicios resueltos y propuestos tema 4

on

  • 1,887 views

 

Statistics

Views

Total Views
1,887
Views on SlideShare
1,634
Embed Views
253

Actions

Likes
2
Downloads
166
Comments
0

6 Embeds 253

http://uptoscrmicro1.blogspot.com 154
http://www.uptoscrmicro1.blogspot.com 68
http://uptoscrmicro1.blogspot.mx 13
http://uptoscrmicro1.blogspot.com.es 9
http://uptoscrmicro1.blogspot.com.ar 6
http://uptoscrmicro1.blogspot.ca 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • GUÍA DE EJERCICIOS RESUELTOS Y PROPUESTOS TEMA 4: TIMER 0 E INTERRUPCIONESProf. Luis Zurita 1 Microcontroladores I
    • 1. 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 analizar y determinar la causa de una interrupción, y ejecutar las tareas alizar 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:Prof. Luis Zurita 2 Microcontroladores I
    • Paso 2. Lenguaje ensamblador. LIST P=16F84A INCLUDE P16F84A.INCW_TEMP equ 20H ; Se declaran los registros generales paESTADO_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ónRUTINTERR 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ónSALIRINT 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 elseñalizador de esta goto SALIRINT ; InterrupciónProf. Luis Zurita 3 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 d100 ; 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 b01000110 movwf OPTION_REG ; Diga: ¿Cómo se configuró OPTION? bcf STATUS,5 movlw b10111000 ; Se habilita GIE y las interrupciones movwf INTCON ; IndividualesDORMIR nop movlw d100 movwf TMR0SINFIN 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.Prof. Luis Zurita 4 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 del TMR0, sea o no por interrupción. Se muestran los dos casos, sin embargo se recomienda el manejo por interrupción por ser de mayor efectividad y de 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. 1 1 1 Para una frecuencia de 200 Hz, tendremos un período de: ‫=ܨ‬ ‫= = ܶ݁ݑݍ ݈ݎ݋݌‬ ‫݋‬ = 5݉‫ݏ‬ ܶ ‫ݖܪ 002 ܨ‬ 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, 2,5 ݉ ‫ݏ‬asumiremos el estándar de 4 MHz: ்ܸெ ோை = = 39,0625 ≅ 39 1 4∗ቀ ቁ∗ 64 4‫ݖܪ ܯ‬ ்ܸெ ோை = 256 − ܸ݈ܽ ‫݈ܸܽ → 0ܴ ܯ݈ܴܶܽ݁ݎ݋‬ ‫்ܸ − 652 = 0ܴ ܯ݈ܴܶܽ݁ݎ݋‬ெ ோை = 256 − 39 = 217 Por lo que el valor a cargar en el TMR0= 217Prof. Luis Zurita 5 Microcontroladores I
    • Paso 2. Diagrama de Flujo:Prof. Luis Zurita 6 Microcontroladores I
    • Paso 3. Lenguaje ensamblador:FORMA A. POR EXPLORACIÓN (POLLING) DEL BIT TOIF: list P=16F84A include P16F84A.inc org 00H goto INICIO;************************************;***PROGRAMA PRINCIPAL***;************************************INICIO bsf STATUS,5 ;Zona de configuraciones clrf TRISB movlw B00010101 ; Reloj interno (Temporizador) Predivisor movwf OPTION_REG ; asignado a TMR0, valor= 128 bcf STATUS,5 clrf PORTB ;Inicializamos el Puerto B nopProf. Luis Zurita 7 Microcontroladores I
    • CICLO bsf PORTB,0 ;Señal a nivel alto call DELAY2_5MS ;Llamamos subrutina 2,5 ms bcf PORTB,0 ;Señal a nivel bajo call DELAY2_5MS ;Llamamos subrutina 2,5 ms goto CICLO ;Repetimos cicloDELAY2_5MS movlw .217 ;Cargamos TMR0 con valor movwf TMR0 ;calculado previamente bcf INTCON,2 ;Borramos el señalizadorESPERA btfss INTCON,2 ;Se desbordó el TMR0? goto ESPERA ;No. Seguimos esperamos return ;Si, han transcurrido 2,5 ms endFORMA B. POR INTERRUPCIÓN list P=16F84A include P16F84A.inc org 00H ;Vector de inicio goto INICIO ;del programa principal org 04H ;Vector de inicio de goto 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, Salimos bcf INTCON,2 ;Si, borramos el señalizador TOIF movlw .01 xorwf PORTB,1 movlw .217 ;Cargamos el valor del TMR0 movwf TMR0 ;Para una nueva temporizaciónSALIR bsf INTCON,7 ;Habilitamos las interrupciones retfie;*************************************;***PROGRAMA PRINCIPAL***;*************************************INICIO bsf STATUS,5 clrf TRISB movlw B00010101 ; Reloj interno (Temporizador) Predivisor movwf OPTION_REG ; asignado a TMR0, valor= 128 movlw B10100000 ; Habilitamos las interrupcionesProf. Luis Zurita 8 Microcontroladores I
    • movwf INTCON ;Con GIE=1 y TOIE=1 bcf STATUS,5 clrf PORTB ;Inicializamos el Puerto B movlw .217 ;Cargamos el TMR0 con el movwf TMR0 ;valor previamente calculadoSINFIN clrwdt ;Usamos esta instrucción para goto 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. endNota: 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á 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”.  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 de operaciónProf. Luis Zurita 9 Microcontroladores I
    • MODO Manual Auto OPERACIÓN PARADA 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é pin SALIDA ¿Qué pin Asignamos? Asignamos? Interruptor “INICIO” RA0 Bomba B1 RB3 Sensor Máximo RA1 Bomba B2 RB1 Sensor Mínimo RA2 Indicador RB2 Manual Sensor Parada RB0 Indicador Auto RB3 Sensor Operación RA3 ¿Y si quiero asignar otros pines? Perfecto, queda a libre elección.Prof. Luis Zurita 10 Microcontroladores I
    • VDD MANUAL R1 RB4 1k AUTO RB2 RA0 VSS MODO VSS SENSOR NIVEL ALTO VDD NIVEL MÁXIMO R2 1k RA1 TANQUE VSS RB3 RB1 VDD PRINCIPAL M1 B1 B2 M2 SENSOR NIVEL BAJO VDD VDD R1B 1k OPERACIÓN R1A R3 PARADA 1k 1k VSS VSS RA3 RA2 VSS RB0 TANQUE SUBTERRÁNEO VSSVSS C1 22p U1 X1 16 OSC1/CLKIN RA0 17 RA0 15 18 C2 OSC2/CLKOUT RA1 RA1 1 RA2 RA2 4 2 MCLR RA3 RA3 3 VSS VDD RA4/T0CKI 22p 6 RB0/INT RB0 7 RB1 RB1 8 RB2 RB2 9 RB3 RB3 10 RB4 RB4 11 RB5 12 RB6 13 RB7 PIC16F84AProf. Luis Zurita 11 Microcontroladores I
    • Paso 2. Diagrama de Flujo: INICIO RSI Configurar Deshabilitar INTCON Interrupciones Salvar entorno Configurar Puerto A y B NO Bomba 1= OFF ¿INTF=1? SALIR Bomba 2=OFF SI M Bomba 1= OFF SI Bomba 1= ON Bomba 2= OFF ¿Manual? Bomba 2= ON Auto NO NO ¿Llegó a Noperación? ¿Nivel NO ¿Nivel NO M SI Mínimo? Máximo? SALIR SI SI Restaurar entorno Bomba 1= OFF Bomba 1= ON INTF=0 Bomba 2= ON Bomba 2= OFF Habilitar Interrupciones ¿Nivel NO Máximo? retfie SI Bomba 1= OFF Bomba 2= OFF MProf. Luis Zurita 12 Microcontroladores I
    • Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: list P=16F84A include P16F84A.INCWTEMP equ 20H ;Declaramos registros paraPBTEMP equ 21H ;Utilizarse para salvar y restaurarSTATEMP equ 22H ;El entorno org 00H ;Vector de Inicio goto INICIO org 04H ;Vector de Interrupción goto RSI;*************************************;***Rutina de servicio de Interrupción***;*************************************RSI bcf INTCON,7 ;Interrupciones deshabilitadasPUSH movwf WTEMP ;Salvamos el entorno movf STATUS,0 movwf STATEMP movf PORTB,0 movwf PBTEMP btfss INTCON,1 ;INTF=1? Fue por RB0/INT? goto PULL ;No. Salimos de la RSISI bcf PORTB,2 bcf PORTB,3 ;Bomba 1= OFF bcf PORTB,1 ;Bomba 2= OFFOPER 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 PORTB movf STATEMP,0 movwf STATUS movf WTEMP,0 bcf INTCON,1 ;Borramos el señalizador bsf INTCON,7 ;Interrupciones habilitadas retfie ;Salimos de las interrupciones;***********************;***Programa Principal***;***********************INICIO bsf STATUS,5 ;Vamos al banco 1 a configurar movlw 1FH movwf TRISA movlw B00000001 ;RB0= Entrada, Resto SalidasProf. Luis Zurita 13 Microcontroladores I
    • movwf TRISB movlw B10010000 ;Habilitamos las interrupciones movwf INTCON ;Con GIE=1 y INTE=1 movlw B01000000 ;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=OFFMODO btfsc PORTA,0 ;MODO AUTO? goto AUTOMANUAL 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 MODOAUTO 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=OFFCERR btfss PORTA,1 ;(NHA)MÁXIMO? goto CERR ;No Hay AguaMODO2 bcf PORTB,2 ; Modo Auto=OFF bcf PORTB,3 ;Bomba 1=ON bcf PORTB,1 ;Bomba 2=OFF goto MODODOS btfsc PORTA,1 ;(NHA)MÁXIMO? goto MODO ;HAMODO1 bcf PORTB,2 ; Modo Auto=OFF bcf PORTB,3 ;Bomba 1=OFF bsf PORTB,1 ;Bomba 2=ON goto CERR endProf. Luis Zurita 14 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 sistema esta en marcha.  Transcurrido este tiempo, se enciende B2. B1, MM, VD, MA, deben estar apagados.  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 mantienen apagados.  MM se mantiene encendido por espacio de 2 minutos. B1, B2, VD, MA se mantienen apagados. Una vez transcurrido este tiempo, se detiene MM.  Se activa VD, hasta que se activa el sensor “Nivel bajo”, mediante el cual se cierra VD y se activa MA por espacio de 7,5 minutos, reiniciándose el proceso nuevamente.  El sistema cuenta con un pulsador de “PARE”, que al activarse en cualquier momento detiene todo el proceso, apagando B1, B2, VD, MM y MA, activando un led rojo y apagando al led verde, indicando que existe una parada del proceso.  Para reiniciar el proceso nuevamente en donde se quedó al momento de detenerlo, 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 porinterrupción sino por polling, puede ser sustituida por una rutina de 1segundo generada por el PICDEL)Prof. Luis Zurita 15 Microcontroladores I
    • PINTURA 1 PINTURA 2 B B MEZCLADORA DE PINTURAS Nivel Alto TANQUE MEZCLADOR Nivel Bajo MM VD PINTURA PINTURA LISTA LISTA MAProf. Luis Zurita 16 Microcontroladores I
    • Nomenclaturas:B1: Bomba 1B2: Bomba 2MM: Motor de MezcladoVD: Válvula de DesagüeMA: Motor de AvancePaso 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é pin SALIDA ¿Qué pin Asignamos? Asignamos? Pulsador “MARCHA” RA0 Led Marcha RB1 Pulsador “REINICIO” RA1 Led PARE RB2 Sensor Nivel Alto RA2 Válvula RB3 Pintura 1 Sensor Nivel Bajo RA3 Válvula RB4 Pintura 2 Sensor “PARE” RB0 Motor RB5 Mezclado Válvula RB6 Desagüe Motor RB7 AvanceProf. Luis Zurita 17 Microcontroladores I
    • El circuito quedaría de la siguiente manera: RB3 RB4 VDD PINTURA 1 PINTURA 2 VDD VDD CAJA DE CONTROL VSS VSS MARCHA NIVEL ALTO RA0 VDD RB1 TANQUE RA2 PARE RB0 RB2 MEZCLADOR VDD REINICIO RB5 RA1 NIVEL BAJO VSS RB6 RA3 MOTOR MZ VÁLVULA DESAGUE VSS VSS PINTURA PINTURA RB7 LISTA LISTA MOTOR AVANCE RB7Prof. Luis Zurita 18 Microcontroladores I
    • Paso 2. Diagramas de Flujo: INICIO 1 RSI Declarar Registros de Deshabilitar trabajo VD=ON Interrupciones Configurar Salvar entorno NO INTCON y OPTION_REG ¿NBAJO =0? Configurar SI NO Puerto A y B ¿INTF=1? SALIR A VD=OFF SI Limpiar Registros en general MA=ON B1=OFF y Puerto B B2=OFF MM=OFF RET7_5S VD=OFF MA=OFF NO LMARCHA=OFF ¿MARCHA MA=OFF LPARE=ON =0? SI 1 B1=ON ¿REINICIO NO B2=OFF =0? MM=OFF VD=OFF LEYENDA: SI MA=OFF VD=Válvula de Desagüe LMARCHA=ON B1= Válvula de Llenado Pintura 1 LPARE=OFF LPARE=OFF B2= Válvula de Llenado Pintura 2 LMARCHA= Led Marcha LPARE= Led Pare Restaurar entorno NALTO= Sensor Nivel Alto RET13SEG NBAJO=Sensor Nivel Bajo INTF=0 MM= Motor Mezclado MA= Motor de Avance SALIR B1=OFF MARCHA= Pulsador de inicio B2=ON Habilitar PARE= Pulsador de parada LMARCHA=ON Interrupciones REINICIO= Pulsador de reinicio del proceso LPARE=OFF Lógica de los sensores= 0=Activado retfie 1= Desactivado NO ¿NALTO =0? SI B2=OFF MM=ON RET1M MM=OFF 1Prof. Luis Zurita 19 Microcontroladores I
    • Paso 3. Lenguaje Ensamblador: list P=16F84A include p16F84A.incW_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 00H goto INICIO org 04H goto RSI;***********************************;***Rutina de Servicio de Interrupción***;***********************************RSI btfss INTCON,1 ;INTF=1? goto SALIR ;No. Salimos de la Interrupción movwf W_TEMP ;Salvamos el entorno swapf W_TEMP,1 movf STATUS,0 movwf ESTADO_TEMP movf PORTB,0 movwf PB_TEMP movlw b00000100 ;Si. Todo OFF. LPARE= ON movwf PORTB ;(ROJO=ON)REINI btfsc PORTA,1 ;Se pulsó REINICIO? goto REINI ;Esperamos bcf INTCON,1 ;Borramos señalizador INTF movf PB_TEMP,0 ;Restauramos el entorno movwf PORTB movf ESTADO_TEMP,0 movwf STATUS swapf W_TEMP,0SALIR bsf INTCON,7 ;Habilitamos las interrupciones retfie ;Salimos de la RSI;**********************;***Programa Principal ***;**********************INICIO bsf STATUS,5 ;Configuramos los Puertos movlw 01FH movwf TRISA ;PA como entrada movlw b00000001 movwf TRISB ;PB como entrada/salida movlw b01000111 ;Prescaler= 256Prof. Luis Zurita 20 Microcontroladores I
    • movwf OPTION_REG ;Y configuramos el flanco de RBO/INT movlw b10010000 ;GIE= 1 y INTE=1 movwf INTCON bcf STATUS,5 clrf PORTB ;Limpiamos el Puerto BEMPIEZA btfsc PORTA,0 ;Se pulsó “INICIO” goto EMPIEZA ;No. EsperamosREPITE bsf PORTB,3 ;B1= ON bsf PORTB,1 ;Led Marcha=ON (Verde= ON) bcf PORTB,2 ;Led PARE=OFF bcf PORTB,4 ;B1=OFF bcf PORTB,5 ;MM=OFF bcf PORTB,6 ;VD=OFF bcf PORTB,7 ;MA=OFF call RET13 ;Llamamos a Subrutina de 13 seg. bcf PORTB,3 ;B1= OFF bsf PORTB,4 ;B2= ONNAOK btfsc PORTA,2 ;Nivel Alto= 0? goto NAOK ;No. Esperamos bcf PORTB,4 ;B2= OFF bsf PORTB,5 ;MM= ON call RET1M ;Llamamos subrutina de 1 minuto. bcf PORTB,5 ;MM= OFF bsf PORTB,6 ;VD= ONNBOK btfsc PORTA,3 ;Nivel Bajo= 0? goto NBOK ;No. Esperamos bcf PORTB,6 ;VD= OFF bsf PORTB,7 ;MA= ON call RET7_5 ;Subrutina de 7,5 seg bcf PORTB,7 goto REPITE;**********************************;***Rutina de 7,5 segundos***;**********************************RET7_5 bcf INTCON,2 movlw d114 movwf REGAUX1RECAR75 bcf INTCON,2 clrf TMR0ESPERA1 btfss INTCON,2 goto ESPERA1 decfsz REGAUX1,1 goto RECAR75 returnProf. Luis Zurita 21 Microcontroladores I
    • ;*********************************;***Rutina de 13 segundos***;*********************************RET13 bcf INTCON,2 movlw d198 movwf REGAUX1RECAR13 bcf INTCON,2 clrf TMR0ESPERA2 btfss INTCON,2 goto ESPERA2 decfsz REGAUX1,1 goto RECAR13 return;****************************;***Rutina de 1 minuto***;****************************RET1M movlw d30 ;Original= 60, se cambió para la simulación movwf REGAUX2RECAR4 movlw d15 movwf REGAUX1RECAR5 bcf INTCON,2 clrf TMR0ESPERA4 btfss INTCON,2 goto ESPERA4 decfsz REGAUX1,1 goto RECAR5 decfsz REGAUX2,1 goto RECAR4 return end ;Fin del programaProf. Luis Zurita 22 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 vez de agua; lava ó “bate” por el resto del tiempo; se vacía nuevamente y emite una alarma sonora por espacio de 10 segundos; y se detiene a la espera de un nuevo proceso de lavado.  Si no hay agua en el depósito de agua, se detiene el lavado, se cierra la válvula de llenado y se emite una alarma sonora hasta que se solucione el problema 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 de Llenado.  Nmínimo, Nmáximo, Nmínimo de lavado, Nivel de alarma: Sensores de nivel.Nota: Utilice el TMR0 para generar la rutina de 1 segundo.Prof. Luis Zurita 23 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é pin SALIDA ¿Qué pin Asignamos? Asignamos? Interruptor “MODO” de RA0 Motor de RB1 Lavado Lavadora Pulsador “INICIO” RA1 Válvula de RB2 Desagüe Sensor Nivel Mínimo RA2 Válvula de RB3 Llenado Sensor Nivel Máximo RA3 Led RB4 “INICIO” Sensor Nivel Mínimo RA4 Led RB5 de lavado “Rápido” Sensor Nivel de Alarma RB0 Led “Lento” RB6 ALARMA RB7 Como podemos observar, de manera común, se asignan las entradas alpuerto A y las salidas al puerto B.Prof. Luis Zurita 24 Microcontroladores I
    • El circuito del hardware a simular quedaría de la siguiente manera: VDD RB7 RA4 VSS ALARMA NMÍNIMO DE LAVADO VDD DEPÓSITO VSS DE AGUA RB3 RB0 VSS VÁLVULA DE LLENADO NIVEL DE ALARMA PANEL DE CONTROL VDD VDD VSS ON NIVEL ALTO RA1 INICIO RB4 LAVADORA RA3 VDD RÁPIDO RB5 VDD LENTO LAVADORA0 RB6 RB1 NIVEL BAJO RB2 RA2 MOTOR MZ VÁLVULA DESAGUE VSS VSSProf. Luis Zurita 25 Microcontroladores I
    • Paso 2. Diagramas de Flujo: INICIO LEYENDA: 1 VD=Válvula de Desagüe VLL= Válvula de Llenado Declarar Registros de NMAX= Sensor Nivel Máximo trabajo NMIN=Sensor Nivel Mínimo VLL=OFF NMINLAV=Sensor Nivel Mínimo de Lavado MotorL=OFF MotorL= Motor Lavadora VD=ON Configurar CONTA=Contador de minutos INTCON y OPTION_REG CONTAMEDIO=Contador precargado con la mitad del tiempo Configurar CONTALAV=Contador precargado con el NO Puerto A y B tiempo total de lavada ¿NMIN=0? Lógica de los sensores= A 0=Activado SI Limpiar Registros en general 1= Desactivado y Puerto B VD=OFF VLL=ON (Lento) Led Rápido=OFF NO Led Lento=ON ¿INTLAV? ContaMed=12 NO ContaLav=25 ¿NMAX=0? (Rápido) SI SI Led Rápido=ON Led Lento=OFF VLL=OFF ContaMed=22 MotorL=ON ContaLav=45 SI NO CONTALAV=CONTALAV-3 ¿INICIO? RET1MIN VD=OFF Led Inicio=ON CONTA=CONTA+1 VLL=ON NO ¿CONTA= NO CONTALAV? ¿NMAX=0? SI SI VLL=OFF VLL=OFF MotorL=ON MotorL=OFF VD=ON RET1MIN NO ¿NMIN=0? CONTA=CONTA+1 SI NO ¿CONTA= SI 1 2 CONTAMEDIO?Prof. Luis Zurita 26 Microcontroladores I
    • 2 RSI SI Deshabilitar VD=OFF Interrupciones VLL=ON Salvar entorno NO ¿NMAX=0? NO ¿INTF=1? SALIR SI SI VLL=OFF ALARMA=ON MotorL=ON MotorL= OFF VLL= OFF VD=OFF RET1MIN ¿Llegó a NO RET1MIN NMINLAV? SI RET1MIN ALARMA=OFF SALIR VLL=OFF Restaurar entorno MotorL=OFF VD=ON INTF=0 Habilitar NO Interrupciones ¿NMIN=0? SI retfie RET10SEG Vamos al Inicio del programa para una nueva A lavadaProf. Luis Zurita 27 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 00H GOTO INICIO ORG 04H GOTO RUTIN;***********************************;***Rutina de Servicio de Interrupción***;***********************************RUTIN BCF INTCON,7 ;Deshabilitamos las interrupciones BTFSS INTCON,5 GOTO SALIR MOVWF W_TEMP ;Salvamos el entorno durante la SWAPF W_TEMP,1 ;Interrupción al modificarse el Puerto B MOVF STATUS,0 ;dentro de la RSI MOVWF STATUS_TEMP MOVF PORTA,0 MOVWF PA_TEMP MOVF PORTB,0 MOVWF PB_TEMPESPERA BSF PORTB,7 ;SSONORA=ON BCF PORTB,1 ;ML=OFF BCF PORTB,2 ;VD=OFF BCF PORTB,3 ;VLL=OFF BTFSC PORTA,4 ;NMINLAV? GOTO ESPERA BCF PORTB,7 ;SSONORA=OFFPOP MOVF PB_TEMP,0 MOVWF PORTBProf. Luis Zurita 28 Microcontroladores I
    • MOVF PA_TEMP,0 MOVWF PORTA MOVF STATUS_TEMP,0 MOVWF STATUS SWAPF W_TEMP,1 MOVF W_TEMP,0 BCF INTCON,1 ;INTF=0SALIR BSF INTCON,7 ;GIE=1 RETFIE;*****************************;***Programa Principal***;*****************************INICIO BSF STATUS,5 ;Configuramos los Puertos A y B MOVLW 1FH MOVWF TRISA MOVLW B00000001 ;RB0 como entrada MOVWF TRISB BCF OPTION_REG,6 ;Configuramos el flanco de RB0/INT MOVLW B10010000 ;Activamos GIE y INTE MOVWF INTCON BCF STATUS,5NUEVOLAV CLRF CONTASEG ;Inicializamos los registros CLRF CONTA ;Y el Puerto B CLRF PORTBMODO BTFSS PORTA,0 ;¿Qué MODO es? GOTO MODOLENTO ;Ir al modo lento BSF PORTB,5 ;Modo RÁPIDO= ON BCF PORTB,6 ;LENTO OFF MOVLW D12 ;Precargamos los valores MOVWF CONTAMED ;Para el lavado rápido MOVLW D25 MOVWF CONTALAV GOTO MARCHA ;Va a preguntar si se pulsó INICIOMODOLENTO BCF PORTB,5 ;Activamos el MODO lento BSF PORTB,6 MOVLW D22 ;Y precargamos los valores MOVWF CONTAMED ;de este modo MOVLW D45 MOVWF CONTALAV GOTO MARCHAMARCHA BTFSC PORTA,1 ;¿INICIO? GOTO MODO ;No, vamos a explorar el MODOESPLL1 BSF PORTB,4 ;LEDINI=ON BSF PORTB,3 ;VLL ON BTFSC PORTA,3 ;NMAX?Prof. Luis Zurita 29 Microcontroladores I
    • GOTO ESPLL1 BCF PORTB,3 ;VLL OFF BSF PORTB,1 ;ML ONSUBEMIN1 CALL RET1s ;PARA SIMULACION, ES UN MINUTO INCF CONTA,1 MOVF CONTAMED,0 SUBWF CONTA,0 ;CONTA=CONTAMED? BTFSS STATUS,2 ;Z=1? GOTO SUBEMIN1ESPVAC BCF PORTB,3 ;VLL OFF BCF PORTB,1 ;ML OFF BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVACESPLL2 BCF PORTB,2 ;VD OFF BSF PORTB,3 ;VLL ON BTFSC PORTA,3 ;NMAX=0? GOTO ESPLL2 BCF PORTB,3 ;VLL OFF BSF PORTB,1 ;ML ON DECF CONTALAV,1 DECF CONTALAV,1 DECF CONTALAV,1 ;A FALTA DE 3 MINUTOSSUBEMIN2 CALL RET1s ;PARA SIMULACION, ES UNMINUTO INCF CONTA,1 MOVF CONTALAV,0 SUBWF CONTA,0 ;CONTA=CONTALAV? BTFSS STATUS,2 ;Z=1? GOTO SUBEMIN2ESPVAC2 BCF PORTB,3 ;VLL OFF BCF PORTB,1 ;ML OFF BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVAC2ESPLL3 BCF PORTB,2 ;VD OFF BSF PORTB,3 ;VLL ON BTFSC PORTA,3 ;NMAX? GOTO ESPLL3 BCF PORTB,3 ;VLL OFF BSF PORTB,1 ;ML ON CALL RET1s CALL RET1s ;ESPERA 3 MINUTOS FINALES CALL RET1s ;(SE SIMULA CON 1 SEG)ESPVAC3 BCF PORTB,3 ;VLL OFF BCF PORTB,1 ;ML OFFProf. Luis Zurita 30 Microcontroladores I
    • BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVAC3 BCF PORTB,2 ;VD OFFPITAZO BSF PORTB,7 ;ALARMA SONORA ON CALL RET1s INCF CONTASEG,1 MOVLW D10 SUBWF CONTASEG,0 BTFSS STATUS,2 ;10 SEG? GOTO PITAZO BCF PORTB,7 ;ALARMA SONORA OFF GOTO 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 watchdog decfsz RET6, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2 ; 2 no, loop decfsz RET5, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1 ; 2 no, loop decfsz RET4, 1 ; 1 + (1) es el tiempo 0 ? (C) goto PLoop0 ; 2 no, loopPDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ENDProf. Luis Zurita 31 Microcontroladores I
    • 6. PROGRAMA PARA GENERAR UN CONTADOR DE 00-99 mediante interrupción del TMR0Paso 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 RSI TMR0 (50ms) Configurar Puerto A y B Borramos el Señalizador TOIF Configurar OPTION_REG E INTCON Decf CONTAVECES Inicializamos PORTA Y B, CONTADORES NO ¿van 20 desbordes? MOSTRAR SI CONTAVECES=20 NO ¿ARRANCAR? ¿CONTADOR NO incf CONTADOR SI =100? SI Cargamos valor calculado en el TIMER0 REGISTRO AUXILIAR CONTADOR=0 HABILITAMOS TOIE=1 Cargamos valor calculado MOSTRAR en el TIMER0 NO RETFIE ¿CONTADOR =100? Rutina de Interrupción SI Programa PrincipalProf. Luis Zurita 32 Microcontroladores I
    • Paso3. Lenguaje Ensamblador: LIST P=16F84A ;TIPO DE PROCESADOR INCLUDE 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 RESET GOTO INICIO ORG 04H ;VECTOR DE INTERRUPCIÓN GOTO RUTIN ;VA A RUTINA DE INTERRUPCIÓN;*****************************;****SUBRUTINA DE INTERRUPCIÓN****;*****************************RUTIN BCF INTCON,T0IF ;REPONE FLAG DEL TMR0 DECFSZ CONTAVECES,F ;DECREMENTA EL CONTADOR GOTO COMUN MOVLW .20 ;SI HAN OCURRIDO 20 DESBORDES (1000 MS) SE INCREMENTA ;EL CONTADOR EN EL DISPLAY MOVWF CONTAVECES ;REPONE EL CONTADOR DE DESBORDE DEL TMR0SUBE MOVF UNIDAD,0 SUBLW .9 BTFSS STATUS,Z ;ES 9? GOTO SUBEUNI ;NO. VA A INCREMENTAR UNIDAD CLRF UNIDAD ;SI. VA A SUBIR DECENA INCF CONTADOR,1 MOVF DECENA,0 SUBLW .9 BTFSS STATUS,Z ;ES 9? GOTO SUBEDEC ;NO. VA A INCREMENTAR DECENA CLRF DECENA ;SI. REINICIA EL CONTADORSUBEUNI INCF CONTADOR,1 INCF UNIDAD,1 GOTO COMUNSUBEDEC INCF DECENA,1 GOTO COMUNCOMUN MOVLW .61 MOVWF TMR0 ;REPONE EL TMR0 CON 61 PARA NUEVO DESBORDE RETFIE ;RETORNO DE INTERRUPCIÓNProf. Luis Zurita 33 Microcontroladores I
    • ;********************************;****ZONA DE CONFIGURACIONES****;********************************INICIO CLRF PORTB ; BORRA LOS SEGMENTOS DE SALIDA BSF STATUS,5 ; SELECCIONA BANCO 1 MOVLW B00000100 ;RA0 Y RA1 SALIDAS Y RA2 ENTRADA MOVWF TRISA ; PORTA SE CONFIGURA CLRF TRISB ; PORTB SE CONFIGURA COMO SALIDA MOVLW B00000111 MOVWF OPTION_REG ; PREESCALER DE 256 PARA EL TMR0, BCF STATUS,5 ;SELECCIONA BANCO 0REINICIO MOVLW B10000000 MOVWF INTCON ;ACTIVA LA INTERRUPCIÓN GLOBAL GIE=1. CLRF UNIDAD ;PUESTA A 0 DE UNIDAD Y DECENA QUE SE MOSTRARÁN CLRF DECENA ;EN EL DISPLAY CLRF 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 TMR0 MOVLW .61 ;CARGA EL VALOR DEL PRIMER DESBORDE MOVWF TMR0 ;CARGA EL TMR0 CON 61 BSF 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,0 SUBLW .101 BTFSS STATUS,2 ;UNIDAD=0? GOTO CICLO2 ;NO.CONTADOR LLEGÓ A 100 ESTADOS? ESPERA GOTO 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 OFF MOVF UNIDAD,W CALL TABLA ; CONVIERTE BCD A 7 SEGMENTOS MOVWF PORTB ; VISUALIZA EL VALOR DE LA UNIDAD CALL DELAY5MSProf. Luis Zurita 34 Microcontroladores I
    • BCF PORTA,0 ;DISPLAY UNI OFF BSF PORTA,1 ;DISPLAY DEC ON MOVF DECENA,W CALL TABLA ; CONVIERTE BCD A 7 SEGMENTOS MOVWF PORTB ; VISUALIZA EL VALOR DE LA UNIDAD CALL DELAY5MS RETURN;************************************************;****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 B11000000 ;0. VALOR 0 RETLW B11111001 ;1. VALOR 1 RETLW B10100100 ;2. VALOR 2 RETLW B10110000 ;3. VALOR 3 RETLW B10011001 ;4. VALOR 4 RETLW B10010010 ;5. VALOR 5 RETLW B10000011 ;6. VALOR 6 RETLW B11111000 ;7. VALOR 7 RETLW B10000000 ;8. VALOR 8 RETLW B10011000 ;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, loop decfsz PDel00, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop11 ; 2 no, loopPDelL11 goto PDelL22 ; 2 ciclos delayPDelL22 clrwdt ; 1 ciclo delay return ; 2+2 Fin. END ;FIN DEL PROGRAMAProf. Luis Zurita 35 Microcontroladores I
    • 7. Generar la siguiente señal. (Use Timer 0 e interrupción) (Este tipo de señal es utilizada como señal patrón para algunas pruebas que realizan los estudiantes de Ingeniería en Electrónica) (no aplica para los estudiantes de Ingeniería en Instrumentación y Control) 100 ms 2 segundosPaso 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ñalProf. Luis Zurita 36 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), 50 ݉ ‫ݏ‬asumiremos el estándar de 4 MHz: ்ܸெ ோை = = 195,31 ≅ 195 1 4∗ቀ ቁ∗ 256 4‫ݖܪ ܯ‬ ்ܸெ ோை = 256 − ܸ݈ܽ‫݈ܸܽ → 0ܴ ܯ݈ܴܶܽ݁ݎ݋‬ ‫்ܸ − 652 = 0ܴ ܯ݈ܴܶܽ݁ݎ݋‬ெ ோை = 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:Prof. Luis Zurita 37 Microcontroladores I
    • INICIO RSI Declarar Deshabilitar CONTADOR Interrupciones Configurar NO Puerto A y B ¿TOIF=1? SALIR SI Configurar SUBE INTCON y OPTION_REG Borramos el Señalizador TOIF Inicializamos NO CONTADOR y PORTB ¿Contador NO ¿Contador >20? >40? Cargamos valor calculado en el TIMER0 SI SI Bascular RB0 CONTADOR=0 SUBE Para evitar un reinicio del programa Limpiamos el Perro Guardián CONTADOR=CONTADOR+1 SALIR Habilitar Interrupciones retfiePaso 3. Lenguaje ensamblador: list P=16F84A include P16F84A.incCONTADOR equ 20H ;Declaramos el registro org 00H goto INICIO org 04H goto 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, Salimos bcf INTCON,2 ;Si, borramos el señalizador TOIFProf. Luis Zurita 38 Microcontroladores I
    • movlw .20 subwf CONTADOR,0 ;Contador-20. btfsc STATUS,0 ;C=0? ó Contador < 20? goto NOBASCULA ;No.BASCULA movlw .01 ;Si. xorwf PORTB,1 ;Basculamos (Toggle) RB0 goto SUBECONTNOBASCULA movlw .40 subwf CONTADOR,0 ;Contador-40. Contador>40? btfsc STATUS,0 ;C=0? goto LIMPIARSUBECONT incf CONTADOR,1 ;Contador=Contador+1 movlw .61 ;Cargamos el valor del TMR0 movwf TMR0 ;Para una nueva temporización bsf INTCON,7 ;Habilitamos las interrupciones retfie ;Salimos de la RSILIMPIAR 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 TRISB movlw B00010111 ;Predivisor=256 movwf OPTION_REG movlw B10100000 ;Habilitamos las interrupciones movwf INTCON ;Con GIE=1 y TOIE=1 bcf STATUS,5 clrf PORTB clrf CONTADOR bcf PORTB,0 movlw .61 ;Cargamos el valor del TMRO movwf TMR0 ;Previamente calculadoSINFIN clrwdt goto SINFIN endProf. Luis Zurita 39 Microcontroladores I
    • A C1 B U1 C 22p 16 17 X1 15 OSC1/CLKIN RA0 18 CRYSTAL OSC2/CLKOUT RA1 D C2 1 RA2 4 2 MCLR RA3 3 VDD RA4/T0CKI 22p R1 6 RB0/INT VSS 7 RB1 330R 8 RB2 9 RB3 10 RB4 11 D1 RB5 LED-GREEN 12 RB6 13 RB7 PIC16F84A VSS Señal en el osciloscopio del ProteusProf. Luis Zurita 40 Microcontroladores I