Sunteți pe pagina 1din 6

El Mdulo del Timer 2

El Timer 2 es un temporizador de 8 bits que tiene la particularidad de tener un preescalador y un post-escalador. Adems este mdulo cuenta con un registro de periodo PR2 que marca el valor mximo que puede alcanzar la cuenta del registro TMR2 A diferencia de los otros temporizadores, el temporizador Timer 2 no incrementa su cuenta hasta llegar a 0xFF Incrementa su cuenta desde 000 con cada ciclo de instruccin hasta que el valor del registro TMR2 coincide con el del registro PR2 y despus, en el siguiente ciclo reinicia la cuenta

El Mdulo del Timer 2


El

preescalador tiene la misma funcin que en los otros dos timers y sirve como divisor de frecuencia antes de cada incremento post-escalador funciona como un divisor de frecuencia despus de cada coincidencia entre los registros TMR2 y PR2 ,si el post-escalador es 1:1 la bandera de interrupcin TMR2IF se habilitar en cada coincidencia entre TMR2 y PR2, en cambio si por ejemplo el post-

El

El Mdulo del Timer 2

Este temporizador, al igual que el Timer 1, puede habilitarse y deshabilitarse mediante el bit TMR2ON. El preescaladorse selecciona con los bits T2CKPS1:T2CKPS0 El post-escalador con los bits T0UTPS3:TOUTPS0

El Mdulo del Timer 2


Carga y Temporizacin

La temporizacin del Timer 2 est dada por la siguiente expresin:

TempTMR2 = [Preescaler*(PR2+1)*Postscaler]*Tinstr Donde Preescaler = Valor del preescalador PR2 = Valor cargado al registro PR2 Postscaler = Valor del post-escalador Tinstr = 4/frecuencia de oscilacin TempTMR2 = Temporizacin dada en segundos

PR2 = [(TempTMR2/Tinstr)/(Preescaler*Postscaler)]-1

Ejemplo
Se desea complementar el valor del puerto B cada 50ms. Se estar revisando que se haya cumplido el tiempo de la temporizacin chequeando la bandera TMR2IF. Utilizando la expresin de la precarga y utilizando el preescalador y el post-escalador ms grande (16) obtenemos el valor que necesitamos cargar al registro PR2 para obtener una temporizacin de 50mS.

PR2 = [(50mS/1us)/(16*16)]-1 = 194.31 Ya que no podemos cargar nmeros fraccionarios el valor del registro PR2 necesario es 194. El cdigo del programa sera el siguiente:

#include <htc.h> __CONFIG(0x3f71); void init(void) { // port directions: 1=input, 0=output TRISB = 0b00000000; } void main(void)

while (1)

if (TMR2IF ==1) { TMR2IF=0; PORTB=~PORTB; }

init(); // bits configuracin post-escaler como indica la tabla 11 = 16 TOUTPS0=1; TOUTPS1=1; TOUTPS2=1; TOUTPS3=1; // bits configuracin prescaler como indica la tabla 11 = 16 T2CKPS0=1; T2CKPS1=1; PR2=194; //T2CON=0b01111011; se puede declarar utilizando el registro completo TMR2ON=1;

S-ar putea să vă placă și