SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
GUÍA DE EJERCICIOS RESUELTOS Y
                   PROPUESTOS
                            TEMA 4:
                    TIMER 0 E INTERRUPCIONES




Prof. 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.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




Prof. 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        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.




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á la
señal, asumiremos RB0.
      Cuando se trabaja con el Timer 0, se deben incluir los cálculos que se
hayan 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 lo
que 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= 217




Prof. 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           B'00010101' ; Reloj interno (Temporizador) Predivisor
               movwf           OPTION_REG ; asignado a TMR0, valor= 128
               bcf             STATUS,5
               clrf            PORTB           ;Inicializamos el Puerto B
               nop

Prof. 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 ciclo

DELAY2_5MS      movlw      .217                    ;Cargamos TMR0 con valor
         movwf        TMR0                         ;calculado previamente
         bcf          INTCON,2                     ;Borramos el señalizador
ESPERA   btfss        INTCON,2                     ;Se desbordó el TMR0?
         goto         ESPERA                       ;No. Seguimos esperamos
         return                                    ;Si, han transcurrido 2,5 ms
         end

FORMA 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ón
SALIR          bsf            INTCON,7       ;Habilitamos las interrupciones
               retfie

;*************************************
;***PROGRAMA PRINCIPAL***
;*************************************
INICIO         bsf             STATUS,5
               clrf            TRISB
               movlw           B'00010101' ; Reloj interno (Temporizador) Predivisor
               movwf           OPTION_REG ; asignado a TMR0, valor= 128
               movlw           B'10100000'     ; Habilitamos las interrupciones

Prof. 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 calculado
SINFIN        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.
              end

Nota: Generalmente cuando los puertos A y/o B pueden sufrir modificaciones
dentro de la rutina de interrupción, se salva el entorno (Se verán en los ejemplos
3, 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ón




Prof. Luis Zurita                        9                       Microcontroladores I
MODO
               Manual
               Auto




                                   OPERACIÓN
               PARADA




                                      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.
       Como el sensor de parada se va a utilizar por interrupción de cambio de
nivel 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
                                                                                                                                                     VSS
VSS
                                          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
                                                                                        PIC16F84A




Prof. 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




               M




Prof. Luis Zurita                                   12                  Microcontroladores I
Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador:

               list         P=16F84A
               include      P16F84A.INC
WTEMP          equ          20H                  ;Declaramos registros para
PBTEMP         equ          21H                  ;Utilizarse para salvar y restaurar
STATEMP        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 deshabilitadas
PUSH           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 RSI
SI             bcf             PORTB,2
               bcf             PORTB,3           ;Bomba 1= OFF
               bcf             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ón
PULL           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        B'00000001'          ;RB0= Entrada, Resto Salidas

Prof. Luis Zurita                           13                       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




Prof. 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 por
interrupción sino por polling, puede ser sustituida por una rutina de 1
segundo 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


 MA




Prof. Luis Zurita                  16                Microcontroladores I
Nomenclaturas:
B1: Bomba 1
B2: Bomba 2
MM: Motor de Mezclado
VD: Válvula de Desagüe
MA: Motor de Avance

Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sin
embargo 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
                                              Avance




Prof. 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
                                                                                RB7




Prof. 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



                    1




Prof. Luis Zurita                                             19                             Microcontroladores I
Paso 3. Lenguaje Ensamblador:
            list      P=16F84A
            include   p16F84A.inc

W_TEMP   equ                 20H                ;Declaramos los registros
ESTADO_TEMP         equ      21H                ;A utilizar para salvar y restaurar
PB_TEMP equ                  22H                ;El entorno
REGAUX1 equ                  23H                ;Registros para generar retardos
REGAUX2 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           b'00000100'      ;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,0
SALIR          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         b'00000001'
               movwf         TRISB              ;PB como entrada/salida
               movlw         b'01000111'        ;Prescaler= 256

Prof. Luis Zurita                          20                      Microcontroladores I
movwf           OPTION_REG    ;Y configuramos el flanco de RBO/INT
               movlw           b'10010000'   ;GIE= 1 y INTE=1
               movwf           INTCON
               bcf             STATUS,5
               clrf            PORTB         ;Limpiamos el Puerto B
EMPIEZA        btfsc           PORTA,0       ;Se pulsó “INICIO”
               goto            EMPIEZA       ;No. Esperamos
REPITE         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= ON
NAOK           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= ON
NBOK           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           d'114'
               movwf           REGAUX1
RECAR75 bcf                    INTCON,2
               clrf            TMR0
ESPERA1 btfss                  INTCON,2
               goto            ESPERA1
               decfsz          REGAUX1,1
               goto            RECAR75
               return




Prof. Luis Zurita                       21                      Microcontroladores I
;*********************************
;***Rutina de 13 segundos***
;*********************************
RET13          bcf             INTCON,2
               movlw           d'198'
               movwf           REGAUX1
RECAR13 bcf                    INTCON,2
               clrf            TMR0
ESPERA2 btfss                  INTCON,2
               goto            ESPERA2
               decfsz          REGAUX1,1
               goto            RECAR13
               return
;****************************
;***Rutina de 1 minuto***
;****************************
RET1M          movlw           d'30' ;Original= 60, se cambió para la simulación
               movwf           REGAUX2
RECAR4         movlw           d'15'
               movwf           REGAUX1
RECAR5         bcf             INTCON,2
               clrf            TMR0
ESPERA4 btfss                  INTCON,2
               goto            ESPERA4
               decfsz          REGAUX1,1
               goto            RECAR5
               decfsz          REGAUX2,1
               goto            RECAR4
               return
               end                          ;Fin del programa




Prof. 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, sin
embargo 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 al
puerto 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        VSS




Prof. 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             lavada




Prof. Luis Zurita                       27                            Microcontroladores I
Paso 3. Lenguaje Ensamblador:
            LIST      P=16F84A
            INCLUDE   P16F84A.INC
                                               ;Declaraciones de registros:
RET4     EQU               2DH                 ;Registros para generar
RET5     EQU               2EH                 ;Rutinas de retardo
RET6     EQU               2FH
W_TEMP              EQU    30H          ;Registros para salvar el
STATUS_TEMP         EQU    31H          ;Entorno durante la interrupción
PA_TEMP             EQU    32H
PB_TEMP             EQU    33H
PC_TEMP             EQU    34H
CONTA               EQU    35H          ;Registro contador de comparación
CONTAMED            EQU    20H          ;Registro que se cargará con el tiempo
                                        ;medio de la duración del lavado
CONTALAV            EQU 21H             ;Registro que posee el tiempo total de
                                        ;lavado
CONTASEG            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_TEMP
ESPERA         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=OFF
POP            MOVF            PB_TEMP,0
               MOVWF           PORTB

Prof. 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=0
SALIR          BSF               INTCON,7      ;GIE=1
               RETFIE

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

INICIO   BSF                     STATUS,5       ;Configuramos los Puertos A y B
         MOVLW                   1FH
         MOVWF                   TRISA
         MOVLW                   B'00000001'    ;RB0 como entrada
         MOVWF                   TRISB
         BCF                     OPTION_REG,6   ;Configuramos el flanco de RB0/INT
         MOVLW                   B'10010000'    ;Activamos GIE y INTE
         MOVWF                   INTCON
         BCF                     STATUS,5
NUEVOLAV CLRF                    CONTASEG       ;Inicializamos los registros
         CLRF                    CONTA          ;Y el Puerto B
         CLRF                    PORTB
MODO     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                   D'12'          ;Precargamos los valores
         MOVWF                   CONTAMED       ;Para el lavado rápido
         MOVLW                   D'25'
         MOVWF                   CONTALAV
         GOTO                    MARCHA         ;Va a preguntar si se pulsó INICIO
MODOLENTO BCF                    PORTB,5        ;Activamos el MODO lento
         BSF                     PORTB,6
         MOVLW                   D'22'          ;Y precargamos los valores
         MOVWF                   CONTAMED       ;de este modo
         MOVLW                   D'45'
         MOVWF                   CONTALAV
         GOTO                    MARCHA
MARCHA   BTFSC                   PORTA,1        ;¿INICIO?
         GOTO                    MODO           ;No, vamos a explorar el MODO
ESPLL1   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 ON
SUBEMIN1
         CALL         RET1s    ;PARA SIMULACION, ES UN MINUTO
         INCF         CONTA,1
         MOVF         CONTAMED,0
         SUBWF        CONTA,0        ;CONTA=CONTAMED?
         BTFSS        STATUS,2 ;Z=1?
         GOTO         SUBEMIN1
ESPVAC   BCF          PORTB,3        ;VLL OFF
         BCF          PORTB,1        ;ML OFF
         BSF          PORTB,2        ;VD ON
         BTFSC        PORTA,2        ;NMIN?
         GOTO         ESPVAC
ESPLL2   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 MINUTOS
SUBEMIN2 CALL         RET1s          ;PARA SIMULACION, ES UN
MINUTO
         INCF         CONTA,1
         MOVF         CONTALAV,0
         SUBWF        CONTA,0        ;CONTA=CONTALAV?
         BTFSS        STATUS,2       ;Z=1?
         GOTO         SUBEMIN2
ESPVAC2 BCF           PORTB,3        ;VLL OFF
         BCF          PORTB,1        ;ML OFF
         BSF          PORTB,2        ;VD ON
         BTFSC        PORTA,2        ;NMIN?
         GOTO         ESPVAC2
ESPLL3   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 OFF

Prof. Luis Zurita               30                Microcontroladores I
BSF          PORTB,2               ;VD ON
               BTFSC        PORTA,2               ;NMIN?
               GOTO         ESPVAC3
               BCF          PORTB,2               ;VD OFF
PITAZO         BSF          PORTB,7               ;ALARMA SONORA ON
               CALL         RET1s
               INCF         CONTASEG,1
               MOVLW        D'10'
               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, loop
PDelL1         goto            PDelL2         ; 2 ciclos delay
PDelL2         clrwdt                         ; 1 ciclo delay
               return                         ; 2+2 Fin.

               END




Prof. Luis Zurita                          31                        Microcontroladores I
6. PROGRAMA PARA GENERAR UN CONTADOR DE 00-99 mediante interrupción del
   TMR0

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 cantidad
de estados que se muestra en los displays de 7 segmentos conectados directamente al
PUERTO B. Como se van a mostrar todos los estados, es decir del 00 al 99, se utilizan dos
registros (UNIDAD y DECENA) sin tener que utilizar la rutina de binario a bcd. Por
simplicidad se colocó en el diagrama de flujo un solo registro contador que va a
incrementarse, pero que en realidad incrementa un contador clásico de 00 a 99. Este
programa muestra el uso de un registro auxiliar para obtener retardos mayores a los
que se pueden obtener directamente con el TMR0. Adicional a esto realiza un contador
con el uso de la interrupción del TMR0, permitiendo utilizar el programa principal para
tareas 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 Principal

Prof. 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             ;UNIDAD
DECENA       EQU 21H             ;DECENA
CONTAVECES EQU 22H               ;REGISTRO AUXILIAR, CONTADOR DE 20 DESBORDES
CONTADOR     EQU 23H             ;CONTADOR GLOBAL DE 100 ESTADOS
PDEL00       EQU 24H             ;REGISTRO DE TIEMPO DEL PICDEL
PDEL11       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 TMR0
SUBE         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 CONTADOR
SUBEUNI      INCF CONTADOR,1
             INCF UNIDAD,1
             GOTO COMUN
SUBEDEC      INCF DECENA,1
             GOTO COMUN
COMUN        MOVLW .61
             MOVWF TMR0          ;REPONE EL TMR0 CON 61 PARA NUEVO DESBORDE
             RETFIE              ;RETORNO DE INTERRUPCIÓN




Prof. Luis Zurita                       33                      Microcontroladores I
;********************************
;****ZONA DE CONFIGURACIONES****
;********************************
INICIO         CLRF PORTB          ; BORRA LOS SEGMENTOS DE SALIDA
               BSF    STATUS,5     ; SELECCIONA BANCO 1
               MOVLW B'00000100' ;RA0 Y RA1 SALIDAS Y RA2 ENTRADA
               MOVWF TRISA         ; PORTA SE CONFIGURA
               CLRF TRISB          ; PORTB SE CONFIGURA COMO SALIDA
               MOVLW 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Á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 TMR0
CARGA          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 DELAY5MS

Prof. 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. W
TABLA         ADDWFPCL,1                   ;PUNTERO O ENCABEZADO DE LA TABLA
              RETLW B'11000000'            ;0. VALOR 0
              RETLW B'11111001'            ;1. VALOR 1
              RETLW B'10100100'            ;2. VALOR 2
              RETLW B'10110000'            ;3. VALOR 3
              RETLW B'10011001'            ;4. VALOR 4
              RETLW B'10010010'            ;5. VALOR 5
              RETLW B'10000011'            ;6. VALOR 6
              RETLW B'11111000'            ;7. VALOR 7
              RETLW B'10000000'            ;8. VALOR 8
              RETLW 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, loop
              decfsz       PDel00, 1       ; 1 + (1) es el tiempo 0 ? (B)
              goto         PLoop11         ; 2 no, loop
PDelL11       goto         PDelL22         ; 2 ciclos delay
PDelL22       clrwdt                       ; 1 ciclo delay
              return                       ; 2+2 Fin.
              END                  ;FIN DEL PROGRAMA




Prof. 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 segundos

Paso 1. Enunciado y delimitación del problema:
       Como no se ha especificado por cual pin del microcontrolador saldrá la
señal, asumiremos RB0.
      Cuando se trabaja con el Timer 0, se deben incluir los cálculos que se
hayan realizado para generar el retardo deseado.
      En la gráfica, podemos extraer el período de la señal cuadrada cuyo valor
es de 100 ms, y asumiendo un ciclo de trabajo del 50 %, tendremos que la señal

Prof. 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 50
ms.
       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 a
cargar no podrá exceder bajo ningún concepto 256. Si colocamos otro predivisor
del 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 genera
10 veces, dando un tiempo de 1 segundo, si la señal entera, antes de que se
repita el ciclo nuevamente, es de 2 segundos, vale decir que durante 10 veces el
tiempo de 100 ms, la señal no bascula u oscila, por lo que podemos utilizar un
contador de temporización para determinar si la señal oscilará o no.
       Durante las primeras 20 temporizaciones de 50 ms, la señal de salida
oscilará, durante las siguientes 20 temporizaciones de 50 ms, la señal de salida no
oscilará, 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 desborde
del Timer0 para los 50 ms calculados, por lo tanto el contador se utilizará dentro
de la rutina de servicio de la interrupción. Veamos el Diagrama de flujo para
entenderlo 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


                                                                 retfie




Paso 3. Lenguaje ensamblador:
                 list                P=16F84A
                 include             P16F84A.inc

CONTADOR 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 TOIF
Prof. 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           SUBECONT
NOBASCULA movlw          .40
          subwf          CONTADOR,0         ;Contador-40. Contador>40?
          btfsc          STATUS,0           ;C=0?
          goto           LIMPIAR
SUBECONT 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 RSI
LIMPIAR   clrf           CONTADOR           ;Limpiamos el contador
SALIR     bsf            INTCON,7           ;Habilitamos las interrupciones
          retfie                            ;Salimos de la RSI

;***************************
;***PROGRAMA PRINCIPAL***
;***************************
INICIO         bsf           STATUS,5       ;Zona de configuraciones
               clrf          TRISB
               movlw         B'00010111'    ;Predivisor=256
               movwf         OPTION_REG
               movlw         B'10100000'    ;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 calculado
SINFIN         clrwdt
               goto          SINFIN
               end




Prof. 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 Proteus




Prof. Luis Zurita                                      40                           Microcontroladores I

Contenu connexe

Tendances

Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorLuis Zurita
 
PWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosPWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosEduardo Henriquez
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discretoguest1e528d
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucionJair BG
 
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CLuis Zurita
 
Micc parcial dic9_2010 - copia (1)_sol
Micc parcial dic9_2010 - copia (1)_solMicc parcial dic9_2010 - copia (1)_sol
Micc parcial dic9_2010 - copia (1)_solJair BG
 
Señales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABSeñales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABJose Agustin Estrada
 
Manejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84aManejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84axeleta
 
Utp sirn_s0_generalidades
 Utp sirn_s0_generalidades Utp sirn_s0_generalidades
Utp sirn_s0_generalidadesjcbenitezp
 
1.2 control pid INGENIERIA DEL CONTROL
1.2 control pid INGENIERIA DEL CONTROL1.2 control pid INGENIERIA DEL CONTROL
1.2 control pid INGENIERIA DEL CONTROLPether Davila
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesLuis Zurita
 
Electrónica digital: capitulo 5 Circuitos combinacionales MSI
Electrónica digital: capitulo 5 Circuitos combinacionales MSI Electrónica digital: capitulo 5 Circuitos combinacionales MSI
Electrónica digital: capitulo 5 Circuitos combinacionales MSI SANTIAGO PABLO ALBERTO
 

Tendances (20)

Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensamblador
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
PWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosPWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros Involucrados
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discreto
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucion
 
Registro status PIC16F84A
Registro status PIC16F84ARegistro status PIC16F84A
Registro status PIC16F84A
 
Control digital con matlab
Control digital con matlabControl digital con matlab
Control digital con matlab
 
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
 
Pic retardos por software
Pic retardos por softwarePic retardos por software
Pic retardos por software
 
Micc parcial dic9_2010 - copia (1)_sol
Micc parcial dic9_2010 - copia (1)_solMicc parcial dic9_2010 - copia (1)_sol
Micc parcial dic9_2010 - copia (1)_sol
 
Guia osciladores pic18f4550
Guia osciladores pic18f4550Guia osciladores pic18f4550
Guia osciladores pic18f4550
 
Señales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABSeñales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLAB
 
Manejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84aManejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84a
 
Utp sirn_s0_generalidades
 Utp sirn_s0_generalidades Utp sirn_s0_generalidades
Utp sirn_s0_generalidades
 
1.2 control pid INGENIERIA DEL CONTROL
1.2 control pid INGENIERIA DEL CONTROL1.2 control pid INGENIERIA DEL CONTROL
1.2 control pid INGENIERIA DEL CONTROL
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupciones
 
Electrónica digital: capitulo 5 Circuitos combinacionales MSI
Electrónica digital: capitulo 5 Circuitos combinacionales MSI Electrónica digital: capitulo 5 Circuitos combinacionales MSI
Electrónica digital: capitulo 5 Circuitos combinacionales MSI
 
Ejercicios circuitos i
Ejercicios circuitos iEjercicios circuitos i
Ejercicios circuitos i
 
Conexiones del PIC16F887
Conexiones del PIC16F887Conexiones del PIC16F887
Conexiones del PIC16F887
 

Similaire à Guía de ejercicios resueltos y propuestos tema 4

Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupcionesLuis Zurita
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo microLuis Zurita
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorDaniel Pardo
 
Curso Micro Tema 5
Curso Micro Tema 5Curso Micro Tema 5
Curso Micro Tema 5Luis Zurita
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitEnrique Trascastro
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"Diego Rojas Ruiz
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersmarco calderon layme
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesiDavid Narváez
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadoresDavid Narváez
 
Manejo de Puertos PIC
Manejo de Puertos PICManejo de Puertos PIC
Manejo de Puertos PICSawy G
 
Curso Micro Tema 3
Curso Micro Tema 3Curso Micro Tema 3
Curso Micro Tema 3Luis Zurita
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2Luis Zurita
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Hamiltonn Casallas
 
Laboratorio de Microcomputadoras - Práctica 03
 Laboratorio de Microcomputadoras - Práctica 03 Laboratorio de Microcomputadoras - Práctica 03
Laboratorio de Microcomputadoras - Práctica 03Cristian Ortiz Gómez
 

Similaire à Guía de ejercicios resueltos y propuestos tema 4 (20)

Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupciones
 
In terrupciones pic
In terrupciones picIn terrupciones pic
In terrupciones pic
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo micro
 
Uso del tmr0
Uso del tmr0Uso del tmr0
Uso del tmr0
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Curso Micro Tema 5
Curso Micro Tema 5Curso Micro Tema 5
Curso Micro Tema 5
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekit
 
Proye84
Proye84Proye84
Proye84
 
Semaforos
SemaforosSemaforos
Semaforos
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timers
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadores
 
Manejo de Puertos PIC
Manejo de Puertos PICManejo de Puertos PIC
Manejo de Puertos PIC
 
Curso Micro Tema 3
Curso Micro Tema 3Curso Micro Tema 3
Curso Micro Tema 3
 
Tarea final
Tarea finalTarea final
Tarea final
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
Laboratorio de Microcomputadoras - Práctica 03
 Laboratorio de Microcomputadoras - Práctica 03 Laboratorio de Microcomputadoras - Práctica 03
Laboratorio de Microcomputadoras - Práctica 03
 

Plus de Luis Zurita

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APALuis Zurita
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUSLuis Zurita
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y tecladoLuis Zurita
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13Luis Zurita
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreLuis Zurita
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronicaLuis Zurita
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iycLuis Zurita
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013Luis Zurita
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronicaLuis Zurita
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronicaLuis Zurita
 

Plus de Luis Zurita (20)

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APA
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUS
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
 
Pevmicroi ieo
Pevmicroi ieoPevmicroi ieo
Pevmicroi ieo
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Pev electronica
Pev electronicaPev electronica
Pev electronica
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
 
Micro2 tema 4
Micro2 tema 4Micro2 tema 4
Micro2 tema 4
 
Micro2 tema 3
Micro2 tema 3Micro2 tema 3
Micro2 tema 3
 
Micro2 tema 1
Micro2 tema 1Micro2 tema 1
Micro2 tema 1
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladore
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronica
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iyc
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronica
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronica
 

Dernier

PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxEribertoPerezRamirez
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxMartín Ramírez
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxJUANCARLOSAPARCANARE
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 

Dernier (20)

PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 

Guía de ejercicios resueltos y propuestos tema 4

  • 1. GUÍA DE EJERCICIOS RESUELTOS Y PROPUESTOS TEMA 4: TIMER 0 E INTERRUPCIONES Prof. Luis Zurita 1 Microcontroladores I
  • 2. 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
  • 3. 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 Prof. Luis Zurita 3 Microcontroladores I
  • 4. ;*** 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. Prof. Luis Zurita 4 Microcontroladores I
  • 5. 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á la señal, asumiremos RB0. Cuando se trabaja con el Timer 0, se deben incluir los cálculos que se hayan 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 lo que 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= 217 Prof. Luis Zurita 5 Microcontroladores I
  • 6. Paso 2. Diagrama de Flujo: Prof. Luis Zurita 6 Microcontroladores I
  • 7. 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 B'00010101' ; Reloj interno (Temporizador) Predivisor movwf OPTION_REG ; asignado a TMR0, valor= 128 bcf STATUS,5 clrf PORTB ;Inicializamos el Puerto B nop Prof. Luis Zurita 7 Microcontroladores I
  • 8. 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 ciclo DELAY2_5MS movlw .217 ;Cargamos TMR0 con valor movwf TMR0 ;calculado previamente bcf INTCON,2 ;Borramos el señalizador ESPERA btfss INTCON,2 ;Se desbordó el TMR0? goto ESPERA ;No. Seguimos esperamos return ;Si, han transcurrido 2,5 ms end FORMA 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ón SALIR bsf INTCON,7 ;Habilitamos las interrupciones retfie ;************************************* ;***PROGRAMA PRINCIPAL*** ;************************************* INICIO bsf STATUS,5 clrf TRISB movlw B'00010101' ; Reloj interno (Temporizador) Predivisor movwf OPTION_REG ; asignado a TMR0, valor= 128 movlw B'10100000' ; Habilitamos las interrupciones Prof. Luis Zurita 8 Microcontroladores I
  • 9. 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 calculado SINFIN 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. end Nota: Generalmente cuando los puertos A y/o B pueden sufrir modificaciones dentro de la rutina de interrupción, se salva el entorno (Se verán en los ejemplos 3, 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ón Prof. Luis Zurita 9 Microcontroladores I
  • 10. MODO Manual Auto OPERACIÓN PARADA 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. Como el sensor de parada se va a utilizar por interrupción de cambio de nivel 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
  • 11. 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 VSS VSS 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 PIC16F84A Prof. Luis Zurita 11 Microcontroladores I
  • 12. 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 M Prof. Luis Zurita 12 Microcontroladores I
  • 13. Paso 3. Del Diagrama de Flujo al Lenguaje Ensamblador: list P=16F84A include P16F84A.INC WTEMP equ 20H ;Declaramos registros para PBTEMP equ 21H ;Utilizarse para salvar y restaurar STATEMP 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 deshabilitadas PUSH 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 RSI SI bcf PORTB,2 bcf PORTB,3 ;Bomba 1= OFF bcf 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ón PULL 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 B'00000001' ;RB0= Entrada, Resto Salidas Prof. Luis Zurita 13 Microcontroladores I
  • 14. 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 Prof. Luis Zurita 14 Microcontroladores I
  • 15. 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 por interrupción sino por polling, puede ser sustituida por una rutina de 1 segundo generada por el PICDEL) Prof. Luis Zurita 15 Microcontroladores I
  • 16. PINTURA 1 PINTURA 2 B B MEZCLADORA DE PINTURAS Nivel Alto TANQUE MEZCLADOR Nivel Bajo MM VD PINTURA PINTURA LISTA LISTA MA Prof. Luis Zurita 16 Microcontroladores I
  • 17. Nomenclaturas: B1: Bomba 1 B2: Bomba 2 MM: Motor de Mezclado VD: Válvula de Desagüe MA: Motor de Avance Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sin embargo 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 Avance Prof. Luis Zurita 17 Microcontroladores I
  • 18. 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 RB7 Prof. Luis Zurita 18 Microcontroladores I
  • 19. 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 1 Prof. Luis Zurita 19 Microcontroladores I
  • 20. Paso 3. Lenguaje Ensamblador: list P=16F84A include p16F84A.inc W_TEMP equ 20H ;Declaramos los registros ESTADO_TEMP equ 21H ;A utilizar para salvar y restaurar PB_TEMP equ 22H ;El entorno REGAUX1 equ 23H ;Registros para generar retardos REGAUX2 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 b'00000100' ;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,0 SALIR 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 b'00000001' movwf TRISB ;PB como entrada/salida movlw b'01000111' ;Prescaler= 256 Prof. Luis Zurita 20 Microcontroladores I
  • 21. movwf OPTION_REG ;Y configuramos el flanco de RBO/INT movlw b'10010000' ;GIE= 1 y INTE=1 movwf INTCON bcf STATUS,5 clrf PORTB ;Limpiamos el Puerto B EMPIEZA btfsc PORTA,0 ;Se pulsó “INICIO” goto EMPIEZA ;No. Esperamos REPITE 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= ON NAOK 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= ON NBOK 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 d'114' movwf REGAUX1 RECAR75 bcf INTCON,2 clrf TMR0 ESPERA1 btfss INTCON,2 goto ESPERA1 decfsz REGAUX1,1 goto RECAR75 return Prof. Luis Zurita 21 Microcontroladores I
  • 22. ;********************************* ;***Rutina de 13 segundos*** ;********************************* RET13 bcf INTCON,2 movlw d'198' movwf REGAUX1 RECAR13 bcf INTCON,2 clrf TMR0 ESPERA2 btfss INTCON,2 goto ESPERA2 decfsz REGAUX1,1 goto RECAR13 return ;**************************** ;***Rutina de 1 minuto*** ;**************************** RET1M movlw d'30' ;Original= 60, se cambió para la simulación movwf REGAUX2 RECAR4 movlw d'15' movwf REGAUX1 RECAR5 bcf INTCON,2 clrf TMR0 ESPERA4 btfss INTCON,2 goto ESPERA4 decfsz REGAUX1,1 goto RECAR5 decfsz REGAUX2,1 goto RECAR4 return end ;Fin del programa Prof. Luis Zurita 22 Microcontroladores I
  • 23. 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
  • 24. Paso 1. Enunciado y delimitación del Hardware: Tenemos el enunciado, sin embargo 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 al puerto A y las salidas al puerto B. Prof. Luis Zurita 24 Microcontroladores I
  • 25. 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 VSS Prof. Luis Zurita 25 Microcontroladores I
  • 26. 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
  • 27. 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 lavada Prof. Luis Zurita 27 Microcontroladores I
  • 28. Paso 3. Lenguaje Ensamblador: LIST P=16F84A INCLUDE P16F84A.INC ;Declaraciones de registros: RET4 EQU 2DH ;Registros para generar RET5 EQU 2EH ;Rutinas de retardo RET6 EQU 2FH W_TEMP EQU 30H ;Registros para salvar el STATUS_TEMP EQU 31H ;Entorno durante la interrupción PA_TEMP EQU 32H PB_TEMP EQU 33H PC_TEMP EQU 34H CONTA EQU 35H ;Registro contador de comparación CONTAMED EQU 20H ;Registro que se cargará con el tiempo ;medio de la duración del lavado CONTALAV EQU 21H ;Registro que posee el tiempo total de ;lavado CONTASEG 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_TEMP ESPERA 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=OFF POP MOVF PB_TEMP,0 MOVWF PORTB Prof. Luis Zurita 28 Microcontroladores I
  • 29. MOVF PA_TEMP,0 MOVWF PORTA MOVF STATUS_TEMP,0 MOVWF STATUS SWAPF W_TEMP,1 MOVF W_TEMP,0 BCF INTCON,1 ;INTF=0 SALIR BSF INTCON,7 ;GIE=1 RETFIE ;***************************** ;***Programa Principal*** ;***************************** INICIO BSF STATUS,5 ;Configuramos los Puertos A y B MOVLW 1FH MOVWF TRISA MOVLW B'00000001' ;RB0 como entrada MOVWF TRISB BCF OPTION_REG,6 ;Configuramos el flanco de RB0/INT MOVLW B'10010000' ;Activamos GIE y INTE MOVWF INTCON BCF STATUS,5 NUEVOLAV CLRF CONTASEG ;Inicializamos los registros CLRF CONTA ;Y el Puerto B CLRF PORTB MODO 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 D'12' ;Precargamos los valores MOVWF CONTAMED ;Para el lavado rápido MOVLW D'25' MOVWF CONTALAV GOTO MARCHA ;Va a preguntar si se pulsó INICIO MODOLENTO BCF PORTB,5 ;Activamos el MODO lento BSF PORTB,6 MOVLW D'22' ;Y precargamos los valores MOVWF CONTAMED ;de este modo MOVLW D'45' MOVWF CONTALAV GOTO MARCHA MARCHA BTFSC PORTA,1 ;¿INICIO? GOTO MODO ;No, vamos a explorar el MODO ESPLL1 BSF PORTB,4 ;LEDINI=ON BSF PORTB,3 ;VLL ON BTFSC PORTA,3 ;NMAX? Prof. Luis Zurita 29 Microcontroladores I
  • 30. GOTO ESPLL1 BCF PORTB,3 ;VLL OFF BSF PORTB,1 ;ML ON SUBEMIN1 CALL RET1s ;PARA SIMULACION, ES UN MINUTO INCF CONTA,1 MOVF CONTAMED,0 SUBWF CONTA,0 ;CONTA=CONTAMED? BTFSS STATUS,2 ;Z=1? GOTO SUBEMIN1 ESPVAC BCF PORTB,3 ;VLL OFF BCF PORTB,1 ;ML OFF BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVAC ESPLL2 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 MINUTOS SUBEMIN2 CALL RET1s ;PARA SIMULACION, ES UN MINUTO INCF CONTA,1 MOVF CONTALAV,0 SUBWF CONTA,0 ;CONTA=CONTALAV? BTFSS STATUS,2 ;Z=1? GOTO SUBEMIN2 ESPVAC2 BCF PORTB,3 ;VLL OFF BCF PORTB,1 ;ML OFF BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVAC2 ESPLL3 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 OFF Prof. Luis Zurita 30 Microcontroladores I
  • 31. BSF PORTB,2 ;VD ON BTFSC PORTA,2 ;NMIN? GOTO ESPVAC3 BCF PORTB,2 ;VD OFF PITAZO BSF PORTB,7 ;ALARMA SONORA ON CALL RET1s INCF CONTASEG,1 MOVLW D'10' 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, loop PDelL1 goto PDelL2 ; 2 ciclos delay PDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. END Prof. Luis Zurita 31 Microcontroladores I
  • 32. 6. PROGRAMA PARA GENERAR UN CONTADOR DE 00-99 mediante interrupción del TMR0 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 cantidad de estados que se muestra en los displays de 7 segmentos conectados directamente al PUERTO B. Como se van a mostrar todos los estados, es decir del 00 al 99, se utilizan dos registros (UNIDAD y DECENA) sin tener que utilizar la rutina de binario a bcd. Por simplicidad se colocó en el diagrama de flujo un solo registro contador que va a incrementarse, pero que en realidad incrementa un contador clásico de 00 a 99. Este programa muestra el uso de un registro auxiliar para obtener retardos mayores a los que se pueden obtener directamente con el TMR0. Adicional a esto realiza un contador con el uso de la interrupción del TMR0, permitiendo utilizar el programa principal para tareas 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 Principal Prof. Luis Zurita 32 Microcontroladores I
  • 33. Paso3. Lenguaje Ensamblador: LIST P=16F84A ;TIPO DE PROCESADOR INCLUDE P16F84A.INC ;DEFINICIONES DE REGISTROS INTERNOS ;******************************* ;****ZONA DE DECLARACIONES****** ;******************************* UNIDAD EQU 20H ;UNIDAD DECENA EQU 21H ;DECENA CONTAVECES EQU 22H ;REGISTRO AUXILIAR, CONTADOR DE 20 DESBORDES CONTADOR EQU 23H ;CONTADOR GLOBAL DE 100 ESTADOS PDEL00 EQU 24H ;REGISTRO DE TIEMPO DEL PICDEL PDEL11 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 TMR0 SUBE 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 CONTADOR SUBEUNI INCF CONTADOR,1 INCF UNIDAD,1 GOTO COMUN SUBEDEC INCF DECENA,1 GOTO COMUN COMUN MOVLW .61 MOVWF TMR0 ;REPONE EL TMR0 CON 61 PARA NUEVO DESBORDE RETFIE ;RETORNO DE INTERRUPCIÓN Prof. Luis Zurita 33 Microcontroladores I
  • 34. ;******************************** ;****ZONA DE CONFIGURACIONES**** ;******************************** INICIO CLRF PORTB ; BORRA LOS SEGMENTOS DE SALIDA BSF STATUS,5 ; SELECCIONA BANCO 1 MOVLW B'00000100' ;RA0 Y RA1 SALIDAS Y RA2 ENTRADA MOVWF TRISA ; PORTA SE CONFIGURA CLRF TRISB ; PORTB SE CONFIGURA COMO SALIDA MOVLW 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Á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 TMR0 CARGA 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 DELAY5MS Prof. Luis Zurita 34 Microcontroladores I
  • 35. 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. W TABLA ADDWFPCL,1 ;PUNTERO O ENCABEZADO DE LA TABLA RETLW B'11000000' ;0. VALOR 0 RETLW B'11111001' ;1. VALOR 1 RETLW B'10100100' ;2. VALOR 2 RETLW B'10110000' ;3. VALOR 3 RETLW B'10011001' ;4. VALOR 4 RETLW B'10010010' ;5. VALOR 5 RETLW B'10000011' ;6. VALOR 6 RETLW B'11111000' ;7. VALOR 7 RETLW B'10000000' ;8. VALOR 8 RETLW 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, loop decfsz PDel00, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop11 ; 2 no, loop PDelL11 goto PDelL22 ; 2 ciclos delay PDelL22 clrwdt ; 1 ciclo delay return ; 2+2 Fin. END ;FIN DEL PROGRAMA Prof. Luis Zurita 35 Microcontroladores I
  • 36. 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 segundos Paso 1. Enunciado y delimitación del problema: Como no se ha especificado por cual pin del microcontrolador saldrá la señal, asumiremos RB0. Cuando se trabaja con el Timer 0, se deben incluir los cálculos que se hayan realizado para generar el retardo deseado. En la gráfica, podemos extraer el período de la señal cuadrada cuyo valor es de 100 ms, y asumiendo un ciclo de trabajo del 50 %, tendremos que la señal Prof. Luis Zurita 36 Microcontroladores I
  • 37. en alto es igual a la señal en bajo, por lo tanto su duración o período será de 50 ms. 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 a cargar no podrá exceder bajo ningún concepto 256. Si colocamos otro predivisor del 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 genera 10 veces, dando un tiempo de 1 segundo, si la señal entera, antes de que se repita el ciclo nuevamente, es de 2 segundos, vale decir que durante 10 veces el tiempo de 100 ms, la señal no bascula u oscila, por lo que podemos utilizar un contador de temporización para determinar si la señal oscilará o no. Durante las primeras 20 temporizaciones de 50 ms, la señal de salida oscilará, durante las siguientes 20 temporizaciones de 50 ms, la señal de salida no oscilará, 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 desborde del Timer0 para los 50 ms calculados, por lo tanto el contador se utilizará dentro de la rutina de servicio de la interrupción. Veamos el Diagrama de flujo para entenderlo mejor: Paso 2. Diagrama de Flujo: Prof. Luis Zurita 37 Microcontroladores I
  • 38. 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 retfie Paso 3. Lenguaje ensamblador: list P=16F84A include P16F84A.inc CONTADOR 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 TOIF Prof. Luis Zurita 38 Microcontroladores I
  • 39. 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 SUBECONT NOBASCULA movlw .40 subwf CONTADOR,0 ;Contador-40. Contador>40? btfsc STATUS,0 ;C=0? goto LIMPIAR SUBECONT 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 RSI LIMPIAR clrf CONTADOR ;Limpiamos el contador SALIR bsf INTCON,7 ;Habilitamos las interrupciones retfie ;Salimos de la RSI ;*************************** ;***PROGRAMA PRINCIPAL*** ;*************************** INICIO bsf STATUS,5 ;Zona de configuraciones clrf TRISB movlw B'00010111' ;Predivisor=256 movwf OPTION_REG movlw B'10100000' ;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 calculado SINFIN clrwdt goto SINFIN end Prof. Luis Zurita 39 Microcontroladores I
  • 40. 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 Proteus Prof. Luis Zurita 40 Microcontroladores I