Interrupciones por cambio de estado en MikroC

Hola a todos! Me propuse hacer un proyecto supuestamente simple pero aquí me encuentro pidiéndoles ayuda :oops:
Uso un pic12f629, mi finalidad es que el micro "espere un tiempo determinado", y si durante este intervalo NO detecta un cambio de estado en alguno de los puertos [GP0:GP3], apague la salida GP4. Ese tiempo lo setea según el nivel, alto o bajo, del puerto GP5 que son 10 o 30 seg respectivamente. Esto lo programé usando las interrupciones por cambio de estado en puerto y por desborde de TMR0. Ya lo simulé con el Proteus y con el Picsimulator y no cambia el nivel de la salida. Desde ya agradezco cualquier ayuda o corrección.
Les paso el código:

Código:
int contint=0;

void interrupt () {
   if (INTCON.F0) {     //Interrup por cambio de estado
      GPIO.GP4 = 0;     //Desactiva salida
      contint=0;
      INTCON.F0=0;
      }
   if (INTCON.F2) {    //Interrup por derborde de TMR0
      contint++;
      INTCON.F2=0;
      }
}
void main () {
  CMCON = 7;          //Desactiva comparador
  OPTION_REG = 0x00;  //Establece preescaler de TMR0 1:2
  OSCCAL = 0xFC;      //Osc interno a 4Mhz
  TRISIO = 0x2F;      //Configura GP4 como salida
  INTCON = 0xA8;      //Interrupciones: Global, por desborde de TMR0 y cambio de estado
  IOC = 0x0F;         //Habilita interrup por cambio de estado en GP0, GP1, GP2 y GP3
  GPIO = 0x00;        //Inicializa puertos
  TMR0=0;

     while (1) {
           if ((GPIO.GP5==1)&&(contint==610)) {  //10 seg de Inactividad
               contint=0;                  //Reinicia el contador de interrup.
               TMR0=0;
               GPIO.GP4=1;                  //Activa salida
           }
           else if ((GPIO.GP5==0)&&(contint==1830)) {  //30 seg de Inactividad
                 contint=0;                            //Reinicia el contador de interrup.
                 TMR0=0;
                 GPIO.GP4=1;                         //Activa salida


              }

     }
}
 
Última edición por un moderador:
Atrás
Arriba