el programa debe estar malo pero voy a tratar de acplicarles lo que yo quiero hacer con la interrupciones.
#define INTS_PER_SECOND 15 //(4000000/(4*256*256))
byte seconds; //Número de interrupciones restantes antes de que
byte int_count; //transcurra un segundo.
void main(void)
{
enable_interrupts(global);
//enable_interrupts(int_rda);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
enable_interrupts(int_rtcc);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
while(1)
{
switch (estado)
{
case 0:
{
if((counter==1)&&(TOIF==1)// siempre en el estado 0, y si llega una inetrrupcion ext, va a ella.
{
estado=1;
}
bit_set(port_d,0);
bit_clear(port_d,1);
break;
}//fin case 0
case 1:
{
counter=0;
bit_clear(port_d,0);
bit_set(port_d,1);
break;
}//fin case 1
}//fin while
}//fin main
//interrupciones
#int_ext
void encendido (void)
{
bit_set(port_d,2); //cuando llega una interrupcion ext
//entra a la función como el counter==0
//y se supone que el timer0 no lo he
//enecndido no entra en el if
if ((counter==1)&&(TOIF==1))
{
estado=0;
counter=0;
}//fin if1
counter=1;
set_rtcc(0); //con esto se enciende el Timer0?????? no lo sé
if((counter==1)&&(TOIF==0)) //debería pasar al estado 1 ya que
//counter ==1 y no se a desbordado
//el tmr0
{
estado=1;
}//fin if2
delay_ms(1000);
bit_clear(port_d,2);
}//FIN INTERRUPCION EXT
#int_rtcc
void rtcc (void)
{
bit_set(port_d,3);
if(--int_count==0)
{
++seconds;
int_count=INTS_PER_SECOND;
if(seconds==3)//a este punto se ha temporizado 3 segundos
{
seconds=0;
}//fin if2
}//fin if1
delay_ms(1000);
bit_clear(port_d,3);
}//FIN INTERRUPCION RTCC