Ich vermute auch das es Tastenprellen ist.
Das mit dem delay nach dem return stimmt ebenfalls. Bei C benötigst du kein return aus der ISR (außer es ist gewollt).
Delay sollte man auch in einer ISR vermeiden. Eine ISR sollte auf ein Ereignis so schnell wie möglich reagieren, das Flag wird aber erst bei beenden der ISR zurückgesetzt. Du sperrst somit alle INT (auch Timer,....).
Außerdem gilt bei ISR: So wenig wie möglich, so viel wie nötig. Die ISR sollte so schnell wie möglich abgearbeitet werden. Langwierige Berechnungen (z.b. Berechnungen mit Float) außerhalb der ISR (wenn nötig einfach ein Flag setzten und das im Hauptprogramm abfragen).
MfG Hannes
Lesezeichen