SlideShare a Scribd company logo
1 of 29
Download to read offline
GUÍA RÁPIDA
                          TIMER 0 E
                       INTERRUPCIONES
                        PROF. LUIS ZURITA




Microcontroladores I
REGISTROS ASOCIADOS AL
                         TEMPORIZADOR TMR0




     • TMR0: Registro de 8 bits de lectura/escritura
     • OPTION_REG: Configura al TMR0 para que trabaje
       como temporizador ó contador y asigna el valor al
       prescaler
     • INTCON: Da información mediante el bit “TOIF”
       cuando el TMR0 se ha desbordado.
     • TRISA (PUERTO A): Permite el ingreso de pulsos
       cuando el TMR0 está configurado como contador por
       RA4/TOCKI

Microcontroladores I                                  Prof. Luis Zurita
REGISTRO TMR0

       • Es el corazón del módulo Timer0. Puede ser leído o
         escrito en cualquier momento. El TMR0 se
         incrementará automáticamente por cada ciclo de
         instrucción y contará desde 0 (00H) hasta 255 (FFH)
         (Contador de 8 bits).

       • Ejemplo. Escribir 100 en el TMR0=
            movlw          .100
            movwf          TMR0
       • Leer el valor del TMR0 y mostrarlo en el Puerto B=
            movf           TMR0,0
            movwf          PORTB

Microcontroladores I                                      Prof. Luis Zurita
¿CÓMO CUENTA EL TMR0?
                                                 00H
                                                 FFH
         El TMR0 cuenta exclusivamente de
         forma      ascendente,     nunca
         descendente.


         ¿Quién incrementa al TMR0?
                                                 00H
         Cada instrucción que se ejecuta en un
         programa      se      encarga      de
         incrementarlo                                  (28 – N10)
                                                 00H
                                                 FFH
           Si el TMR0 se carga con un valor,
           éste comenzará a contar desde el             Valor cargado
           valor cargado hasta que se                   En el TMR0
           desborda (cuando pasa a 00H)
                                                  00H


Microcontroladores I                                            Prof. Luis Zurita
¿QUÉ ES EL PRESCALER?
      •    Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos,
           como se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc.,
           genera una nueva señal de menor frecuencia a la salida, que será la señal de reloj
           de entrada al registro TMR0.
      •    “Ralentiza” señales de entrada demasiado rápidas para nuestros propósitos.
      •    También existe un postescaler, asociado al perro guardián WDT (Watch Dog
           Timer) del microcontrolador, pero en este caso recibe el nombre de postcaler ya
           que se usa a la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al
           WDT. El preescaler es transparente para el programador, no se puede leer ni
           escribir sobre él, pero se puede seleccionar por software, como ya se ha dicho,
           mediante el registro OPTION.
      •    Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una
           secuencia de instrucciones específicas cuando se cambia la asignación del
           prescaler del TMR0 al WDT. Esta secuencia debe ser seguida, aún cuando el WDT
           esté inactivo.




Microcontroladores I                                                                  Prof. Luis Zurita
CÁLCULOS CON EL TMR0
       • Cuando se carga en el registro TMR0 un valor XX, éste contará:
         (256 – XX) impulsos y el tiempo que tarda en hacerlo viene dado
         por la expresión:
       Temporización= 4*TOSC*ValorRealTMR0*ValorPreescaler
        TOSC = período de oscilación = 1 / FOSC
        FOSC = viene dado por el cristal de cuarzo o resonador
         que se esté utilizando. Los típicos son=
               XT = 4 MHz
               HS= 20 MHz
        Valor Real TMR0 = (28 – N10) = (256 – N10)
        N10= Valor a cargar en el TMR0
        ValorPreescaler = puede tomar uno de estos valores=
               2 , 4, 8, 16, 32, 64, 128, 256


Microcontroladores I                                              Prof. Luis Zurita
CÁLCULOS CON EL TMR0
       Sea un valor a cargar en el TMR0 de 100, un prescaler
         seleccionado de 1:32 y un oscilador XT. Determine el tiempo
         en que tardará el TMR0 en desbordarse.
       Solución: Sea XT = Frecuencia = 4 MHz, T = 0.25 μs.
           Temporización= 4*0.25 μs* (256 – 100) * 32 = 4.992 ms.

       Se desea saber: ¿Qué valor debemos cargar en el TMR0, si
         deseamos obtener una temporización de 10,24 ms, utilizando
         un preescaler de 128 y un cristal XT?
       Solución:                Temporizac ión               10,24ms
          (256 – N10) =                               =                    = 80
                          4  TOSC  Valorprees caler     4  250ns 128
            (256 – N10) = 80, despejando N10 = (256 – 80) = 176, el valor que
            debemos cargar en el TMR0 es 176, para que éste cuente desde 176
            hasta 256.




Microcontroladores I                                                       Prof. Luis Zurita
•    Elegir el TMR0, para generar un retraso de 50 ms utilizando un
            oscilador de 4 MHz.
            Solución: Sea Fosc= 4 MHz, T = 0.25 μs.

            (256 – N10) =         Temporización        =            50ms
                            4  TOSC  Valorpreescaler   4  250ns Valorpreescaler
       N10 = 256 - (50000/Valorpreescaler), supongamos que elegimos
          Preescaler 32, entonces tendremos=
           N10 = 256 - (50000/32) = 256 – 1562,5 = - 1306,5. Si da un
          número negativo, no es válido, por lo que debemos subir el valor
          del preescaler hasta que la resta sea positiva.
       Para un preescaler de 64, tendremos =
          N10 = 256 - (50000/64) = 256 – 781,25= - 525,25. Como es
          negativo, subimos el preescaler nuevamente.
       Para un preescaler de 128, tendremos =
          N10 = 256 - (50000/128) = 256 – 390,625= - 134,625. Como es
          negativo, subimos el preescaler nuevamente.
       Para un preescaler de 64, tendremos =
          N10 = 256 - (50000/256) = 256 – 195,3125= 60,69. Como es
          positivo tomaremos este preescaler.


Microcontroladores I                                                            Prof. Luis Zurita
Entonces se debe cargar 60,69, aproximado a 61 en el TMR0
         para que tarde en desbordarse=
       Temporización= 4*TOSC*ValorRealTMR0*ValorPreescaler,
         sustituyendo
       Temporización= 4 * 250 ns * (256 – 61 ) * 256 = 49.92 ms ≈ 50 ms

       • Para algunas temporizaciones el valor del preescaler puede
         variar, siempre y cuando la resta [Valor Real TMR0 = (28 – N10) =
         (256 – N10) ] sea positiva, por lo que puede darse cuenta de que
         no hay un solo resultado para los ejercicios. Sin embargo, lo que
         si debe cumplirse es que sea cualquiera que sean los valores que
         se tomen para los cálculos, estos deben de estar cercanos a la
         respuesta que se espera del temporizador que esté diseñando,
         comprobando los resultados.

       • Ejemplo. Diga ¿cuánto es la máxima temporización que se puede
         hallar con el TMR0? Asuma que se está trabajando con un XT.
         Solución: Tomamos el máximo factor de escala de división todos
         los estados que puede contar el TMR0:
          – Temporización= 4*0.25 μs*(256 )*256 = 65.536 ms.
          – Este es el máximo valor que podemos conseguir del TMR0.

Microcontroladores I                                                Prof. Luis Zurita
• ¿Cómo hacemos entonces para conseguir valores superiores a
        éste, tales como 0,5 s; 1 s; 2 s; entre otros?
         – Esto se puede arreglar si tenemos un contador de mayor
           número de bits. La solución está en extender el Timer0 con
           un registro (auxiliar) controlado por software.
         – Dicho registro (auxiliar) contará el número de interrupciones
           por desbordamiento que genera el Timer0, de forma de que
           éste pase por cero, cuando haya pasado el tiempo que
           estamos calculando.




Microcontroladores I                                               Prof. Luis Zurita
USO DE REGISTRO AUXILIAR
      Pasos:
      1. Escoger un valor para el prescaler.
         Un posible criterio es calcular todas las frecuencias de prescaler que
         podemos obtener con cada divisor posible. Las frecuencias sin decimales
         son interesantes al poder encontrar múltiplos de ellas a la salida del
         TMR0 con mayor facilidad. En general, la elección del valor del prescaler
         es empírica: depende del problema, la experiencia y sobre todo de la
         práctica.
      2. Determinar el valor del Registro Auxiliar, a partir del valor dado por
         el TMR0.
         Normalmente viene dado por un múltiplo de la frecuencia, asociada al
         tiempo calculado. Con un ejemplo entenderemos mejor lo que se desea
         plantear:
      Ejemplo: Determine los valores del TMR0 y del Registro Auxiliar para
      conseguir una temporización de 1 segundo. Utilice un oscilador XT.
          Solución: XT= Frecuencia = 4 MHz ; Tosc= 250 ns
      • Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que
         temporización, podemos aleatoria mente escogerlas, como en el ejemplo
         6. Evaluando cualquiera, cuya temporización del TMR0 se basó en 5 ms,
         escojamos el prescaler 128 y sustituyamos los valores en la ecuación
         principal:
          – Temporización= 4*250 ns*(256 - 217)*128 = 4.992 ms



Microcontroladores I                                                        Prof. Luis Zurita
CONTINUACIÓN DEL EJEMPLO ANTERIOR

      • Paso 2. ¿Qué valor debe de tener el registro auxiliar?
      a) Al tiempo de 4.992 ms, se asocia una frecuencia del TMR0 de =
                    1
                          = 200.3 Hz, redondeando, tomamos este múltiplo:
                 4.992 ms
           200, Así, tendremos entonces que si multiplicamos 200*4.992
          ms = 0.998 s, que es un valor bastante cercano a 1 segundo.
      b) La misma operación pero interpretada de una forma más sencilla
          es determinar cuantas veces necesitamos al tiempo calculado
          para lograr un segundo:
                                      1segundo
                                                 200.32
                                       4.992 ms
             La que usted entienda mejor es válida.
             Nuestro registro auxiliar debe ser de 200!!!
             Recuerde de que éste registro auxiliar no debe superar 255.
             Si supera este valor, se debe adicionar un nuevo registro
             auxiliar


Microcontroladores I                                                   Prof. Luis Zurita
CONFIGURACIÓN DEL TMR0

       • Para que opere como temporizador, el bit TOCS (del
         registro OPTION_REG) debe ser cero (0), el bit
         PSA= 0 y deben ser cargados los bits PS2 a PS0,
         según sea el preescaler a utilizar para lograr nuestra
         temporización.
       • Para que opere como contador, se usa una entrada de
         reloj externo en el TMR0 y se deben de cumplir
         ciertos requisitos para que el reloj externo pueda ser
         sincronizado con el reloj interno (TOSC). Además
         existe un retardo en el incremento real del TMR0,
         después de la sincronización. El bit TOCS= 1. Se debe
         seleccionar el tipo de flanco que producirá el
         incremento del TMR0 ( TOSE = 1 ó 0).

Microcontroladores I                                      Prof. Luis Zurita
REGISTRO OPTION_REG (Dirección 81H)



      •    bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el
           bit
             1: Desactivadas
             0: Activadas                                       PS2   PS1 PSO
      •    bit 6, INTEDG: Flanco activo para el control de
           interrupciones
             1: Con flanco Ascendente
             0: Con flanco Descendente
      •    bit 5, TOCS: Fuente de Reloj para TMR0
             1: Pulsos introducidos a través de RA4/T0CK1
                 (Contador)
             0: Pulsos de reloj interno Fosc/4 (Temporizador)
      •    bit 4, TOSE: Tipo de flanco en TOCK1
             1: Incremento de TMR0 cada flanco descendente
             0: Incremento de TMR0 cada flanco ascendente
      •    bit 3, PSA: Bit de asignación del prescaler divisor de
           frecuencia
             1: El divisor de frecuencia se asigna al WDT
             0: El divisor de frecuencia se asigna al TMR0
      •    bitS 2,1,0, PS2,PS1,PSO: Rango con el que actúa el
           divisor de frecuencia o preescaler usado en los cálculos



Microcontroladores I                                                            Prof. Luis Zurita
EJEMPLOS DE CONFIGURACIÓN
      •    Configure al PIC16F84 para que el temporizador TMR0, trabaje con los
           pulsos provenientes de un reloj externo, y el mismo cambie en el flanco
           de bajada de cada dos pulsos externos:




      • Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la
        frecuencia del mismo sea dividida por 32:




          ¿Cómo lo cargo al OPTION_REG?
          En el primer caso:                     En el segundo caso:
          movlw        b’xx11x001’               movlw   b’xx0x0100’
          movwf        OPTION_REG                movwf   OPTION_REG
          ¿Y los demás bits? = No importa lo que se cargue, si no se van
          a trabajar con ellos
Microcontroladores I                                                        Prof. Luis Zurita
DE LOS CÁLCULOS A LA PROGRAMACIÓN
       • Normalmente, se va a trabajar con el TMR0, para programarlo
          con un tiempo en particular para que se desborde y produzca una
          interrupción.
       • Esto hará que se entre a una subrutina de interrupción que se
          estudiará en las siguientes diapositivas, lo que permitirá ejecutar
          un programa principal, y cada cierto tiempo (cálculos), va a
          ejecutar una subrutina, regresando nuevamente al programa
          principal, desde donde se produjo la interrupción.
       • Para esto=
       1. Se deben hacer los cálculos.
       2. Se debe configurar el registro OPTION_REG, con el TMR0
           como temporizador y asignar el valor del prescaler que se ha
           utilizado en los cálculos.
       3. Programar lo que se desea realizar durante la rutina de
           interrupción por desborde del TMR0 y antes de salir de esta
           rutina, cargar el valor del TMR0 para que vuelva a tener la
           misma temporización.

Microcontroladores I                                                   Prof. Luis Zurita
Para que se produzca una interrupción cada 50 ms, se hacen los cálculos=
Temporización= 4 * 250 ns * (256 – 61 ) * 256 = 49.92 ms ≈ 50 ms
                                              ¿Qué valor se carga en el Prescaler?




                                               ¿Y qué valor se carga en el TMR0?




Microcontroladores I                                                       Prof. Luis Zurita
INTERRUPCIONES
      •    “Las interrupciones son desviaciones del flujo de control del programa
           originadas asíncronamente, por diversos sucesos que no se hallan bajo la
           supervisión de las instrucciones. Dichos sucesos pueden ser externos al
           sistema, como la generación de un flanco o nivel activo en una patilla del
           microcontrolador, o bien, internos, como el desbordamiento de un
           contador. Su comportamiento es similar al de la instrucción “call” de
           llamado a subrutina. Se detiene la ejecución del programa en curso, se
           salva la dirección actual del contador de programa (PC) en la pila (STACK)
           y se carga el PC con una dirección, que en el caso de una interrupción es
           una dirección reservada de la memoria de código, llamada vector de
           interrupción”. Parejo. Microcontroladores PIC. Pág. 117. 2da Edición.

      •    En el PIC 16F84, este vector de interrupción está ubicado en la posición
           04H, en donde comenzará la rutina de servicio de la interrupción. Ejemplo:
           org 00H      ; Vector de origen del programa
           goto INICIO ; salto a la rutina de programa principal
           org 04H      ; Vector de interrupción
           goto INTERR; salto a la rutina de interrupción.

      •    La idea de colocar una instrucción de salto incondicional, es la de trasladar
           el flujo del programa a la zona de memoria de código que contiene a la
           rutina de interrupción.

Microcontroladores I                                                            Prof. Luis Zurita
DIAGRAMA DE FLUJO DURANTE UNA INTERRUPCIÓN
             Programa normal
             Instrucción 1                  Rutina de Servicio de Interrupción

             Instrucción 2                  Instrucción 1

             Instrucción 3                  Instrucción 2

             …                              …
                                            …
             …
                                            …
             …
                                            RETFIE
             Instrucción 24
             Instrucción 25
             …                               Nota: Una Rutina de Servicio
             …                               de Interrupción puede ser
                                             igual de extensa e incluso
             Instrucción N                   más que el mismo programa
             Fin de programa                 principal.


Microcontroladores I                                                   Prof. Luis Zurita
DIAGRAMA DE
FLUJO RSI




Microcontroladores I   Prof. Luis Zurita
CAUSAS DE INTERRUPCIÓN
              1.       Activación del pin RB0/INT
              2.       Desbordamiento del TMR0
              3.       Cambio de estado de una de los 4 pines de más peso
                       (RB7:RB4) del puerto B
              4.       Finalización de la escritura en la EEPROM de datos

                               REGISTRO INTCON
      • Este registro se encuentra ubicado en la posición 0BH del banco
        0 de los registros de funciones especiales (SFR). A continuación
        se describirán cada uno de sus bits:




Microcontroladores I                                                        Prof. Luis Zurita
INTCON
         •    GIE: (Global Interrupt Enable), Permiso Global de Interrupciones
               1: Habilita todas las interrupciones, cuyos bits de permiso individuales
                  también las permitan
               0: Deshabilita todas las interrupciones
         •    EEIE: (EEPROM Interrupt Enable), Permiso de Interrupción por fin de
              escritura en la EEPROM
               1: Habilita la interrupción cuando termina la escritura de la EEPROM de
                  datos
               0: Deshabilita esta interrupción
         •    TOIE: (TMR0 Overflow Interrupt Enable), Permiso de interrupción
              por desborde del TMR0
               1: Habilita una interrupción por desborde del TMR0
               0: Deshabilita esta interrupción
         •    INTE: (Interrupt Enable RB0/INT), Permiso de interrupción por
              activación del pin RB0/INT
               1: Habilita la interrupción al activarse RB0/INT
               0: Deshabilita esta interrupción

Microcontroladores I                                                           Prof. Luis Zurita
INTCON
       •    RBIE: (RB Port Change Interrupt Enable), Permiso de interrupción por
            cambio de estado en RB7:RB4
             1: Habilita esta interrupción
             0: Deshabilita esta interrupción
       •    TOIF: (TMR0 Overflow Interrupt Flag), Señalizador de desborde del
            TMR0
             1: Ha ocurrido un desborde del TMR0
             0: No se ha desbordado el TMR0
       •    INTF: (RB0/INT Interrupt Flag), Señalizador de activación del pin
            RB0/INT
             1: Se ha activado RB0/INT
             0: No se ha activado RB0/INT
       •    RBIF: (RB Port Change Interrupt Flag), Señalizador de cambio de estado
            en RB7:RB4
             1: Pasa a 1 cuando cambia el estado de alguna de estas 4 líneas
             0: No ha cambiado el estado de RB7: RB4


Microcontroladores I                                                        Prof. Luis Zurita
• Habilite la interrupción por desborde del TMR0=
     movlw      b’10100000’
     movwf      INTCON
   • Habilite la interrupción por cambio de nivel en RB0/INT
     movlw      b’10010000’
     movwf      INTCON
   • Habilite las interrupciones por desborde del TMR0 y
     cambio de nivel en RB0/INT
     movlw      b’10110000’
     movwf      INTCON
Microcontroladores I                                   Prof. Luis Zurita
¿Cómo determinar la causa de una
                           interrupción?
       • Si se han activado dos o más causas de interrupción, como
         desborde del TMR0 y cambio de nivel en RB0/INT, cuando
         alguna de éstas ocurren, ellas van a la misma rutina de
         interrupción.
       • Ahora ¿cómo saber cuál es la causa?, mediante el testeo de
         los señalizadores o flags, recordando que se pondrán a nivel
         alto (1), cuando se haya activado la correspondiente.
       • Por lo tanto, con unas simples preguntas dentro de la rutina
         de servicio de interrupción, se determinará la causante:




Microcontroladores I                                            Prof. Luis Zurita
Ejemplo. 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          ¿RB0/INT?
                                          ¿INTF=1?
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       ¿RB4:RB7?
                                         ¿RBIF=1?
puerto A.



                                          ¿TMR0?
                                         ¿TOIF=1?




               Programa Principal                    RSI
Microcontroladores I                                       Prof. Luis Zurita
SALVANDO EL ENTORNO
           Salvar el entorno, se refiere a mantener el valor exacto que
           tienen los registros de trabajo STATUS y W, y cualquier otro de
           importancia, incluyendo los puertos que controlan a los
           actuadores, que no vaya a ser modificado dentro de la subrutina
           de servicio de interrupción.

      Para salvar el entorno cuando ocurre una interrupción se
         recomienda seguir los siguientes pasos:
          – Salvar a w y a STATUS.
          – Almacenar a w en un registro general llamado W_TEMP
          – Almacenar a STATUS en un registro general llamado
            STATUS_TEMP
          – Almacenar cualquier PortX que maneje actuadores
          – Se ejecuta la rutina de interrupción (queda expresada para
            efectos del ejemplo siguiente)
          – Restauramos a PortX
          – Restauramos a STATUS
          – Restauramos a w
      NOTA: Los registros generales W_TEMP, STATUS_TEMP, y el de
         puertos deben ser declarados al inicio del programa, para no
         generar errores.

Microcontroladores I                                                 Prof. Luis Zurita
SALVANDO EL ENTORNO
      ; Asuma que desea salvar el PORTB, durante una interrupción=


  ; **** Rutina para salvar el entorno ****
  PUSH movwf W_TEMP                  ; Salvamos w a este registro temporal
           movf     STATUS,0         ;
           movwf STATUS_TEMP ; Salvamos STATUS en STATUS_TEMP
           movf     PORTB,0
           movwf CopiaPORTB          ; Salvamos a PORTB
  RUT_INT
           ;Aquí estará la rutina de servicio de interrupción
           ;
  POP      movf     CopiaPORTB,0 ; Restauramos el PORTB a su valor antes de
           movwf PORTB               ; haber entrado a la rutina de interrupción
           movf     STATUS_TEMP,0 ; Movemos w al registro STATUS,
                                     ; retornando el
           movwf STATUS              ; valor original
           movf     W_TEMP,0         ; W_TEMP lo trasladamos a w
                                     ; retornando el valor original que tenía antes
                                     ; de entrar a la rutina de interrupción.


Microcontroladores I                                                        Prof. Luis Zurita
¿CUANDO UTILIZAR UNA
                           INTERRUPCIÓN?
         Una interrupción es muy importante cuando deseamos realizar
    una tarea que no dependa de una exploración constante del programa
    sobre la misma.
         También cuando deseamos que nuestro programa responda de
    forma inmediata y automática a determinados eventos.
    Ejemplo del uso de Interrupción:
  • En los sistemas de control, cuando se necesita un pulsador de parada
    de emergencia (PARE RB0/INT).
  • En el manejo de teclados, se recomienda su uso, ya que se puede
    meter al microcontrolador en un estado de reposo, ahorrando energía
    y esperando a que se pulse una tecla para iniciar una rutina de
    servicio (CLAVE).
  • Cuando deseamos que el programa haga una tarea cada cierto tiempo,
    independientemente de lo que se encuentre haciendo en el programa
    principal. (DESBORDE DEL TMR0).



Microcontroladores I                                            Prof. Luis Zurita

More Related Content

What's hot

Amplificadores multiplicadores
Amplificadores multiplicadoresAmplificadores multiplicadores
Amplificadores multiplicadoresZaiida Lozano
 
1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfetjosefer28051989
 
3.PCM Digitalizacion de señal analogica
3.PCM Digitalizacion de señal analogica3.PCM Digitalizacion de señal analogica
3.PCM Digitalizacion de señal analogicaEdison Coimbra G.
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fetVelmuz Buzz
 
Amplificador de instrumentación
Amplificador de instrumentaciónAmplificador de instrumentación
Amplificador de instrumentaciónSaul Perez
 
Amplificador en Base Comun y Colector Comun
Amplificador en Base Comun y Colector ComunAmplificador en Base Comun y Colector Comun
Amplificador en Base Comun y Colector Comuniscped
 
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
 
Latches y flip flops
Latches y flip flopsLatches y flip flops
Latches y flip flopsJimmy Osores
 
Modulación por desplazamiento de fase (psk) exposicion
Modulación por desplazamiento de fase (psk) exposicionModulación por desplazamiento de fase (psk) exposicion
Modulación por desplazamiento de fase (psk) exposicionAlieth Guevara
 
Amplificador Realimentado (Entrada, Salida y Ganancia)
Amplificador Realimentado (Entrada, Salida y Ganancia)Amplificador Realimentado (Entrada, Salida y Ganancia)
Amplificador Realimentado (Entrada, Salida y Ganancia)David Díaz
 

What's hot (20)

Amplificadores multiplicadores
Amplificadores multiplicadoresAmplificadores multiplicadores
Amplificadores multiplicadores
 
Practica 7 Flip Flop
Practica 7 Flip FlopPractica 7 Flip Flop
Practica 7 Flip Flop
 
Sumador\Restador
Sumador\RestadorSumador\Restador
Sumador\Restador
 
1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet1.3.1 polarizacion del jfet
1.3.1 polarizacion del jfet
 
3.PCM Digitalizacion de señal analogica
3.PCM Digitalizacion de señal analogica3.PCM Digitalizacion de señal analogica
3.PCM Digitalizacion de señal analogica
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fet
 
Circuitos moduladores y receptores de am
Circuitos moduladores y receptores de amCircuitos moduladores y receptores de am
Circuitos moduladores y receptores de am
 
Practica0,1,2,3,4
Practica0,1,2,3,4Practica0,1,2,3,4
Practica0,1,2,3,4
 
Amplificador de instrumentación
Amplificador de instrumentaciónAmplificador de instrumentación
Amplificador de instrumentación
 
Practica Filtro pasa bajos
Practica Filtro pasa bajosPractica Filtro pasa bajos
Practica Filtro pasa bajos
 
Amplificador Operacional Lab Nº4
Amplificador Operacional Lab Nº4Amplificador Operacional Lab Nº4
Amplificador Operacional Lab Nº4
 
Amplificador en Base Comun y Colector Comun
Amplificador en Base Comun y Colector ComunAmplificador en Base Comun y Colector Comun
Amplificador en Base Comun y Colector Comun
 
Timer0 PIC16F84A
Timer0 PIC16F84ATimer0 PIC16F84A
Timer0 PIC16F84A
 
Pic retardos por software
Pic retardos por softwarePic retardos por software
Pic retardos por software
 
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
 
Latches y flip flops
Latches y flip flopsLatches y flip flops
Latches y flip flops
 
Timer 0 - Pic16F877A
Timer 0 - Pic16F877ATimer 0 - Pic16F877A
Timer 0 - Pic16F877A
 
Modulación por desplazamiento de fase (psk) exposicion
Modulación por desplazamiento de fase (psk) exposicionModulación por desplazamiento de fase (psk) exposicion
Modulación por desplazamiento de fase (psk) exposicion
 
Carta de Smith y Ejemplos
Carta de Smith y EjemplosCarta de Smith y Ejemplos
Carta de Smith y Ejemplos
 
Amplificador Realimentado (Entrada, Salida y Ganancia)
Amplificador Realimentado (Entrada, Salida y Ganancia)Amplificador Realimentado (Entrada, Salida y Ganancia)
Amplificador Realimentado (Entrada, Salida y Ganancia)
 

Viewers also liked (7)

4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadores
 
Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887
 
Conexiones del PIC16F887
Conexiones del PIC16F887Conexiones del PIC16F887
Conexiones del PIC16F887
 
Uso del timer0 para el pic 16 f877a con el compilador hi tech
Uso del timer0 para el pic 16 f877a con el compilador hi techUso del timer0 para el pic 16 f877a con el compilador hi tech
Uso del timer0 para el pic 16 f877a con el compilador hi tech
 
Timer0
Timer0Timer0
Timer0
 
Control PID de un levitador magnético
Control PID de un levitador magnéticoControl PID de un levitador magnético
Control PID de un levitador magnético
 
GPRS - EDGE
GPRS - EDGEGPRS - EDGE
GPRS - EDGE
 

Similar to Guía rápida tmr0 e interrupciones

Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4Luis Zurita
 
Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 electro_pic
 
Lab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdfLab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdfsopitamani1
 
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 de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Hamiltonn Casallas
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"Diego Rojas Ruiz
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesiDavid Narváez
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...SANTIAGO PABLO ALBERTO
 

Similar to Guía rápida tmr0 e interrupciones (20)

Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4
 
Temporizador timer0
Temporizador timer0Temporizador timer0
Temporizador timer0
 
Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0
 
06.Temporizadores
06.Temporizadores06.Temporizadores
06.Temporizadores
 
UNIDAD IV
UNIDAD IVUNIDAD IV
UNIDAD IV
 
Clase Timer 1
Clase Timer 1Clase Timer 1
Clase Timer 1
 
Lab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdfLab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdf
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
 
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
 
Timers
TimersTimers
Timers
 
Caso timers
Caso timersCaso timers
Caso timers
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
 
TEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDFTEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDF
 
PRÁCTICA 2 ENSAMBLADOR - JESÚS ASMETH PÉREZ CAMACHO
PRÁCTICA 2 ENSAMBLADOR - JESÚS ASMETH PÉREZ CAMACHOPRÁCTICA 2 ENSAMBLADOR - JESÚS ASMETH PÉREZ CAMACHO
PRÁCTICA 2 ENSAMBLADOR - JESÚS ASMETH PÉREZ CAMACHO
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"
 
El microcontrolador pic
El microcontrolador picEl microcontrolador pic
El microcontrolador pic
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
In terrupciones pic
In terrupciones picIn terrupciones pic
In terrupciones pic
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
 

More from 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
 

More from 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 2
Micro2 tema 2Micro2 tema 2
Micro2 tema 2
 
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
 

Guía rápida tmr0 e interrupciones

  • 1. GUÍA RÁPIDA TIMER 0 E INTERRUPCIONES PROF. LUIS ZURITA Microcontroladores I
  • 2. REGISTROS ASOCIADOS AL TEMPORIZADOR TMR0 • TMR0: Registro de 8 bits de lectura/escritura • OPTION_REG: Configura al TMR0 para que trabaje como temporizador ó contador y asigna el valor al prescaler • INTCON: Da información mediante el bit “TOIF” cuando el TMR0 se ha desbordado. • TRISA (PUERTO A): Permite el ingreso de pulsos cuando el TMR0 está configurado como contador por RA4/TOCKI Microcontroladores I Prof. Luis Zurita
  • 3. REGISTRO TMR0 • Es el corazón del módulo Timer0. Puede ser leído o escrito en cualquier momento. El TMR0 se incrementará automáticamente por cada ciclo de instrucción y contará desde 0 (00H) hasta 255 (FFH) (Contador de 8 bits). • Ejemplo. Escribir 100 en el TMR0= movlw .100 movwf TMR0 • Leer el valor del TMR0 y mostrarlo en el Puerto B= movf TMR0,0 movwf PORTB Microcontroladores I Prof. Luis Zurita
  • 4. ¿CÓMO CUENTA EL TMR0? 00H FFH El TMR0 cuenta exclusivamente de forma ascendente, nunca descendente. ¿Quién incrementa al TMR0? 00H Cada instrucción que se ejecuta en un programa se encarga de incrementarlo (28 – N10) 00H FFH Si el TMR0 se carga con un valor, éste comenzará a contar desde el Valor cargado valor cargado hasta que se En el TMR0 desborda (cuando pasa a 00H) 00H Microcontroladores I Prof. Luis Zurita
  • 5. ¿QUÉ ES EL PRESCALER? • Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos, como se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc., genera una nueva señal de menor frecuencia a la salida, que será la señal de reloj de entrada al registro TMR0. • “Ralentiza” señales de entrada demasiado rápidas para nuestros propósitos. • También existe un postescaler, asociado al perro guardián WDT (Watch Dog Timer) del microcontrolador, pero en este caso recibe el nombre de postcaler ya que se usa a la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al WDT. El preescaler es transparente para el programador, no se puede leer ni escribir sobre él, pero se puede seleccionar por software, como ya se ha dicho, mediante el registro OPTION. • Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una secuencia de instrucciones específicas cuando se cambia la asignación del prescaler del TMR0 al WDT. Esta secuencia debe ser seguida, aún cuando el WDT esté inactivo. Microcontroladores I Prof. Luis Zurita
  • 6. CÁLCULOS CON EL TMR0 • Cuando se carga en el registro TMR0 un valor XX, éste contará: (256 – XX) impulsos y el tiempo que tarda en hacerlo viene dado por la expresión: Temporización= 4*TOSC*ValorRealTMR0*ValorPreescaler  TOSC = período de oscilación = 1 / FOSC  FOSC = viene dado por el cristal de cuarzo o resonador que se esté utilizando. Los típicos son=  XT = 4 MHz  HS= 20 MHz  Valor Real TMR0 = (28 – N10) = (256 – N10)  N10= Valor a cargar en el TMR0  ValorPreescaler = puede tomar uno de estos valores=  2 , 4, 8, 16, 32, 64, 128, 256 Microcontroladores I Prof. Luis Zurita
  • 7. CÁLCULOS CON EL TMR0 Sea un valor a cargar en el TMR0 de 100, un prescaler seleccionado de 1:32 y un oscilador XT. Determine el tiempo en que tardará el TMR0 en desbordarse. Solución: Sea XT = Frecuencia = 4 MHz, T = 0.25 μs. Temporización= 4*0.25 μs* (256 – 100) * 32 = 4.992 ms. Se desea saber: ¿Qué valor debemos cargar en el TMR0, si deseamos obtener una temporización de 10,24 ms, utilizando un preescaler de 128 y un cristal XT? Solución: Temporizac ión 10,24ms (256 – N10) = = = 80 4  TOSC  Valorprees caler 4  250ns 128 (256 – N10) = 80, despejando N10 = (256 – 80) = 176, el valor que debemos cargar en el TMR0 es 176, para que éste cuente desde 176 hasta 256. Microcontroladores I Prof. Luis Zurita
  • 8. Elegir el TMR0, para generar un retraso de 50 ms utilizando un oscilador de 4 MHz. Solución: Sea Fosc= 4 MHz, T = 0.25 μs. (256 – N10) = Temporización = 50ms 4  TOSC  Valorpreescaler 4  250ns Valorpreescaler N10 = 256 - (50000/Valorpreescaler), supongamos que elegimos Preescaler 32, entonces tendremos= N10 = 256 - (50000/32) = 256 – 1562,5 = - 1306,5. Si da un número negativo, no es válido, por lo que debemos subir el valor del preescaler hasta que la resta sea positiva. Para un preescaler de 64, tendremos = N10 = 256 - (50000/64) = 256 – 781,25= - 525,25. Como es negativo, subimos el preescaler nuevamente. Para un preescaler de 128, tendremos = N10 = 256 - (50000/128) = 256 – 390,625= - 134,625. Como es negativo, subimos el preescaler nuevamente. Para un preescaler de 64, tendremos = N10 = 256 - (50000/256) = 256 – 195,3125= 60,69. Como es positivo tomaremos este preescaler. Microcontroladores I Prof. Luis Zurita
  • 9. Entonces se debe cargar 60,69, aproximado a 61 en el TMR0 para que tarde en desbordarse= Temporización= 4*TOSC*ValorRealTMR0*ValorPreescaler, sustituyendo Temporización= 4 * 250 ns * (256 – 61 ) * 256 = 49.92 ms ≈ 50 ms • Para algunas temporizaciones el valor del preescaler puede variar, siempre y cuando la resta [Valor Real TMR0 = (28 – N10) = (256 – N10) ] sea positiva, por lo que puede darse cuenta de que no hay un solo resultado para los ejercicios. Sin embargo, lo que si debe cumplirse es que sea cualquiera que sean los valores que se tomen para los cálculos, estos deben de estar cercanos a la respuesta que se espera del temporizador que esté diseñando, comprobando los resultados. • Ejemplo. Diga ¿cuánto es la máxima temporización que se puede hallar con el TMR0? Asuma que se está trabajando con un XT. Solución: Tomamos el máximo factor de escala de división todos los estados que puede contar el TMR0: – Temporización= 4*0.25 μs*(256 )*256 = 65.536 ms. – Este es el máximo valor que podemos conseguir del TMR0. Microcontroladores I Prof. Luis Zurita
  • 10. • ¿Cómo hacemos entonces para conseguir valores superiores a éste, tales como 0,5 s; 1 s; 2 s; entre otros? – Esto se puede arreglar si tenemos un contador de mayor número de bits. La solución está en extender el Timer0 con un registro (auxiliar) controlado por software. – Dicho registro (auxiliar) contará el número de interrupciones por desbordamiento que genera el Timer0, de forma de que éste pase por cero, cuando haya pasado el tiempo que estamos calculando. Microcontroladores I Prof. Luis Zurita
  • 11. USO DE REGISTRO AUXILIAR Pasos: 1. Escoger un valor para el prescaler. Un posible criterio es calcular todas las frecuencias de prescaler que podemos obtener con cada divisor posible. Las frecuencias sin decimales son interesantes al poder encontrar múltiplos de ellas a la salida del TMR0 con mayor facilidad. En general, la elección del valor del prescaler es empírica: depende del problema, la experiencia y sobre todo de la práctica. 2. Determinar el valor del Registro Auxiliar, a partir del valor dado por el TMR0. Normalmente viene dado por un múltiplo de la frecuencia, asociada al tiempo calculado. Con un ejemplo entenderemos mejor lo que se desea plantear: Ejemplo: Determine los valores del TMR0 y del Registro Auxiliar para conseguir una temporización de 1 segundo. Utilice un oscilador XT. Solución: XT= Frecuencia = 4 MHz ; Tosc= 250 ns • Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que temporización, podemos aleatoria mente escogerlas, como en el ejemplo 6. Evaluando cualquiera, cuya temporización del TMR0 se basó en 5 ms, escojamos el prescaler 128 y sustituyamos los valores en la ecuación principal: – Temporización= 4*250 ns*(256 - 217)*128 = 4.992 ms Microcontroladores I Prof. Luis Zurita
  • 12. CONTINUACIÓN DEL EJEMPLO ANTERIOR • Paso 2. ¿Qué valor debe de tener el registro auxiliar? a) Al tiempo de 4.992 ms, se asocia una frecuencia del TMR0 de = 1 = 200.3 Hz, redondeando, tomamos este múltiplo: 4.992 ms 200, Así, tendremos entonces que si multiplicamos 200*4.992 ms = 0.998 s, que es un valor bastante cercano a 1 segundo. b) La misma operación pero interpretada de una forma más sencilla es determinar cuantas veces necesitamos al tiempo calculado para lograr un segundo: 1segundo  200.32 4.992 ms La que usted entienda mejor es válida. Nuestro registro auxiliar debe ser de 200!!! Recuerde de que éste registro auxiliar no debe superar 255. Si supera este valor, se debe adicionar un nuevo registro auxiliar Microcontroladores I Prof. Luis Zurita
  • 13. CONFIGURACIÓN DEL TMR0 • Para que opere como temporizador, el bit TOCS (del registro OPTION_REG) debe ser cero (0), el bit PSA= 0 y deben ser cargados los bits PS2 a PS0, según sea el preescaler a utilizar para lograr nuestra temporización. • Para que opere como contador, se usa una entrada de reloj externo en el TMR0 y se deben de cumplir ciertos requisitos para que el reloj externo pueda ser sincronizado con el reloj interno (TOSC). Además existe un retardo en el incremento real del TMR0, después de la sincronización. El bit TOCS= 1. Se debe seleccionar el tipo de flanco que producirá el incremento del TMR0 ( TOSE = 1 ó 0). Microcontroladores I Prof. Luis Zurita
  • 14. REGISTRO OPTION_REG (Dirección 81H) • bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit 1: Desactivadas 0: Activadas PS2 PS1 PSO • bit 6, INTEDG: Flanco activo para el control de interrupciones 1: Con flanco Ascendente 0: Con flanco Descendente • bit 5, TOCS: Fuente de Reloj para TMR0 1: Pulsos introducidos a través de RA4/T0CK1 (Contador) 0: Pulsos de reloj interno Fosc/4 (Temporizador) • bit 4, TOSE: Tipo de flanco en TOCK1 1: Incremento de TMR0 cada flanco descendente 0: Incremento de TMR0 cada flanco ascendente • bit 3, PSA: Bit de asignación del prescaler divisor de frecuencia 1: El divisor de frecuencia se asigna al WDT 0: El divisor de frecuencia se asigna al TMR0 • bitS 2,1,0, PS2,PS1,PSO: Rango con el que actúa el divisor de frecuencia o preescaler usado en los cálculos Microcontroladores I Prof. Luis Zurita
  • 15. EJEMPLOS DE CONFIGURACIÓN • Configure al PIC16F84 para que el temporizador TMR0, trabaje con los pulsos provenientes de un reloj externo, y el mismo cambie en el flanco de bajada de cada dos pulsos externos: • Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la frecuencia del mismo sea dividida por 32: ¿Cómo lo cargo al OPTION_REG? En el primer caso: En el segundo caso: movlw b’xx11x001’ movlw b’xx0x0100’ movwf OPTION_REG movwf OPTION_REG ¿Y los demás bits? = No importa lo que se cargue, si no se van a trabajar con ellos Microcontroladores I Prof. Luis Zurita
  • 16. DE LOS CÁLCULOS A LA PROGRAMACIÓN • Normalmente, se va a trabajar con el TMR0, para programarlo con un tiempo en particular para que se desborde y produzca una interrupción. • Esto hará que se entre a una subrutina de interrupción que se estudiará en las siguientes diapositivas, lo que permitirá ejecutar un programa principal, y cada cierto tiempo (cálculos), va a ejecutar una subrutina, regresando nuevamente al programa principal, desde donde se produjo la interrupción. • Para esto= 1. Se deben hacer los cálculos. 2. Se debe configurar el registro OPTION_REG, con el TMR0 como temporizador y asignar el valor del prescaler que se ha utilizado en los cálculos. 3. Programar lo que se desea realizar durante la rutina de interrupción por desborde del TMR0 y antes de salir de esta rutina, cargar el valor del TMR0 para que vuelva a tener la misma temporización. Microcontroladores I Prof. Luis Zurita
  • 17. Para que se produzca una interrupción cada 50 ms, se hacen los cálculos= Temporización= 4 * 250 ns * (256 – 61 ) * 256 = 49.92 ms ≈ 50 ms ¿Qué valor se carga en el Prescaler? ¿Y qué valor se carga en el TMR0? Microcontroladores I Prof. Luis Zurita
  • 18. INTERRUPCIONES • “Las interrupciones son desviaciones del flujo de control del programa originadas asíncronamente, por diversos sucesos que no se hallan bajo la supervisión de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generación de un flanco o nivel activo en una patilla del microcontrolador, o bien, internos, como el desbordamiento de un contador. Su comportamiento es similar al de la instrucción “call” de llamado a subrutina. Se detiene la ejecución del programa en curso, se salva la dirección actual del contador de programa (PC) en la pila (STACK) y se carga el PC con una dirección, que en el caso de una interrupción es una dirección reservada de la memoria de código, llamada vector de interrupción”. Parejo. Microcontroladores PIC. Pág. 117. 2da Edición. • En el PIC 16F84, este vector de interrupción está ubicado en la posición 04H, en donde comenzará la rutina de servicio de la interrupción. Ejemplo: org 00H ; Vector de origen del programa goto INICIO ; salto a la rutina de programa principal org 04H ; Vector de interrupción goto INTERR; salto a la rutina de interrupción. • La idea de colocar una instrucción de salto incondicional, es la de trasladar el flujo del programa a la zona de memoria de código que contiene a la rutina de interrupción. Microcontroladores I Prof. Luis Zurita
  • 19. DIAGRAMA DE FLUJO DURANTE UNA INTERRUPCIÓN Programa normal Instrucción 1 Rutina de Servicio de Interrupción Instrucción 2 Instrucción 1 Instrucción 3 Instrucción 2 … … … … … … RETFIE Instrucción 24 Instrucción 25 … Nota: Una Rutina de Servicio … de Interrupción puede ser igual de extensa e incluso Instrucción N más que el mismo programa Fin de programa principal. Microcontroladores I Prof. Luis Zurita
  • 21. CAUSAS DE INTERRUPCIÓN 1. Activación del pin RB0/INT 2. Desbordamiento del TMR0 3. Cambio de estado de una de los 4 pines de más peso (RB7:RB4) del puerto B 4. Finalización de la escritura en la EEPROM de datos REGISTRO INTCON • Este registro se encuentra ubicado en la posición 0BH del banco 0 de los registros de funciones especiales (SFR). A continuación se describirán cada uno de sus bits: Microcontroladores I Prof. Luis Zurita
  • 22. INTCON • GIE: (Global Interrupt Enable), Permiso Global de Interrupciones 1: Habilita todas las interrupciones, cuyos bits de permiso individuales también las permitan 0: Deshabilita todas las interrupciones • EEIE: (EEPROM Interrupt Enable), Permiso de Interrupción por fin de escritura en la EEPROM 1: Habilita la interrupción cuando termina la escritura de la EEPROM de datos 0: Deshabilita esta interrupción • TOIE: (TMR0 Overflow Interrupt Enable), Permiso de interrupción por desborde del TMR0 1: Habilita una interrupción por desborde del TMR0 0: Deshabilita esta interrupción • INTE: (Interrupt Enable RB0/INT), Permiso de interrupción por activación del pin RB0/INT 1: Habilita la interrupción al activarse RB0/INT 0: Deshabilita esta interrupción Microcontroladores I Prof. Luis Zurita
  • 23. INTCON • RBIE: (RB Port Change Interrupt Enable), Permiso de interrupción por cambio de estado en RB7:RB4 1: Habilita esta interrupción 0: Deshabilita esta interrupción • TOIF: (TMR0 Overflow Interrupt Flag), Señalizador de desborde del TMR0 1: Ha ocurrido un desborde del TMR0 0: No se ha desbordado el TMR0 • INTF: (RB0/INT Interrupt Flag), Señalizador de activación del pin RB0/INT 1: Se ha activado RB0/INT 0: No se ha activado RB0/INT • RBIF: (RB Port Change Interrupt Flag), Señalizador de cambio de estado en RB7:RB4 1: Pasa a 1 cuando cambia el estado de alguna de estas 4 líneas 0: No ha cambiado el estado de RB7: RB4 Microcontroladores I Prof. Luis Zurita
  • 24. • Habilite la interrupción por desborde del TMR0= movlw b’10100000’ movwf INTCON • Habilite la interrupción por cambio de nivel en RB0/INT movlw b’10010000’ movwf INTCON • Habilite las interrupciones por desborde del TMR0 y cambio de nivel en RB0/INT movlw b’10110000’ movwf INTCON Microcontroladores I Prof. Luis Zurita
  • 25. ¿Cómo determinar la causa de una interrupción? • Si se han activado dos o más causas de interrupción, como desborde del TMR0 y cambio de nivel en RB0/INT, cuando alguna de éstas ocurren, ellas van a la misma rutina de interrupción. • Ahora ¿cómo saber cuál es la causa?, mediante el testeo de los señalizadores o flags, recordando que se pondrán a nivel alto (1), cuando se haya activado la correspondiente. • Por lo tanto, con unas simples preguntas dentro de la rutina de servicio de interrupción, se determinará la causante: Microcontroladores I Prof. Luis Zurita
  • 26. Ejemplo. 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 ¿RB0/INT? ¿INTF=1? 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 ¿RB4:RB7? ¿RBIF=1? puerto A. ¿TMR0? ¿TOIF=1? Programa Principal RSI Microcontroladores I Prof. Luis Zurita
  • 27. SALVANDO EL ENTORNO Salvar el entorno, se refiere a mantener el valor exacto que tienen los registros de trabajo STATUS y W, y cualquier otro de importancia, incluyendo los puertos que controlan a los actuadores, que no vaya a ser modificado dentro de la subrutina de servicio de interrupción. Para salvar el entorno cuando ocurre una interrupción se recomienda seguir los siguientes pasos: – Salvar a w y a STATUS. – Almacenar a w en un registro general llamado W_TEMP – Almacenar a STATUS en un registro general llamado STATUS_TEMP – Almacenar cualquier PortX que maneje actuadores – Se ejecuta la rutina de interrupción (queda expresada para efectos del ejemplo siguiente) – Restauramos a PortX – Restauramos a STATUS – Restauramos a w NOTA: Los registros generales W_TEMP, STATUS_TEMP, y el de puertos deben ser declarados al inicio del programa, para no generar errores. Microcontroladores I Prof. Luis Zurita
  • 28. SALVANDO EL ENTORNO ; Asuma que desea salvar el PORTB, durante una interrupción= ; **** Rutina para salvar el entorno **** PUSH movwf W_TEMP ; Salvamos w a este registro temporal movf STATUS,0 ; movwf STATUS_TEMP ; Salvamos STATUS en STATUS_TEMP movf PORTB,0 movwf CopiaPORTB ; Salvamos a PORTB RUT_INT ;Aquí estará la rutina de servicio de interrupción ; POP movf CopiaPORTB,0 ; Restauramos el PORTB a su valor antes de movwf PORTB ; haber entrado a la rutina de interrupción movf STATUS_TEMP,0 ; Movemos w al registro STATUS, ; retornando el movwf STATUS ; valor original movf W_TEMP,0 ; W_TEMP lo trasladamos a w ; retornando el valor original que tenía antes ; de entrar a la rutina de interrupción. Microcontroladores I Prof. Luis Zurita
  • 29. ¿CUANDO UTILIZAR UNA INTERRUPCIÓN? Una interrupción es muy importante cuando deseamos realizar una tarea que no dependa de una exploración constante del programa sobre la misma. También cuando deseamos que nuestro programa responda de forma inmediata y automática a determinados eventos. Ejemplo del uso de Interrupción: • En los sistemas de control, cuando se necesita un pulsador de parada de emergencia (PARE RB0/INT). • En el manejo de teclados, se recomienda su uso, ya que se puede meter al microcontrolador en un estado de reposo, ahorrando energía y esperando a que se pulse una tecla para iniciar una rutina de servicio (CLAVE). • Cuando deseamos que el programa haga una tarea cada cierto tiempo, independientemente de lo que se encuentre haciendo en el programa principal. (DESBORDE DEL TMR0). Microcontroladores I Prof. Luis Zurita