Hallo Stefan,
in deiner Antwort sind einige Ungenauigkeiten, die so nicht stehen bleiben sollten.
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.Zitat von reinhars
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.
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 von reinhars
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.Zitat von reinhars
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.
Lesezeichen