Está en la página 1de 14

TIMERS

SISTEMAS BASADOS EN MICROCONTROLADOR


INTRODUCCIÓN
• Un temporizador, en general, es un dispositivo que marca o indica el transcurso de
un tiempo determinado.

• Los PIC16F87X tienen 3 módulos temporizadores denominados TIMER0 (TMR0),


TIMER1 (TMR1) y TIMER2 (TMR2).

• Los módulos temporizadores en los microcontroladores PIC se emplean para


contabilizar intervalos de tiempo o para contar flancos que aparecen en pines
externos del micro, esto último lo pueden hacer TMR0 y TMR1 pero no TMR2.

• Cuando trabajan como temporizadores, utilizan como patrón de cuenta un reloj


que se genera a partir del oscilador del microcontrolador.

• Cada módulo puede generar una interrupción para indicar que algún evento ha
ocurrido (que se ha sobrepasado el valor máximo de cuenta de un temporizador –
overflow- o que se ha alcanzado un valor dado)

SISTEMAS BASADOS EN MICROCONTROLADOR


SISTEMAS BASADOS EN MICROCONTROLADOR
TIMER 0
Un timer se implementa por medio de un contador que determina un tiempo
preciso entre el momento en que el valor es cargado y el instante en el que se
produce su desbordamiento.

Básicamente, un temporizador consiste en un contador ascendente (tambien podría


ser descendente) que, una vez inicializado con un valor, su contenido se incrementa
con cada impulso de entrada hasta llegar a su valor máximo b’11111111’,
desbordando y volviendo a comenzar desde cero

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
El PIC16F877 dispone de un timer principal denominado Timer0 o TMR0 que es un
contador ascendente de 8 bits.

El TMR0 se inicializa con un valor, que se incrementa con cada impulso de entrada
hasta su valor máximo b’11111111’, con el siguiente impulso de entrada el contador
se desborda pasando a valer b’00000000’, circunstancia que se advierte mediante la
activación del flag de fin de conteo T0IF localizado en el registro INTCON.

SISTEMAS BASADOS EN MICROCONTROLADOR


Registro especial INTCON

TIMER 0

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
Los impulsos aplicados al TMR0, pueden provenir de los pulsos aplicados al
pin T0CKI o de la señal de reloj interna (Fosc/4), lo que le permite actuar de
dos formas diferentes:

• Como contador de los impulsos externos que le llegan por el pin


RA4/T0CKI

• Como temporizador de tiempos

El actuar de una u otra forma depende del bit T0CS del registro

OPTION:

• Si T0CS=1, el TMR0 actúa como contador.


• Si T0CS=0, el TMR0 actúa como temporizador.

SISTEMAS BASADOS EN MICROCONTROLADOR


Registro especial OPTION

TIMER 0

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
TMR0 como CONTADOR
Cuando el TMR0 trabaja como contador se le introducen los impulsos desde el exterior por el
pin RA4/T0CKI (TMR0 External Clock Input). Su misión es “contar” el número de
acontecimientos externos representados por los impulsos que se aplican al pin T0CKI.

El tipo de flanco activo se elige mediante el bit T0SE del registro OPTION:

•Si T0SE=1, el flanco activo es descendente


•Si T0SE=0, el flanco activo es ascendente

TMR0 como TEMPORIZADOR

Cuando el TMR0 funciona como temporizador cuenta los impulsos de FOSC/4. Se usa para
determinar intervalos de tiempo concretos.

Para una frecuencia de reloj igual a 4 MHz el TMR0 se incrementa cada 1 microsegundo.
Para una frecuencia de reloj igual a 8 MHz el TMR0 se incrementa cada medio microsegundo.

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
Como se trata de un contador ascendente el TMR0 debe ser cargado con el valor
de los impulsos que se desean contar restados de 256 que es el valor de
desbordamiento. Por ejemplo, para contar 4 impulsos, se carga el TMR0 con 256-
4=252.

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
DIVISOR DE FRECUENCIA (PRESCALER)
A veces es necesario controlar tiempos largos y aumentar la duración de los impulsos que
incrementan el TMR0. Para cubrir esta necesidad se dispone de un circuito programable
llamado Divisor de frecuencia o Prescaler que divide la frecuencia utilizada por diversos
rangos para poder conseguir temporizaciones más largas.

La temporización que se puede obtener con este módulo se obtiene de la siguiente relación:

Tiempo = [(256 - precarga)*PS+2]*Tinstruccion

Donde:
precarga = Valor que se le asigna al registro TMR0 al comenzar la temporización
PS = Preescalador.
Tinstrucción = 4/frecuencia de oscilación y la temporización está dada en segundos.

SISTEMAS BASADOS EN MICROCONTROLADOR


TIMER 0
EJEMPLO
Se desea complementar el valor del puerto B cada 50mS. Se estará revisando que se haya cumplido el tiempo de
la temporización checando la bandera T0IF. Utilizando la expresión de la precarga y utilizando el preescalador
más grande (256) obtenemos el valor que necesitamos cargar al registro TMR0 para obtener una temporización
de 50mS

SISTEMAS BASADOS EN MICROCONTROLADOR


ASEMBLER

SISTEMAS BASADOS EN MICROCONTROLADOR


C

SISTEMAS BASADOS EN MICROCONTROLADOR

También podría gustarte