Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Es un módulo del microcontrolador que es semejante al TMR0, que a diferencia con este
último este nuevo es un registro de 16 bits.
Pero si nuestros códigos solamente nos permiten manipulación de 8 bits, como funciona con
16?
Entonces para poder cargar un valor al TMR1 hay que cargar los
MSB y LSB en esos dos registros que se encuentran en el Banco
0 del microcontrolador. según su datasheet.
Modos de trabajo
El módulo TMR1 tiene dos modos de trabajo principales. Como TEMPORIZADOR o CONTADOR.
Su configuración y selección dependerá del registro T1CON.
COMO TEMPORIZADOR : El incremento del timer se da por los pulsos brindados del oscilador
de cristal. Para nuestro pic es de 20MHZ. Se usa esta forma para generación de retardos y
tiempos de utilidad.
COMO CONTADOR : Es un contador de 16 bits, El cual su fuente de incremento de cuenta son
los pines RC0 y RC1. Sin embargo esta configuración presenta una característica adicional.
• Contador Síncrono : Es el modo normal del timer 1, por cada pulso de entrada en el
puerto RC0 o RC1 el valor del registro TMR1L incrementará en una unidad. Se dice que es
síncrono; debido a que, el pulso es detectado en un proceso perteneciente a la oscilación del
cristal de nuestro microcontrolador. Por lo que si mandamos nuestro microcontrolador al
modo de bajo consumo ("sleep") ya no podremos incrementar la cuenta hasta que
despertemos al pic.
• Contador Asíncrono: Es un modo del timer 1, que tiene la ventaja de funcionar aún
cuando el microcontrolador haya entrado al modo de bajo consumo ("sleep"). Estando en ese
modo por cada pulso que se le brinde a los pines de entrada el registro TMR1L seguirá
incrementando su cuenta. Podremos ver el valor actual o realizar acciones si despertamos al
pic mediante una interrupción. Entrando en este modo existe una aplicación muy usada
cuando se requiere trabajar con tiempos precisos y relojes digitales. Pues basta con conectar
en los pines RC0 y RC1 un cristal de 32.768KHz con algunas configuraciones para generar un
retardo exacto de 1 segundo.
En caso se haya desbordado el Timer1 (el objetivo es ese) se activará la bandera TMR1IF
El circuito es muy sencillo. Los bits de configuración pertenecen al registro T1CON mostrado a
continuación:
Entonces para configurar el Timer1 es necesario brindar valores a cada bit del registro.
Existen más registros involucrados con el TMR1, que en esta sesión por el momento no las
tocaremos. Sin embargo el faltante en nuestra lista es el.
• TMR1IF-> Es la bandera del timer1 que indica cuando se haya desbordado. Lo que
significa que ha pasado del valor TMR1H d'255' TMR1L d'255' = 65535 a 0. Si ha ocurrido es
necesario borrar el valor por software.
1= Se ha desbordado el Timer1
0= No se ha desbordado el Timer1
TIMER 1 COMO CONTADOR
El timer1 puede incrementar su cuenta por cualquiera de los pines RC0 o RC1. Este contador
detectará los flancos de subida.
Sin embargo hay que saber que para que la cuenta empiece el pin RC1 requiere detectar un
"Flanco de Bajada". Una vez que se haya producido este entonces el TMR1 incrementará en 1
con cada flanco de subida realizado.
Ya con los valores solamente nos queda configurar el registro T1CON que se encuentra en el
banco 0.
Configuracion timer1. Fuente:Propia
configuracionT1CON.jpg (73.62 KiB) Visto 1730 veces
Hemos configurado con ese valor en el registro T1CON para que nuestro timer1 trabaje como
contador síncrono.
Lo que queda es realizar el programa que detecte el bit TMR1IF del registro PIR1.
CODIGO
6: Se Testea el bit TMR1IF del registro PIR1 para averiguar si hubo desbordamiento.
7: No olvidar limpiar el bit para realizar el proceso repetidamente.
Ahora con todos los valores, vamos a cargar la configuración al registro T1CON perteneciente
al TMR1
Con las configuraciones hechas TMR1 como temporizador y preescalador de 8. para poder
llegar a 100ms de retardo con un TMR1=3036 nos queda programar.
CODIGO
;.....................................................................
......
;Con..
;
; Pre = 8
; TMR1= 3036 --> Convertido a hexadecimal "0BDC"
INCLUDE <P16F877A.INC>
LIST P=16F877A
INCLUDE <mimacro.INC> ;Incluimos la macro
__config 0x3f32 ; Este es un comando de fusibles, lo estudiaremos más
adelante.
ORG 0;
CBLOCK 0x20 ;Como las librerías usan direcciones de memoria es
necesario adjuntar
ENDC ;Estos dos comandos en nuestro código