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)
}
}
}