Asi como dice PalitroqueZ, no hay necesidad de tener 3 timers, utiliza el de 16 bits ya que te permite mas facilmente llegar al segundo.
Dentro de la interrupcion deberias tener la comparaciones, el restado de las variables del tiempo,y la activacion de la salida. Eso habilitado por el boton
if(!input(pin_b3))
{
while(!input(pin_b3))
arraque=1
led_verde
}
luego en la interupcion que siempre estara corriendo, preguntas, si arranque es 1 y haces lo que tengas que hacer. Tambien otra cosa
if(segundos_1==0 && minutos_1==0)
{
segundos_1=0;
minutos_1=0;
disable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER3);
led_naranja
}
Señale 2 cosas en ese codigo. le faltaba un & , uno es un bitwise AND, entre bits ( & ) y el otro un logical and ( && ) entre condiciones True/False, no se como funcionara en ese caso pero por las dudas me aseguro.
Y la otra que sentido tiene poner segundos_1 y minutos_1 a 0 si la condicion para entrar es que sean esos valores?,
En tu interrupcion quedaria algo asi:
if(arranque))
{
if(segundos_1==0)
{
if(minutos_1!=0)
{
segundos_1=59;
minutos_1--;
}
}
else
{
segundos_1--;
}
}
Aunque si notas vas a tener el mismo codigo 3 veces, podrias hacer una funcion
void disminuirtiempo(*seg,*min)
{
if(*seg==0)
{
if(*min!=0)
{
*seg=59;
*min--;
}
}
else
{
*seg--;
}
}
Y llamarla:
if(arranque)
{
disminuirtiempo(&segundos_1,&minutos_1);
disminuirtiempo(&segundos_2,&minutos_2);
disminuirtiempo(&segundos_2,&minutos_3);
}
Es tu decision como lo vas a hacer, yo di algunos "ejemplos" por no decir tire codigo por tirar xD