TMR1

5
 P.G.F. “Temporizador Timer 1” El Timer 1 es un módulo temporizador/contador de 16 bits, que consiste en dos registros de 8 bits (TMR1H y TMR1L) que son de lectura y escritura . Este módulo incrementa su cuenta desde 0×000 hasta 0xFFFF y al desbordarse vuelve a 0×0000. Al presentarse el desborde la bandera de interrupción TMR1IF se pone a 1 y, si está habilitada, la interrupción se presenta. Este módulo al igual que el Timer 0 puede funcionar en modo temporiza dor y en modo contador. En modo temporizador el  par de regist ros TMR1 se inc rement a en cada ci clo de instru cción, este modo se  selecc iona pon iendo a 0 el bit TMR1CS del registro T1CON . En modo contador el  par de registro s TMR1 se incrementa en cada flanco ascendente de una señal de reloj externa, este modo se selecc iona ponien do a 1 el bi t TMR1CS del registro T1CON . El prees calad or del Timer 1 tiene un valor máximo de 8 y se selecciona con los bits T1CKPS1: T1CKPS0 de la siguiente manera: 00 = 1:1 01 = 1:2 10 = 1:4 11 = 1:8

Transcript of TMR1

5/17/2018 TMR1 - slidepdf.com

http://slidepdf.com/reader/full/tmr1 1/5

 

P.G.F.

“Temporizador Timer 1”

El Timer 1 es un módulo temporizador/contador de 16 bits, que consiste en dos registros de 8 bits (TMR1H y TMR1L) queson de lectura y escritura.

Este módulo incrementa su cuenta desde 0×000 hasta 0xFFFF y al desbordarse vuelve a 0×0000. Al presentarse el desbordela bandera de interrupción TMR1IF se pone a 1 y, si está habilitada, la interrupción se presenta.

Este módulo 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 instrucción, 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 señal de reloj externa, estemodo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON .

El preescalador del Timer 1 tiene un valor máximo de 8 y se selecciona con los bits T1CKPS1:

T1CKPS0 de la siguiente manera:00 = 1:1

01 = 1:2

10 = 1:4

11 = 1:8

5/17/2018 TMR1 - slidepdf.com

http://slidepdf.com/reader/full/tmr1 2/5

 

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 Temporización

En modo temporizador el Timer 1 incrementa su cuenta en cada ciclo de instrucción. La temporización que se puede obtener con este módulo se obtiene de la siguiente relación:

TempTMR1 = [(65536 - precarga)*PS]*Tinstr

Donde:

 Precarga = Valor que se le asigna al par de registros TMR1 al comenzar la temporización

 PS  = Valor del preescalador 

Tinstr  = 4/frecuencia de oscilaciónTempTMR1 = Temporización dada en segundos

La temporización máxima utilizando el oscilador interno del pic 16f877a y el valor más grande de preescalador es:

TempTMR1.Max = [(65536 - 0)*8]*1uS = 524288micros

De modo que la temporización máxima 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 oscilación el Timer 0 solamente podia lograr una temporización de 65.538mS así que con elTimer 1 se logran temporizaciones de mayor duración.

5/17/2018 TMR1 - slidepdf.com

http://slidepdf.com/reader/full/tmr1 3/5

 

P.G.F.

Si se desea obtener una temporización distinta solo se debe escribir en el par de registros TMR1 el valor de la  precarga

necesaria para la temporización 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 latemporización revisando el estado de la bandera TMR1IF.

Utilizando la expresión de la precarga y utilizando el preescalador más grande (8) obtenemos el valor que necesitamoscargar al par de registros TMR1 para obtener una temporización de 50mS

 precarga = -[([50mS/(4/fosc)])/8]+65536 = 59286 = 0xE796

Así que  para obtener una temporización de 50mS mediante el Timer 1 se debe cargar 0xE7 al registro TMR1h y 0×96 alregistro TMR1L. El código del programa sería el siguiente:

5/17/2018 TMR1 - slidepdf.com

http://slidepdf.com/reader/full/tmr1 4/5

 

P.G.F.

; Programa de ejemplo para ver el funcionamiento del módulo temporizador Timer 1. El programa complementa el puerto B cada 50ms.

; La temporización se lleva a cabo a través del timer 0 funcionando en modo temporizador.; Se utiliza un PIC 16f877A configurado para operar con un oscilador interno de 4Mhz.

List p=16f877aIncludep16f877a.inc

Org 0x00

Goto INICIO

INICIO bsf STATUS,RP0 ; Cambio al banco 1

Clrf TRSB ; Configuro puerto B como salida

Bcf STATUS,RP0 ; Cambio al banco 0

Movlw b'00110000' ; Configuracióndel Timer 1

Movwf T1CON ; TMR1CS = 0 - modo temporizador

; T1CKPS:T1CKPS0 = 11 – PS = 8

Clrf PORTB ; Limpiar Puerto B

Bcf PIR1,TMR1IF ; Borrar bandera TMR1IF

PRECARGA bcf T1CON,TMR1ON ; PRECRAGA: Primero se de detiene el timer 1

Movlw 0xE7 ; Después se realiza la precarga

Movwf TMR1H ; cargando 0xE7 al regsitro TMR1H

Movlw 0x96 ; y después cargando 0x96 alMovwf TMR1L ; registro TMR1L

Bsf T1CON,TMR1ON ; Al final se enciende el timer 1

5/17/2018 TMR1 - slidepdf.com

http://slidepdf.com/reader/full/tmr1 5/5

 

P.G.F.

ESPERA btfss PIR1,TMR1IF ; Se terminó la temporización?

Goto ESPERA ; No – vuelve a preguntar

Bcf PIR1,TMR1IF ; Si – borra la bandera TMRIF

Comf PORTB,f ; complementa el puerto B

Goto PRECARGA ; regresa a la etiqueta PRECARGA

END

La configuración del Timer 1 se realiza mediante las líneas “movlw b’01100000′ ” y “movwf T1CON “.

Mediante estas lineas se configura el timer en modo temporizador  (TMR1CS = 0) y  se selecciona el preescalador máximo(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 0×96 al registro TMR1L. Nótese que antesde realizar la carga se detuvo el timer  poniendo a 0 el bit TMR1ON, esto se hace para evitar errores al momento de cargar elvalor a los registros TMR1, después de realizar la carga se enciende el timer  poniendo a 1 el bit TMR1ON y en ese momento

la temporización comienza.