2. MÓDULO TIMER1MÓDULO TIMER1
El TMR1 es un Temporizador/Contador con un
tamaño de 16 bits, lo que requiere el uso de dos
registros concatenados de 8 bits: TMR1H : TMR1L,
que son los encargados de guardar el valor del
conteo en cada momento. Dicho valor se
incrementa desde 0000h hasta FFFFh. Momento
2
incrementa desde 0000h hasta FFFFh. Momento
en el cual se activa el señalizador TMR1IF y se
regresa al valor inicial 0000h.
3. MÓDULO TIMER1 (1)MÓDULO TIMER1 (1)
El valor contenido en TMR1H : TMR1L puede ser
leído o escrito y los impulsos de reloj que
originan el conteo ascendente pueden provenir
del exterior o de la frecuencia de funcionamiento
del microcontrolador (Fosc/4)
Tiene tres formas de operación:
3
Tiene tres formas de operación:
1. Temporizador
2. Contador Asíncrono
3. Contador Síncrono
5. MÓDULO TIMER1 COMO TEMPORIZADORMÓDULO TIMER1 COMO TEMPORIZADOR
El valor concatenado TMR1H : TMR1L se
incrementa con cada ciclo de instrucción (Fosc/4).
Este modo es seleccionado limpiando el bit
TMR1CS (T1CON<1>). En este modo la entrada de
reloj al timer es Fosc/4. El bit T1SYNC (T1CON<2>)
5
no tiene efecto desde el reloj interno; ya que
siempre es síncrono.
7. TIMER1 CONTADOR SÍNCRONOTIMER1 CONTADOR SÍNCRONO
El incremento se puede producir con los flancos
ascendentes de un reloj externo, cuya entrada se
aplica a los pines RC0 y RC1 del puerto C, o por
impulsos aplicados en el pin RC0. Este modo es
seleccionado seteando el bit TMR1CS.
7
8. TIMER1 CONTADOR SÍNCRONO (2)TIMER1 CONTADOR SÍNCRONO (2)
En este modo el timer incrementa cada flanco
ascendente de una entrada de reloj externo en el
pin RC1, cuando el bit T1OSCEN se pone a 1. O
cuando una entrada de reloj ingresa por el pin
RC0, cuando el bit T1OSCEN se limpia (0). Si el
8
RC0, cuando el bit T1OSCEN se limpia (0). Si el
T1SYNC se limpia, entonces el reloj externo es
sincronizado con la fase del reloj interno.
10. TIMER1 CONTADOR ASÍNCRONOTIMER1 CONTADOR ASÍNCRONO
Si el bit T1SYNC (T1CON<2>) se coloca a 1, el reloj
externo no es sincronizado. El timer continua un
incremento asíncrono a la fase del reloj interno. El
timer continuará funcionando durante el modo
SLEEP y podrá generar una interrupción de
10
SLEEP y podrá generar una interrupción de
desborde; el cual podría despertar al procesador
del modo SLEEP.
11. TIMER1 CONTADOR ASÍNCRONOTIMER1 CONTADOR ASÍNCRONO (1)(1)
Oscilador para el TIMER1
Un oscilador de cristal puede ser construido entre
los pines T1OSI (entrada) y T1OSO (salida
amplificada). Esto se habilita ajustando el bit de
control T1OSCEN (T1CON<3>). El oscilador puede
ser hasta de 200 Khz. Este continuará oscilando
11
ser hasta de 200 Khz. Este continuará oscilando
durante el modo SLEEP.
13. EJERCICIO DE APLICACIÓNEJERCICIO DE APLICACIÓN
Diseñar un sistema que genere un retardo de 500
ms, usando el TMR1 del PIC16F877A. Cada vez que
concluya el tiempo se activará el Puerto C de forma
escalonada.
13
15. CONSIDERACIONES DEL PROGRAMACONSIDERACIONES DEL PROGRAMA
Se tiene un ciclo de instrucción de demanda
1 us (Cristal de 4MHZ). El retraso será de
65.536 ms. Para alcanzar el valor que
deseamos emplearemos el preescaler. Si lo
colocamos a 1:8 obtendremos el valor
deseado:
15
deseado:
Retardo=4*Tosc*TMR1*Preescaler
Retardo=4*0.25us * 65536*8
Retardo=524,288 ms
16. CONSIDERACIONES DEL PROGRAMA (2)CONSIDERACIONES DEL PROGRAMA (2)
Nos apoyaremos en el bit de desborde del modulo
timer 1 TMR1F. Como el valor lo vamos a mostrar
en el Puerto C como una escalera que se
incrementa cada 500 ms usaremos una tabla para
decodificar el valor a mostrar en el Puerto C.
16
decodificar el valor a mostrar en el Puerto C.
17. ALGORÍTMO DEL PROGRAMAALGORÍTMO DEL PROGRAMA
Deshabilitamos el módulo timer 0
(OPTION_REG=0x80) y habilitamos el modulo timer
1( preescaler 1:8, deshabilitamos oscilador, no hay
sincronismo, el reloj es interno, el modulo timer 1
esta apagado ).
X X T1CKPS1 T1CKPS0 T1OSCEN - T1SYNC TMR1CS
17
X X T1CKPS1 T1CKPS0 T1OSCEN - T1SYNC TMR1CS
TMR1ON
0 0 1 1 0 0 0 0
18. ALGORÍTMO DEL PROGRAMA (1)ALGORÍTMO DEL PROGRAMA (1)
1. Ir banco 1
2. TRISC=0
3. OPTION_REG=b'10000000'
4. Ir banco 0
5. T1CON=b'00110000'
6. CONTA=0, PORTC =0;
18
6. CONTA=0, PORTC =0;
7. W=CONTA (indice)
8. CALL DISPLAY
9. PORTC=W
10 CALL RETARDO
19. ALGORÍTMO DEL PROGRAMAALGORÍTMO DEL PROGRAMA (2)(2)
11. CONTA=CONTA +1
12. Si CONTA es 8, entonces CONTA =0, Ir paso 7
13. Sino CONTA =CONTA+1, Ir paso 7
Retardo
1.TMR1IF=0
2. TMR1=0
19
2. TMR1=0
3. TMR1ON=1
4. Si TMR1IF es 1, entonces TMR1ON=1, return
5. Ir paso 4