Ya lo tienes evaluado en la interrupción del timer. Cuando desborde 2000 veces tienes los 2 segundos. En la propia interrupción has puesto que si se cumplen los dos segundos se ponga a cero el contador de desbordamientos Y ADEMÁS aquí es donde tienes que poner el output_low(PIN_A0); para que también se apague el led.
El encendido si que lo dejas metido donde está para que se encienda cuando el contador llegue a 5.
El código quedaría así:
#include <18F4550.h>
#fuses XT, NOPROTECT, NOWDT
#use delay (clock=4M, crystal=4M)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// VARIABLES GLOBALES
unsigned int8 cont = 0;
unsigned int16 timer0_cont = 0; ///contador de cuantas veces se desborda el timer0
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// INTERRUPCIONES
#INT_EXT //SUMA
void interrupcion_ext0(void)
{
cont ++;
}
#INT_EXT1 //RESTA
void interrupcion_ext1(void)
{
cont --;
}
#INT_TIMER0
void interrupcion_timer0(void)
{
set_timer0(130);
timer0_cont ++;
if (timer0_cont == 2000) //0.001*2000=2seg
{
timer0_cont = 0; //reinicio cuenta
output_low(pin_a0); // apagado del led
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNCION PRINCIPAL
void main (void)
{
output_low(pin_a0);
///////////////////////////////////////////TIMER 0
setup_timer_0(T0_INTERNAL|T0_DIV_8|T0_8_bit); //configuro timer 0
set_timer0(130); //establecer carga
///////////////////////////////////////////HABILITAR INTERRUPCIONES
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(GLOBAL);
while (true)
{
///////////////////////////////////EVALUAR
if (cont == 5)
{
output_high(pin_a0); // enciende el led
timer0_cont = 0; // pone a cero el “crono”
cont = 0; // pone a cero el contador.
}
}
}