Hallo Forum,
zum Testen und zum Erlernen der Interrupt-Behandlung, habe ich ein
kleines Programm geschrieben, was mittels Interrupt von einem Taster
(also GPIO) eine LED an- bzw. ausschaltet.
1 | #pragma vector=P0INT_VECTOR
|
2 | __interrupt void Port0_ISR(void) {
|
3 | if (PICTL & 0x01) // bei fallende Flanke (Port Interrupt Control)
|
4 | P1 ^= 0x01; // LED invertieren
|
5 | PICTL ^= 0x01; // Flankeneinstellung invertieren
|
6 | P0IFG = 0x00; // Flags löschen (vorsichtshalber alle)
|
7 | }
|
Beim ersten mal klappt das ganze auch ganz gut, die LED beginnt zu
leuchten. Danach wird die ISR aber ständig wieder aufgerufen, obwohl
nicht gedrückt oder losgelassen wurde.
Der Taster ist nicht entprellt, aber wenn ich einen Breakpoint in die
ISR setze (als schlechte Methode zur Entprellung) passiert genau das
gleiche.
Hab ich was übersehen? Gibt es noch irgendwo ein Flag, was gelöscht
werden muss?
Danke schon mal
mario