//********************************************************************
//RUTINA DE INTERRUPCIONES
//********************************************************************
static void interrupt isr(void)
{
di();
if (TMR0IF==1)
{
if (RB0 = 0) {RB0 = 1;__delay_us(10);RB0 = 0;} else {RB0 = 1;__delay_us(10);RB0 = 0;}
if (T1GVAL == 0)
{
TMR1ON = 0; //STOP TIMER1 - NOT REALLY NECESARY
COUNT_L = TMR1L; //SAVE ITS CONTENTS
COUNT_H = TMR1H;
switch (CPSCON1) //VEMOS QUE CANAL ES EL ACTIVO
{
case 0x0F:
{
CPSCON1 = 0b00001111; //AQUI PREPARAS EL REGISTRO PARA EL SIGUIENTE CANAL PARA LA PROXIMA VEZ
if ((CAPCH15_L ==0x00) && (CAPCH15_H == 0x00))
{
//ISFIRSTTIME_15:
CAPCH15_L = (PRESSTHRESHOLD_L - COUNT_L);
CAPCH15_H = (PRESSTHRESHOLD_H - COUNT_H);
goto BUTTONCHEKEND;//GOTO BUTTON CHECK ENDS;
}
else
{
COUNT = COUNT_H;
COUNT = COUNT <<8;
COUNT = COUNT | COUNT_L;
CAPCH15 = (CAPCH15_H<<8);
CAPCH15 = CAPCH15 | CAPCH15_L;
if (COUNT < CAPCH15)
{ //AL SER MAS PEQUEÑO ACTUAMOS
RB2 = 1;
goto BUTTONCHEKEND;
}
else
{ //ES QUE ESTA NO PULSADO (RELEASE)
//CHECAMOS DE NUEVO PERO AÑADIENDO EL RELEASE THRESHOLD PARA TENER HYSTERESYS
CAPCH15_L= (CAPCH15_L + RELEASETHRESHOLD_L);
COUNT_L = (COUNT_L - CAPCH15_L);
PASSARG1 = (PRESSTHRESHOLD_L + RELEASETHRESHOLD_L);
if (COUNT_L > PASSARG1) //EST QUE NO SE HA PULSADO
{
RB2=0;
goto BUTTONCHEKEND;
}
break;
}
}
break;
}
//aqui chequear mas canales si quieres
default://la opcion por defecto
{
}
}//fin del switch
BUTTONCHEKEND:
// TMR1ON = 1; //nota de truco de graham
TMR0 = 0xFF;
mm: if (T1GVAL == 1)
{
TMR1L=0;
TMR1H = 0;
TMR0 = 0;
TMR1ON = 1;
TMR0IF = 0;
ei();
return; //sale de la interrupción
}
else
{
goto mm;//BUTTONCHEKEND;
}
}
else
{
goto BUTTONCHEKEND;//GOTO BUTTON CHECK ENDS;
}
//ei();
}
else //si no es por timer0
{
TMR1L=0;
TMR1H = 0;
TMR0IF = 0;
TMR0 = 0;
TMR1ON = 1;
ei();
return;
}
}//fin de isr
//