Beim einem AtMega kann eine Anweisung die mehrere Takte dauert sehr wohl von einem Interrupt unterbrochen werden.
Zitat Zitat von ATmega32 Datenblatt, Seite 13
If an interrupt occurs during execution of a multi-cycle
instruction, this instruction is completed before the interrupt is served.
Alles andere wäre auch sinnlos...
stell dir mal vor der AVR würde mitten in einem CALL (4 Zyklen) her gehen, und irgendwas anderes tun ... wo soll er dann nach der ISR hin springen?


Es gibt Programme die nur auf Ereignisse reagieren, die Interrupts auslösen. Man könnte fast sagen, die ereignisgesteuert sind. Die "Hauptschleife" bei diesen Programmen ist leer.
Man könnte ein Programm so schreiben, aber empfehlen würde ich es nicht, da die ISRs sonst zu groß werden. Man stelle sich nur mal ein Programm mit 4 oder 5 Interrupts vor, bei denen die Routinen derart lang sind, daß sie sich ständig gegenseitig unterbrechen ... viel Spaß beim debuggen.

Meiner Meinung nach sollte man in den ISRs nur jeweils einzelne Flags setzen, und vielleicht noch einige Variablen ändern. Die eigentliche Arbeit, also komplexe Berechnungen etc. erledigt man dann sinnvollerweise woanders, nämlich in der Hauptschleife ("Flag XY gesetzt? gut, dann führe Funktion Z aus")