SlideShare una empresa de Scribd logo
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, de uno en uno,
         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.
      • 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.
                                  Temporización                     50ms
            (256 – N10) =                              =
                            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.




                       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.
Microcontroladores I                                                   Prof. Luis Zurita
USO DE REGISTRO AUXILIAR

      Pasos:
      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?
             ¿cuantas veces necesitamos al tiempo calculado para lograr un
             segundo?
                          1segundo
                                     200.32
                           4.992 ms
             Nuestro registro auxiliar debe ser de 200=

                       1segundo  200.32 * 4.992 ms

             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
•    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                    PS2 PS1   PSO
      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 un PIC 16F8XX, 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
         Programa normal INTERRUPCIÓN
         Instrucción 1
                           Rutina de Servicio de Interrupción
         Instrucción 2
                           (RSI)
         Instrucción 3     Instrucción 1
         …                 Instrucción 2
         …                 …
         …                 …

         Instrucción 24    …
                           RETFIE
         Instrucción 25
         …                 Nota: Una Rutina de Servicio
                           de Interrupción puede ser
         …                 igual de extensa e incluso más
         Instrucción N     que    el  mismo     programa
                           principal.
         Fin de programa
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 (RSI).
       • 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
SALVANDO/RESTAURANDO EL ENTORNO
           Salvar y restaurar 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 y luego se restauran
           al salir de esta.

      Para salvar y restaurar 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/RESTAURANDO 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
Estructura típica




Microcontroladores I      Prof. Luis Zurita
Estructura típica




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
¿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).
  • 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).
  • 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).


Microcontroladores I                                       Prof. Luis Zurita

Más contenido relacionado

La actualidad más candente

Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E Interrupcion
Luis Zurita
 
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
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
Juan Navarrete Guzman
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2Luis Zurita
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
Percy Julio Chambi Pacco
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4Luis Zurita
 
Registros del Pic 16F84
Registros del Pic 16F84Registros del Pic 16F84
Registros del Pic 16F84
Ashley Stronghold Witwicky
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"
Diego Rojas Ruiz
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltos
marco calderon layme
 
Módulos ccp pic 16f887
Módulos ccp pic 16f887Módulos ccp pic 16f887
Módulos ccp pic 16f887
whendygarcia
 
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
Eduardo Henriquez
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
Fernando Aparicio Urbano Molano
 
Manual Pic16 F87 X
Manual Pic16 F87 XManual Pic16 F87 X
Manual Pic16 F87 X
Luis Zurita
 
Timer 0 - Pic16F877A
Timer 0 - Pic16F877ATimer 0 - Pic16F877A
Timer 0 - Pic16F877A
Fernando Aparicio Urbano Molano
 
Control digital: Retenedor de orden cero y uno
Control digital: Retenedor de orden cero y uno Control digital: Retenedor de orden cero y uno
Control digital: Retenedor de orden cero y uno
SANTIAGO PABLO ALBERTO
 
Familias Lógicas
Familias Lógicas Familias Lógicas
Familias Lógicas
Juan Francisco Gaspar Chiquito
 

La actualidad más candente (20)

Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E Interrupcion
 
Pic retardos por software
Pic retardos por softwarePic retardos por software
Pic retardos por software
 
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
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
 
Registros del Pic 16F84
Registros del Pic 16F84Registros del Pic 16F84
Registros del Pic 16F84
 
TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"TIMERS&TEMPORIZADORES EN "C"
TIMERS&TEMPORIZADORES EN "C"
 
Microcontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltosMicrocontroladores - Configuración de puertos, bucles y saltos
Microcontroladores - Configuración de puertos, bucles y saltos
 
Módulos ccp pic 16f887
Módulos ccp pic 16f887Módulos ccp pic 16f887
Módulos ccp pic 16f887
 
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
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
 
Temporizador timer0
Temporizador timer0Temporizador timer0
Temporizador timer0
 
Manual Pic16 F87 X
Manual Pic16 F87 XManual Pic16 F87 X
Manual Pic16 F87 X
 
Timer 0 - Pic16F877A
Timer 0 - Pic16F877ATimer 0 - Pic16F877A
Timer 0 - Pic16F877A
 
Familias lógicas digitales
Familias lógicas digitalesFamilias lógicas digitales
Familias lógicas digitales
 
Control digital: Retenedor de orden cero y uno
Control digital: Retenedor de orden cero y uno Control digital: Retenedor de orden cero y uno
Control digital: Retenedor de orden cero y uno
 
Familias Lógicas
Familias Lógicas Familias Lógicas
Familias Lógicas
 

Destacado

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
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadoresDavid Narváez
 
Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4
Luis Zurita
 
Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887
Fernando Aparicio Urbano Molano
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iycLuis Zurita
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronicaLuis Zurita
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013Luis Zurita
 
Presentacion proyecto final micro2
Presentacion proyecto final micro2Presentacion proyecto final micro2
Presentacion proyecto final micro2Luis Zurita
 
Aprendizaje Significativo
Aprendizaje SignificativoAprendizaje Significativo
Aprendizaje SignificativoLuis Zurita
 
Plan De Evaluacion
Plan De EvaluacionPlan De Evaluacion
Plan De EvaluacionLuis Zurita
 
Curso Micro Tema 3 2
Curso Micro Tema 3 2Curso Micro Tema 3 2
Curso Micro Tema 3 2
Luis Zurita
 
Wbt
WbtWbt
Curso Micro Tema 2
Curso Micro Tema 2Curso Micro Tema 2
Curso Micro Tema 2
Luis Zurita
 

Destacado (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
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadores
 
Curso Micro Tema 4
Curso Micro Tema 4Curso Micro Tema 4
Curso Micro Tema 4
 
Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887Modulo Timer 0 del PIC16F887
Modulo Timer 0 del PIC16F887
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iyc
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronica
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013
 
Bolascriollas
BolascriollasBolascriollas
Bolascriollas
 
Presentacion proyecto final micro2
Presentacion proyecto final micro2Presentacion proyecto final micro2
Presentacion proyecto final micro2
 
Tema3 Microii
Tema3 MicroiiTema3 Microii
Tema3 Microii
 
Clase 5 cdii
Clase 5 cdiiClase 5 cdii
Clase 5 cdii
 
Aprendizaje Significativo
Aprendizaje SignificativoAprendizaje Significativo
Aprendizaje Significativo
 
Clase 4 cdii
Clase 4 cdiiClase 4 cdii
Clase 4 cdii
 
Clase 3 cdii
Clase 3 cdiiClase 3 cdii
Clase 3 cdii
 
Plan De Evaluacion
Plan De EvaluacionPlan De Evaluacion
Plan De Evaluacion
 
Clase 4 pro
Clase 4 proClase 4 pro
Clase 4 pro
 
Clase 5 cdii
Clase 5 cdiiClase 5 cdii
Clase 5 cdii
 
Curso Micro Tema 3 2
Curso Micro Tema 3 2Curso Micro Tema 3 2
Curso Micro Tema 3 2
 
Wbt
WbtWbt
Wbt
 
Curso Micro Tema 2
Curso Micro Tema 2Curso Micro Tema 2
Curso Micro Tema 2
 

Similar a Guía rápida tmr0 e interrupciones

Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 electro_pic
 
Clase Timer 1
Clase Timer 1Clase Timer 1
Lab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdfLab# 2 - Temporizador.pdf
Lab# 2 - Temporizador.pdf
sopitamani1
 
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
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
Luis Zurita
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
David Narváez
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05
Hamiltonn Casallas
 
Pwm
PwmPwm
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
 
El microcontrolador pic
El microcontrolador picEl microcontrolador pic
El microcontrolador pic
Victor Fernando Monroy Dipp
 
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
Instituto Tecnológico de Tuxtla Gutiérrez
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
Hamiltonn Casallas
 
TEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDFTEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDF
HernandezDeLaHozVict
 
pwm fast en un microcontrolador 328p.pptx
pwm  fast en un microcontrolador 328p.pptxpwm  fast en un microcontrolador 328p.pptx
pwm fast en un microcontrolador 328p.pptx
jjcordero1
 

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

Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0
 
06.Temporizadores
06.Temporizadores06.Temporizadores
06.Temporizadores
 
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
 
Caso timers
Caso timersCaso timers
Caso timers
 
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
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05
 
Pwm
PwmPwm
Pwm
 
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...
 
El microcontrolador pic
El microcontrolador picEl microcontrolador pic
El microcontrolador pic
 
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
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
TEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDFTEMPORIZADORES Y CONTADORES.PDF
TEMPORIZADORES Y CONTADORES.PDF
 
Timer0
Timer0Timer0
Timer0
 
Introduccionpwm
IntroduccionpwmIntroduccionpwm
Introduccionpwm
 
pwm fast en un microcontrolador 328p.pptx
pwm  fast en un microcontrolador 328p.pptxpwm  fast en un microcontrolador 328p.pptx
pwm fast en un microcontrolador 328p.pptx
 

Más 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
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronicaLuis Zurita
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronicaLuis Zurita
 
Proyecto2 notas iyc2013
Proyecto2 notas iyc2013Proyecto2 notas iyc2013
Proyecto2 notas iyc2013Luis Zurita
 

Más 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 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
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronica
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronica
 
Pevmicro2013
Pevmicro2013Pevmicro2013
Pevmicro2013
 
Proyecto2 notas iyc2013
Proyecto2 notas iyc2013Proyecto2 notas iyc2013
Proyecto2 notas iyc2013
 

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, de uno en uno, 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. • 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. Temporización 50ms (256 – N10) = = 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. 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. Microcontroladores I Prof. Luis Zurita
  • 11. USO DE REGISTRO AUXILIAR Pasos: 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? ¿cuantas veces necesitamos al tiempo calculado para lograr un segundo? 1segundo  200.32 4.992 ms Nuestro registro auxiliar debe ser de 200= 1segundo  200.32 * 4.992 ms 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 • 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 PS2 PS1 PSO 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 un PIC 16F8XX, 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 Programa normal INTERRUPCIÓN Instrucción 1 Rutina de Servicio de Interrupción Instrucción 2 (RSI) Instrucción 3 Instrucción 1 … Instrucción 2 … … … … Instrucción 24 … RETFIE Instrucción 25 … Nota: Una Rutina de Servicio de Interrupción puede ser … igual de extensa e incluso más Instrucción N que el mismo programa principal. Fin de programa Microcontroladores I Prof. Luis Zurita
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. • 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
  • 24. ¿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 (RSI). • 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
  • 25. SALVANDO/RESTAURANDO EL ENTORNO Salvar y restaurar 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 y luego se restauran al salir de esta. Para salvar y restaurar 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
  • 26. SALVANDO/RESTAURANDO 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. 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
  • 30. ¿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). • 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). • 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). Microcontroladores I Prof. Luis Zurita