Ich bin neu in PIC-Programmierung und ich verwende MPLAB. Ich habe eine Frage bezüglich Unterbrechung. So was ich tun möchte, wenn ich einen Knopf drücke, dann möchte ich LED 0 einschalten, und wenn ich den Knopf loslasse, dann schalte LED 1 an. Ich dachte, der Code, den ich geschrieben habe, macht Sinn aber es hat nicht funktioniert.PIC Programmierung Interrupt Fehlfunktion.
Hier ist was passiert. Nehmen wir an, der Anfangszustand des Interrupt-Pins ist niedrig (0), wenn eine Taste gedrückt wird. Dann leuchtet die LED 0 und wenn ich die Taste loslasse, leuchtet die LED 1. Wenn ich den Knopf erneut drücke, erwarte ich, dass LED 0 an ist, aber LED 1 bleibt an und ändert nie den Zustand.
Ich habe letzte Zeile hinzugefügt, um den Status des Interrupt-Pin zu sehen, und sobald der Interrupt hoch ist, ändert es nie zu niedrig .. Können Sie mir bitte beraten, was ist mein Missverständnis?
Vielen Dank im Voraus!
Hier ist mein Code:
void interrupt ISR(void)
{
if(INTCONbits.INTF)
{
nextLED = 1;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
else
{
nextLED = 0;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
nextLED = INTCONbits.INTF + 2;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
// Interrupt Enable settings
INTCONbits.INTE = 1;
INTCONbits.TMR0IE = 1; // Enable TMR0 interrupts
INTCONbits.TMR0IF = 0; // Clear TMR0 interrupt flag
INTCONbits.GIE = 1; // Enable global interrupts
'__delay_ms (250)' in einem Interrupt-Hanlder ist eine ** sehr ** schlechte Idee. – Olaf
Ich verstehe, dass ich keinen Interrupt schreiben sollte, der lange Verarbeitungstyp hat. Der Zweck dieses Programms ist, ich versuche zu verstehen, wie der Interrupt funktioniert, also schrieb ich visuelle Präsentationsausgabe (LEDs). Dies ist ein interruptgesteuerter Code, und die Hauptfunktion ist im Grunde leer. Ich würde mich freuen, wenn Sie mir einen Vorschlag machen können. –