Hallo Stefan,
in deiner Antwort sind einige Ungenauigkeiten, die so nicht stehen bleiben sollten.
Zitat Zitat von reinhars
-In der Interruptroutine nur ein Bit setzen und dann in der Hauptschleife dieses Bit auswerten und rücksetzen. Das vermeidet viele Probleme weil wenn gerade ein Interrupt ausgeführt wird kein anderer Interrupt greifen kann bzw. nur ein Interrupt mit höherer Priorität greifen kann.
Während ein Interrupt in seiner ISR behandelt wird, kann kein anderer Interrupt ausgeführt werden. Auch ein Interrupt mit höherer Priorität kann diesen nicht unterbrechen.
Prioritäten sind nur interessant, wenn zu einem Zeitpunkt gleich mehrere Interrupts zur Ausführung anliegen. Dann und nur dann wird tatsächlich nach der Reihenfolge abgearbeitet, die im Datenblatt angegeben ist. Ansonsten verwenden die AVRs keine Prioritäten.
Zitat Zitat von reinhars
-Ein debouncen des Tasters kannst du dir Sparen, wenn du nach der Auswertung in der Hauptschleife den Interrupt ausschaltest und nach Abarbeitung wieder einschaltest.
Das Disablen des Interrupts führt nur dazu, dass momentan keine ISR aufgerufen wird. Trotzdem ist der Interrupt intern vermerkt und führt nach Enable Interrupt sofort zu dessen Ausführung. Ein Prellen kannst du dadurch also nicht beseitigen.


Zitat Zitat von reinhars
Als Grundregel gilt: Interrupts so kurz wie möglich.
Das ist jedenfalls die richtige Vorgehensweise, führt aber nicht unbedingt zu problemloser Ausführung. Man muss die Möglichkeit der Unterbrechung des Ablaufs mit Verstand einsetzen und sich überlegen, wann sollen welche Code Teile ausgeführt werden und welche Teile möchte ich vor Unterbrechung schützen.
Es macht wenig Sinn, eine ISR auf das Setzen eines Flags zu beschränken um dann in der Hauptschleife sofort die Interrupts zu sperren. Dann lege ich die Befehle lieber gleich in die ISR.