#include <16f628.h> // Selecciona el PIC
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT // Opciones de configuración
#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz
byte const NInts=30; // Numero de interrupciones para 1 Segundo
// VARIABLES GLOBALES
char C_Ints=0; // Contador de Interrupciones ocurridas
char Flag=0; // Flag que cambia cada NInts interrupciones
#int_RTCC // Interrupción por desbordamiento
RTCC_isr() { // del TIMER0 RTCC
if(C_Ints > NInts){ // Si las ints ocurridas > ints para 1 Seg.
if(Flag==0){
Flag=1;
}
else{
Flag=0;
}
C_Ints=0; // Reinicializo Contador de Ints
}
++C_Ints; // Incremento el número de interrupciones
} // Ocurridas
void main(void) {
setup_counters(RTCC_INTERNAL,RTCC_DIV_128);// TIMER0: Clock Interno, Presescaler 128
setup_timer_1(T1_DISABLED); // para una RTCC cada 33.3 milisegundos
setup_timer_2(T2_DISABLED,0,1); // -> 1 Segundo = 30 RTCC
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC); // Habilito Interrupción RTCC
enable_interrupts(global); // Habilito Interrupciones
do{ // Bucle infinito
if(Flag==K){}
else
{ // si ha cambiado Flag ...
// AQUI HAGO LO QUE DESEE CADA 1 SEGUNDO
k=Flag; // Guardo estado anterior de Flag
}
}While(TRUE);
}