Está en la página 1de 8

TEMPORIZADORES

El micro PIC 16F6xx y 16F8X posee 3 temporizadores internos que
pueden trabajar como temporizador o como contador. Estos registros
se denominan:
• TMR0
• TMR1
• TMR2
MODULO DE TIMER TMRO
Características:
• 8 bits temporizador/contador.
• Capacidad de lectura/escritura.
• 8 bits preescalar programable por software.
• Selección de reloj interno o externo.
• Interrupción por desbordamiento (FFh a 00h).
• Selección de flanco para reloj externo.
El control del TMR0 se realiza mediante los registros OPTION
INTCON.

e

REGISTRO OPTION
El registro OPTION controla el modo de funcionamiento del TMR0.
REGISTRO OPTION
RBPU

INTDEG

T0CS

T0SE

PSA

PS2

PS1

DESCRIPCION DE BITS:
Bit7:

RBPU Pull-up PORTB.
1 = Cargas Pull-Up Desconectadas
0 = Cargas Pull-Up Conectadas.

Bit6:

INTEDG Flanco/Interrupucción.
1 = RB0/INT Flanco ascendente
0 = RB0/INT Flanco descendente

Bit 5:

T0CS: Selecciona la fuente de Reloj para TMR0
1 = Pulsos por el pin RA4/T0CKI (contador)
0 = Ciclo de instrucción interno, pulsos igual Fosc/4
(temporizador).

Bit 4:

T0SE: Flanco de incremento para RA4/T0CKI
1 = Incrementa TMR0 en flanco descendente
0 = Incremento en flanco ascendente

Bit 3:

PSA: Bit de asignación del Prescalar

1 = Divisor asignado al WDT
Preparado por: Sixto Reinoso

PS0

Los detalles de cada Bit del registro INTCON. PS0: Selección del prescalar (divisor de frecuencia) El prescaler debe tener algún valor. BIT's R/W Reset Bit 7: GIE Habilitación R/W General de interrupciones.0 = Divisor asignado al TMR0 Bit 2-10: PS2. concretamente en la interrupción. y si bien no se puede cargarle un valor cualquiera. se tiene la posibilidad de seleccionarlo según la combinación de PS2. Los Bit's que terminan con la letra F son banderas (flags) y cambian de estado ante la ocurrencia de algún evento. PS1 y PS0 como muestra la tabla: PS2 PS1 PS0 División del TMR0 División del WDT 0 0 0 ½ 1/1 0 0 1 ¼ 1/2 0 1 0 1/8 1/4 0 1 1 1/16 1/8 1 0 0 1/32 1/16 1 0 1 1/64 1/32 1 1 0 1/128 1/64 1 1 1 1/256 1/128 REGISTRO INTCON Los bits de este registro controlan las interrupciones internas del TMR0. PS1. Preparado por: Sixto Reinoso 0 Descripción 1 = Todas las Interrupciones activadas 0 = Todas las Interrupciones desactivadas . se muestran en la tabla. REGISTRO INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF El Bit GIE (Global Interrupt Enable) habilita todas las interrupciones.

. Si bien cada flag cambia o se pone a 1 al producirse una interrupción. 0 1 = TMR0 desbordado. es un Temporizador/Contador de 8 bits. de 0x00 a 0xFF. que como es lógico cuenta en binario y en forma ascendente es decir. es tarea del programador ponerlo a cero nuevamente.. 0 = No se ha desbordado 0 1 = Ocurrió una interrupción externa 0 = No ha ocurrido interrupción externa x 1 = Al menos un pin cambio de estado 0 = Ningún pin ha cambiado de estado. pasa de 0xFF a 0x00.Bit 6: EEIE Int. Bit 1: INTF Bandera RB0/INT Bit 0: RBIF Bandera RB4:RB7 R/W R/W R/W En la tabla. por PORTB R/W RB4:RB7 0 1 = Activada 0 = Desactivada Bit 2: T0IF Bandera del TMR0. los valores de Reset son el estado de cada Bit después de producirse un reset o cuando se inicia el micro. Preparado por: Sixto Reinoso . y produce una interrupción. creerá que la interrupción se está produciendo continuamente. los valores de R/W el bit es de lectura o escritura. ya que si no lo hace el micro estará siempre interrumpido o lo que es lo mismo. de Periféricos R/W 0 1 = Activada 0 = Desactivada Bit 5: T0IE Interrupción del TMR0 R/W 0 1 = Activada 0 = Desactivada Bit 4: INTE Int. o sea. Externa RBO R/W 0 1 = Activada 0 = Desactivada Bit 3: RBIE Int. El registro llamado TMR0. lo interesante de este registro es que cuando ocurre un desbordamiento. Temporizaciones Algunas de las cosas que debemos tener en cuenta. Se puede utilizar el oscilador interno del PIC o utilizar un externo de hasta 20 Mhz. el registro INTCON la bandera T0IF se pone en 1.

Preparado por: Sixto Reinoso . cuando se desborde producirá la interrupción. PS1. PS2. T0SE es el Bit4 del Registro OPTION. el segundo es el perro guardián. en él se selecciona el flanco con el cual se incrementará el TMR0 cuando haya un pulso por RA4. PS0 son configurables en el Registro OPTION. el micro dispone de dos temporizadores. Este pin debe definirse como entrada. por ejemplo cuando se queda detenido en un bucle infinito o en una larga espera de un acontecimiento que no se produce. el TMR0 y WDT (Watchdog). T0CS.La estructura del micro para trabajar con este registro se indica en la figura. Además. ya sea como temporizador o bien como contador el cual se selecciona en T0CS (Bit5 del registro OPTION). El primero es el que estamos tratando en esta sección. En modo Contador: El TMR0 se incrementará con cada pulso que ingrese por el pin RA4/T0CKI. El Prescalar es un predivisor de frecuencia que se utiliza comúnmente para programar tiempos largos y se puede aplicarlo al TMR0 o al WDT. entonces actúa reseteando al micro. Los Bit's que están escritos con T0SE. esto lo configura en PSA Bit3 del registro OPTION. y por supuesto. En modo Temporizador: El TMR0 se incrementa con cada Ciclo de Instrucción (Fosc/4) y cuando el registro se desborde provocará una interrupción. El registro TMR0 puede trabajar de dos modos distintos. el Bit T0IF es el Bit2 del registro INTCON (la bandera que se altera cuando el TMR0 se desborda). PSA. lo que hace es vigilar cada cierto tiempo que el micro no se quede colgado.

al trabajar con el oscilador interno de 4 Mhz). escribir un programa generar una onda cuadrada de 2000 HZ.Temporización con el registro TMR0.TMR0= Tiempo / (4*Toscilador * Rango Divisor de Frecuencia). PS1. Tiempo = 4 * Toscilador * (256 . El primer paso. trabajando con un oscilador de 4 Mhz. Ejemplo: Se desea una temporización de 10 ms. es seleccionar el prescalar. o sea 10 ms. 250 us. El tiempo empleado en una temporización se puede calcular a partir de un ciclo de instrucción (es decir 1 instrucción por cada microsegundo.. el Rango del divisor de frecuencia es 256. Eso significa que en TMR0 se debe cargar 256-39=217 y a partir de allí el TMR0 contará los 39 ciclos que faltan para desbordarse y producir la interrupción. Considerando que se utilizará el oscilador interno de 4MHZ y un preescalar de 128: 256 . Por tanto. y el tiempo que tardará en hacerlo es aproximadamente 10000 us. 256. la ecuación que permite realizar el cálculo es la que sigue. Aplicando la ecuación para calcular el tiempo de temporización obtenemos el valor para cargar el TMR0. PS0 = 1.TMR0 = 10000 us / (4 * 0.. 256 – TMR0= 250us / (4*(1/4MHZ)*128)= 2 Preparado por: Sixto Reinoso . o sea.. El siguiente paso es calcular el valor que se debe cargar en TMR0. también se necesita el valor del Divisor de Frecuencia y finalmente con el complemento del valor cargado en TMR0 (es decir 256-TMR0).25 us * 256) = 39. PS2. para tener una onda cuadrada el tiempo en alto y en bajo de señal serán iguales. es decir. El periodo de la señal es T= 1/f = 1/2000= 500 us. 1.TMR0= Tiempo / (4*Toscilador * Rango Divisor de Frecuencia). PROGRAMA TEMPORIZADOR CON TMR0 Utilizando el registro TMR0.0625 ciclos =~ 39 ciclos.TMR0) * Rango Divisor de Frecuencia El 4 indica que el micro ejecuta una instrucción normal en 4 ciclos de reloj. Por tanto. y este es el tiempo de temporización. 1.??? 256..

TMR0= 256 – 2= 254= 254. Con estos datos escribimos el programa: PROGRAMA 1 LED1 VAR PORTB. CIRCUITO PARA COMPROBAR EL FUNCIONAMIENTO DEL TMR0 COMO TEMPORIZADOR Preparado por: Sixto Reinoso .0 TRISB = 0 M VAR BYTE K VAR BYTE M=0 K=0 ON INTERRUPT GOTO TIMER OPTION_REG = %10000110 INTCON = %10100000 TMR0= 254 LAZOPRINCIPAL: IF M = 0 THEN LOW LED1 IF M = 1 THEN HIGH LED1 GOTO LAZOPRINCIPAL DISABLE TIMER: K=K+1 IF K = 1 THEN M = 1 IF K= 2 THEN M = 0 : K = 0 INTCON = %10100000 TMR0= 254 RESUME END Figura 1.

para que el timer TMR0 actúe como contador. Cuántos pulsos necesito?. Calcular los temporización de 50 ms?. según el ejericio 3. los valores de los registros INTCON y OPTION con un preescalar de ½ para el TMR0. comentar la finalidad de las variables M. • • Cuál es el valor que se debe poner en el registro OPTION para el contador responda al flanco de bajada y actúe el TMR0 como contador? Fije el valor para el registro INTCON. Analizar detenidamente el código del programa 1. El Timer TMR0 como contador. Calcular la mayor temporización que se puede obtener haciendo uso del registro TMR0.EJERCICIOS PREVIOS Ejercicio 1. Comprobar que los valores de los registros INTCON y OPTION sean los correctos para que módulo TMR0 actúe como temporizador. Modifique el progrma 1. Explique. 2 y 3 solo en el simulador. está cumpliendo con lo indicado?. Punto 4 en el protoboard. Si el TMR0 en el programa está fijado en 254 y el registro TMR0 se desborada al pasar de 255 a 0. es decir necesita 2 pulsos y ocurre la interrupción (y el LED debe cambiar de estado). TRABAJO DE LABORATORIO: Puntos 1. Mida el periodo. Simule en Proteus utilizando el circuito de la figura 2. 3. Mediante el osciloscopio virtual observe la señal generada. Para utilizar el TMR0 como contador se debe seleccionar los bits TOSE y TOCS del registro OPTION. Contador con el registro TMR0. Es el esperado? Cuáles pueden ser las razones para no obtener los valores calculados? 2. valores del TMR0 para tener una Ejercicio 3. Preparado por: Sixto Reinoso . K. Implemente el programa 1 y la figura 1. Ejercicio 2. Accione y cuente el número de veces que acciona S1 hasta que se prenda el LED o se apague el LED. 1.

Un retardo de 1s para el contador debe ser generado por el TMR1. Realice el programa y un circuito para que un LED titile cada 500 ms. 2. Cuestionario 1. El retardo de tiempo debe ser generado por el TMR0. Circuito para comprobar el funcionamiento del TMR0 como contador. Preparado por: Sixto Reinoso . 4. Escriba un porgrama para realizar un contador MOD-10 con visualización el display. Utilizando el TMr2 escriba un porgrama para generar una señal cuadrada de 5 KHZ.Figura 2.