TMR1
-
Upload
alejandra-zamora-maric -
Category
Documents
-
view
302 -
download
0
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.