Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El Módulo Del Timer 1
El Módulo Del Timer 1
El Timer 1 a diferencia del Timer 0 es un contador / temporizador de 16 bits. El conteo es realizado por dos registros de 8 bits: (TMR1H (0Fh) y TMR1L (0Eh)), estos dos registros son tanto de lectura como de escritura. Al par de registros TMR1H:TMR1L los denominaremos por comodidad como si fueran un solo registro de 16 bits (TMR1).
As, el registro TMR1 se incrementa de 0000h a FFFFh y en la siguiente cuenta se reinicia en 0000h y as sucesivamente, al reciclarse se activa (en alto) la bandera TMR1IF (PIR1<0>), la cual puede ser utilizada para generar una interrupcin, o bien, para ser consultada por inspeccin, teniendo las mismas precauciones que ya se explicaron antes para la bandera T0IF.
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 subida de una seal de reloj externa en RC0 o por flanco de subida de un oscilador a cristal conectado entre RC0 y RC1 , este modo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON. T1OSCEN : Impulsos reloj externo 0 : RC0/T1OSO/T1CKI 1 : RC0/T1OSO/T1CKI y RC1/T1OSI/CCP2 T1SYNC# : Sincronizacin reloj interno con reloj externo 0 : Sincronizacin 1 : No hay Sincronizacin
El preescalador del Timer 1 tiene un valor mximo de 8 y se selecciona con los bits T1CKPS1:T1CKPS0 de la siguiente manera:
T1CKPS1 T1CKPS0
0 0 1 1
0 1 0 1
1 2 4 8
A diferencia del Timer 0, el Timer 1 tiene la posibilidad de activar o detener la cuenta mediante el bit TMR1ON del registro T1CON.
T1OSCEN : Impulsos reloj externo 0 RC0/T1OSO/T1CKI 1 RC0/T1OSO/T1CKI y RC1/T1OSI/CCP2 T1SYNC# : Sincronizacin reloj interno con reloj externo 0 Sincronizacin 1 No hay Sincronizacin
La temporizacin mxima utilizando el oscilador interno del pic 16f877 y el valor ms grande de preescalador es: TempTMR1.Max = [(65536 - 0)*8]*1uS = 524288uS
Ejemplo
Se desea complementar el valor del puerto B cada 250mS. Se estar revisando que se haya cumplido el tiempo de la temporizacin chequeando la bandera TMR1IF. Utilizando la expresin de la precarga y utilizando el preescalador ms grande. precarga = -[([50mS/(4/fosc)])/4]+65536 = 3036 = 0x0BDC As que para obtener una temporizacin de 50mS mediante el Timer 1 se debe cargar 0x0B al registro TMR1h y 0 al registro TMR1L. El cdigo del programa sera el siguiente:
Ejemplo
Se desea complementar el valor del puerto B cada 250mS. Se estar revisando que se haya cumplido el tiempo de la temporizacin chequeando la bandera TMR1IF. Utilizando la expresin de la precarga y utilizando el preescalador ms grande. precarga = -[([50mS/(4/fosc)])/4]+65536 = 3036 = 0x0BDC As que para obtener una temporizacin de 50mS mediante el Timer 1 se debe cargar 0x0B al registro TMR1h y 0DC al registro TMR1L. El cdigo del programa sera el siguiente:
#include <htc.h> __CONFIG(0x3f71); void init(void) { // port directions: 1=input, 0=output TRISB = 0b00000000; } void main(void) { init(); TMR1CS=0; // Con valor de cero actua como temporizador // bits configuracion prescaler como indica la tabla 11 = 8 T1CKPS0=1; T1CKPS1=1; //T1CON=0b00111100; se puede declarar utilizando el registro completo TMR1IF=0; TMR1H=60; TMR1L=60; TMR1ON=1; while (1){ if (TMR1IF==1) { TMR1IF=0; PORTB=~PORTB; TMR1H=60; TMR1L=60; } } }