Interrupción del disparador de MikroC en el compilador

2

Estoy intentando probar la función de interrupción en casa sin una placa para presionar botones, etc. Renuncié a mi código y copié un ejemplo, pero todavía no puedo hacer que funcione. A continuación se muestra el código de ejemplo.

En el bucle while, activa los bits, pero no se llama a la interrupción. Tengo un descanso establecido en la interrupción. Tal vez esto no es posible probar?

El resultado final es que necesito probar si se presionan los botones 1 y 2. Sé cómo hacerlo sin la interrupción, pero necesito seguir la lección.

El profesor quiere que usemos la interrupción. ¡Gracias por ayuda!

unsigned short sync_flag;
char bad_synch;            // variable for detecting bad synchronization
int cnt = 0;               // Global variable cnt

void Interrupt() {
  // This is external INT0 interrupt (for sync start)
  //   - once we get falling edge on RB0 we are disabling INT0 interrupt

  if (INT0IF_bit && INT0IE_bit) {
     cnt = 0;
     sync_flag = 1;
     INT0IF_bit = 0;
     INT0IE_bit = 0;
     PORTD = 0xFF;
   }
}

void main() {

  ADCON1 = 0x0F;           // AD converter off
  CMCON = 7;
  sync_flag = 0;           // sync_flag is set when falling edge on RB0 is detected

  while(1){

  TRISB = 0xFF;            // Set PB0 as input
  TRISD = 0x00;            // Set PortD as output
  PORTD = 0x00;            // Starting value for PortD

  INTEDG0_bit = 0;         // Interrupt on falling edge on RB0
  INT0IF_bit = 0;          // Clear INT0IF
  INT0IE_bit = 0;          // turn OFF interrupt on INT0
  GIE_bit = 1;             // enable GIE

  while(1){
      bad_synch = 0;       // set bad synchronization variable to zero
      sync_flag = 0;       // reseting sync flag
      INT0IF_bit = 1;
      INT0IE_bit = 1;      // enable external interrupt on RB0 (start sync procedure)
    }
  }
}
    
pregunta Mark Worsnop

0 respuestas

Lea otras preguntas en las etiquetas