Sei sulla pagina 1di 3

TIMER 1

El Timer 1 es un mdulo temporizador/contador de 16 bits, que consiste en dos registros de 8 bits


(TMR1H y TMR1L) que son de lectura y escritura. Este mdulo incrementa su cuenta
desde 0x000 hasta 0xFFFF y al desbordarse vuelve a 0x0000. Al presentarse el desborde la bandera
de interrupcin TMR1IF se pone a 1 y, si est habilitada, la interrupcin se presenta.
Este mdulo al igual que el Timer 0 puede funcionar en modo temporizador y en modo contador.
En modo temporizador el par de registros TMR1 se incrementa en cada ciclo de instruccin, este
modo se selecciona poniendo a 0 el bit TMR1CS del registro T1CON.En modo contador el par de
registros TMR1 se incrementa en cada flanco ascendente de una seal de reloj externa, este modo se
selecciona poniendo a 1 el bit TMR1CS del registro T1CON.
El preescalador del Timer 1 tiene un valor mximo de 8 y se selecciona con los bitsT1CKPS1:T1CKPS0
de la siguiente manera:
00 = 1:1
01 = 1:2
10 = 1:4
11 = 1:8
A diferencia del Timer 0, el Timer 1 tiene la posibilidad de activar o detener la cuenta mediante el bit
TMR1ON del registro T1CON.
Carga y Temporizacin
En modo temporizador el Timer 1 incrementa su cuenta en cada ciclo de instruccin. Latemporizacin
que se puede obtener con este mdulo se obtiene de la siguiente relacin:
TempTMR1 = [(65536 - precarga)*PS]*Tinstr Donde:
precarga = Valor que se le asigna al par de registros TMR1 al comenzar la temporizacin PS = Valor
del preescalador
Tinstr = 4/frecuencia de oscilacin
TempTMR1 = Temporizacin dada en segundos
La temporizacin mxima utilizando el oscilador interno del pic 16f628 y el valor ms grande de
preescalador es:
TempTMR1.Max = [(65536 - 0)*8]*1uS = 524288uS
De modo que la temporizacin mxima que se puede tener con este temporizador,utilizando el
oscilador interno de 4Mhz del pic 16f628,
es de 524.288mS. Con la misma frecuencia de oscilacin el Timer 0 solamente podia lograr una
temporizacin de 65.538mS as que con el
Timer 1 se logran temporizaciones de mayor duracin. Si se desea obtener una temporizacin
distinta solo se debe escribir en el par de registros TMR1 el valor de laprecarga necesaria para la
temporizacin deseada.
precarga = -[([Temporizacion/(4/fosc)])/PS]+65536
Veamos el mismo ejemplo que el del temporizador Timer 0 ahora aplicado al Timer 1: Se desea
complementar el valor del puerto B cada 50mS. Se estar revisando que se haya cumplido el tiempo
de la temporizacin checando la bandera TMR1IF. Utilizando la expresin de la precarga y utilizando
el preescalador ms grande (8) obtenemos el valor que necesitamos cargar al par de registros TMR1
para obtener una temporizacin de 50mS.
precarga = -[([50mS/(4/fosc)])/8]+65536 = 59286 = 0xE796

As que para obtener una temporizacin de 50mS mediante el Timer 1 se debe cargar 0xE7al registro
TMR1h y 0x96 al registro TMR1L. El cdigo del programa sera el siguiente: INICIO
bsf
STATUS,RP0
clrf TRISB
bcf
STATUS,RP0
movlw b'00110000' movwf T1CON clrf PORTB
bcf
PIR1,TMR1IF PRECARGA
bcf
T1CON,TMR1ON
movlw 0xE7 movwf TMR1H movlw 0x96 movwf TMR1L
bsf
T1CON,TMR1ON ESPERA
btfss PIR1,TMR1IF goto ESPERA
bcf
PIR1,TMR1IF
comf PORTB,f goto PRECARGA
La configuracin del Timer 1 se realiza mediante las lneas movlw b01100000 y movwf T1CON.
Mediante estas lineas se configura el timer en modo temporizador (TMR1CS = 0) y se selecciona el
preescalador mximo (T1CKPS1:T1CKPS0 = 11). Una vez configurado el timer 1 se limpia el puerto B y
la bandera TMR1IF del registro PIR1. Posteriormente se realiza la precarga cargando un 0xE7 al
registro TMR1H y un 0x96 al registro TMR1L.Ntese que antes de realizar la carga se detuvo el
timer poniendo a 0 el bit TMR1ON,esto se hace para evitar errores al momento de cargar el valor a
los registros TMR1,despus de realizar la carga se enciende el timer poniendo a 1 el bit TMR1ON y en
ese momento la temporizacin comienza.
Para saber si la temporizacin termin se est revisando continuamente la banderaTMR1IF. Mientras
esta sea 0 la temporizacin an no habr terminado, cuando la bandera es 1 entonces la
temporizacin finaliz, entonces se borra la bandera TMR1IF, se complementa el puerto B y se vuelve
a realizar la precarga. De este modo el programa est complementado el puerto B cada 50mS.
TIMER 2
El Timer 2 es un temporizador de 8 bits que tiene la particularidad de tener unpreescalador y un postescalador. 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 y despus al desborde sino que
incrementa su cuenta desde 0x00 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 desde 0x00.
Este mdulo cuenta con un preescalador y un post-escalador. El preescalador tiene la misma funcin
que en los otros dos timers y sirve
como divisor de frecuencia antes de cada incremento. El 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-escalador es 1:16,
la interrupcin se presentar cada 16 coincidencias.
Este temporizador, al igual que el Timer 1, puede habilitarse y deshabilitarse mediante el bit
TMR2ON.
El preescalador se selecciona con los bits T2CKPS1:T2CKPS0 y el post-escalador con los bits
T0UTPS3:TOUTPS0 de la siguiente manera:
Preescalador
01 = 1:4
1x = 1:16
.
.

Post-escalador 00 = 1:1
0001 = 1:2
0010 = 1:3

0000 = 1:1

.
1111 = 1:16
Carga y Temporizacin
La temporizacin del Timer 2 est dada por la siguiente expresin: TempTMR2 =
[Preescaler*(PR2+1)*Postscaler]*Tinstr
Donde
Preescaler=Valordel preescalador PR2 = Valor cargado al registro PR2 Postscaler = Valor del postescalador Tinstr = 4/frecuencia de oscilacin
TempTMR2 = Temporizacin dada en segundos
La temporizacin mxima que puede alcanzar el Timer 2 es la misma que alcanza el Timer 0.
Utilizando el oscilador interno del pic 16f628 la temporizacin mxima sera de65536uS. Si se desea
otra temporizacin se puede lograr cargando el valor necesario al registro PR2.
PR2 = [([TempTMR2/(4/fosc)])/(Preescaler*Postscaler)]-1
Veamos el mismo ejemplo de los temporizadores anteriores, ahora aplicado al Timer 2: Se desea
complementar el valor del puerto B cada
50ms. Se estar revisando que se haya cumplido el tiempo de la temporizacion checando la bandera
TMR2IF. Utilizando la expresin de la
precarga y utilizando el preescalador y el post-escalador ms grande (16) obtenemos el valor quer
que necesitamos cargar al registro PR2 para obtener una temporizacion de 50mS.
PR2 = [([50mS/(4/4Mhz)])/(16*16)]-1 = 194.31
Ya que no podemos cargar numeros fraccionarios el valor del registro PR2 necesario es 194. El cdigo
del programa sera el siguiente:
INICIO
bsf
STATUS,RP0
clrf
TRISB
bcf
STATUS,RP0
movlw b'01111010' movwf T2CON clrf PORTB
bcf
PIR1,TMR2IF PRECARGA
bcf
T2CON,TMR2ON bsf
STATUS,RP0
movlw .194 movwf PR2
bcf
STATUS,RP0
bsf
T2CON,TMR2ON ESPERA
btfss PIR1,TMR2IF goto ESPERA
bcf
PIR1,TMR2IF
comf PORTB,f goto PRECARGA

Potrebbero piacerti anche