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.

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.



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.

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.
SETUP_TIMER_0(MODO)
OPTION_REG()
RTCC_INTERNAL
00H
RTCC_EXT_L_TO_H
20H
RTCC_EXT_H_TO_L
30H
RTCC_DIV_1
08H
RTCC_DIV_2
01H
RTCC_DIV_4
02H
RTCC_DIV_8
03H
RTCC_DIV_16
04H
RTCC_DIV_32
05H
RTCC_DIV_64
05H
RTCC_DIV_128
06H
RTCC_DIV_256
07H
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;


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=?
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.
#include<16f628a.h>
#fuses xt,nowdt,protect
#use delay(clock=4Mhz)
#INT_TIMER0
void isr_timer0(){
output_toggle(PIN_B1);
set_timer0(253);
}
//rutina de atencion a la interrupcion del timer0
//invirtiendo el estado del pin b1
//cargando el timer0 con 253
void main(){
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);
}
}
Descargar

MICROCONTROLADORES PIC TEMPORIZADOR