180 likes | 368 Views
MICROCONTROLADORES PIC. TIMER0 . MODULO TIMER0. Es un modulo contador/temporizador de 8 BITs, que cuenta con un preescalador programable de 8 BITs Puede funcionar como temporizador o como contador En modo temporizador el modulo Timer0 se incrementa con cada ciclo de instrucción.
E N D
MICROCONTROLADORES PIC TIMER0
MODULO TIMER0 • Es un modulo contador/temporizador de 8 BITs, que cuenta con un preescalador programable de 8 BITs • Puede funcionar como temporizador o como contador • En modo temporizador el modulo Timer0 se incrementa con cada ciclo de instrucción. • En el modo contador el modulo timer0 se incrementa en cada flanco (ascendente o descendente) del pin RA4/TOCKI. • En ambos casos al desbordarse (pasar de FF A 00) el modulo timer0 genera una interrupción.
MODULO TIMER0 • EL REGISTRO OPTION. El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupción y la activación de las resistencias de polarización del puerto B. Ocupa la posición 81h de la página 1 del banco de registros. Debe escribirse usando la instrucción especial OPTION. Esta instrucción carga el contenido de W en el registro OPTION. • si el BIT TOCS del registro OPTION es cero entonces se trabaja en modo temporizador. • si el BIT TOCS del registro OPTION es uno entonces se trabaja en modo contador. • En el modo contador se puede seleccionar si el incremento se producirá en un flanco de subida o en un flanco de bajada, mediante el BIT TOSE del registro OPTION. • El Preescaler es compartido por el TIMER0 y por el WATCHDOG, se asigna a un modulo o a otro mediante el BIT PSA del registro OPTION. • El valor del preescaler se selecciona con los BITS PS0:PS2.
MODULO TIMER0 • El tiempo de desbordamiento del TIMER0, se halla de acuerdo a la siguiente formula. • T=TCM*PRESCALER*(256-carga TIMER0) • TCM=4/FOSC=CICLO DE MAQUINA.
TIMER0 EN CCS • SETUP_TIMER_0(MODO).- establece la fuente de reloj, el preescaler, etc. para el TIMER0; donde MODO esta definido en el fichero de cabecera, estos afectan a los BITs 0:5 del registro OPTION.
TIMER0 EN CCS Estos distintos modos se puede agrupar usando el símbolo | Setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL|RTCC_8_BIT); • SET_TIMER0() • Fija el valor inicial del TIMER0 para que empiece la cuenta. SET_TIMER0(15); • VALUE=GET_TIMER0(); • Lee el valor actual del Timer0;
Uso del TIMER0 como temporizador • Generar una señal cuadrada de 62.5Hz utilizando la interrupción del TIMER0 • Se necesita un semiperiodo de 8mS, por lo tanto, utilizando la siguiente formula: T=TCM*PRESCALER*(256-carga TIMER0) 8ms=4/(4MHZ)*2*(256-X) X=?
USO DEL TIMER0 COMO CONTADOR • Hacer parpadear un LED conectado al PIN_B0 cada 500mS y ademas hacer cambiar de estado a un led conectado al PIN_B1 cada tres pulsos que ingresan por RA4. Solucion: El timer0 es un registro de 8 bit que puede contar hasta 256, para que se desborde con tres pulsos se le cargara con 253.
CODIGO #include<16f628a.h> #fuses xt,nowdt,protect #use delay(clock=4Mhz) #INT_TIMER0 void isr_timer0(){ //rutina de atencion a la interrupcion del timer0 output_toggle(PIN_B1); //invirtiendo el estado del pin b1 set_timer0(253); //cargando el timer0 con 253 } voidmain(){ setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); //timer0 como contador enable_interrupts(INT_TIMER0); //habilitacion de la interrupcion timer0 enable_interrupts(GLOBAL); //habilitacion global de interrupcion set_timer0(253); //se carga el registro timer0 con 253 while(true){ output_toggle(PIN_B0); //parpadeo de led delay_ms(500); } }