Está en la página 1de 5

P.G.F.

Temporizador 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 0000 hasta 0xFFFF y al desbordarse vuelve a 00000. 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 bits T1CKPS1: T1CKPS0 de la siguiente manera: 00 01 10 11 = = = = 1:1 1:2 1:4 1:8

P.G.F.

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. La temporizacin que se puede obtener con este mdulo se obtiene de la siguiente relacin: TempTMR1 = [(65536 - precarga)*PS]*Tinstr Donde: Precarga PS Tinstr TempTMR1 = Valor que se le asigna al par de registros TMR1 al comenzar la temporizacin = Valor del preescalador = 4/frecuencia de oscilacin = Temporizacin dada en segundos

La temporizacin mxima utilizando el oscilador interno del pic 16f877a y el valor ms grande de preescalador es: TempTMR1.Max = [(65536 - 0)*8]*1uS = 524288micros De modo que la temporizacin mxima que se puede tener con este temporizador, utilizando el oscilador interno de 4Mhz del pic 16f877a, 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.

P.G.F.

Si se desea obtener una temporizacin distinta solo se debe escribir en el par de registros TMR1 el valor de la precarga 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 revisando el estado de 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 0xE7 al registro TMR1h y 096 al registro TMR1L. El cdigo del programa sera el siguiente:

P.G.F.

; Programa de ejemplo para ver el funcionamiento del mdulo temporizador Timer 1. El programa complementa el puerto B cada 50ms. ; La temporizacin se lleva a cabo a travs del timer 0 funcionando en modo temporizador. ; Se utiliza un PIC 16f877A configurado para operar con un oscilador interno de 4Mhz. List p=16f877a Includep16f877a.inc

Org Goto INICIO bsf Clrf Bcf Movlw Movwf

0x00 INICIO STATUS,RP0 TRSB STATUS,RP0 b'00110000' T1CON ; ; ; ; ; ; Cambio al banco 1 Configuro puerto B como salida Cambio al banco 0 Configuracindel Timer 1 TMR1CS = 0 - modo temporizador T1CKPS:T1CKPS0 = 11 PS = 8

Clrf Bcf PRECARGA bcf Movlw Movwf Movlw Movwf Bsf

PORTB PIR1,TMR1IF T1CON,TMR1ON 0xE7 TMR1H 0x96 TMR1L T1CON,TMR1ON

; Limpiar Puerto B ; Borrar bandera TMR1IF ; ; ; ; ; ; PRECRAGA: Primero se de detiene el timer 1 Despus se realiza la precarga cargando 0xE7 al regsitro TMR1H y despus cargando 0x96 al registro TMR1L Al final se enciende el timer 1

P.G.F.

ESPERA

btfss Goto Bcf Comf Goto END

PIR1,TMR1IF ESPERA PIR1,TMR1IF PORTB,f PRECARGA

; ; ; ; ;

Se termin la temporizacin? No vuelve a preguntar Si borra la bandera TMRIF complementa el puerto B regresa a la etiqueta 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 096 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.