// Constantes
const int8 nTimer1_for_1_second=76;
// Variables en RAM
int8 nTimer1Overflow; // Contador de Interrupciones
int8 nSECS_for_Event_1; // Contador Segundos para Evento 1
int1 flag_for_Event_1; // Flag para detectar evento 1
int8 nTOFS_for_Event_2; // Contador Interrupciones para Evento 2
int1 flag_for_Event_2; // Flag para detectar evento 2
// Interrupción por desbordamiento de Timer1
#int_timer1
void interrupt_service_rutine_timer1(void) {
////////////////////////////////////////////////////////////////////////////////////////////////
// Cómputo de segundos completos (13,1072 milisegundos * _nTimer1_for_1_second = 996,1472 milisegundos)
// Todo lo que se controla dentro de este bloque sólo se computa por segundos completos.
////////////////////////////////////////////////////////////////////////////////////////////////
if(++nTimer1Overflow==nTimer1_for_1_second){
// Control de Evento Número 1
if(nSECS_for_Event_1!=0){ // si hay algo que contar ...
if(--nSECS_for_Event_1==0){ // Descuento un segundo y si he terminado ...
flag_for_Event_1=1; // Activo el flag de notificación del Evento 1.
}
}
// Restauro contador de interrupciones para cómputo de segundos completos
nTimer1Overflow=0;
}
////////////////////////////////////////////////////////////////////////////////////////////////
// Cómputo de periodos de tiempo individualizados en NTOFS.
// Dentro de este bloque se computan periodos de n x 13,1072 ms.
////////////////////////////////////////////////////////////////////////////////////////////////
// Control de Evento Número 2
if(nTOFS_for_Event_2!=0){
if(--nTOFS_for_Event_2==0){
flag_Event_2=1;
}
}
}