Wenn deine ISR aktiv ist, dann wird sie praktisch dauerhaft aktiv sein.
Das delay(1000) sorgt dafür, daß nach RETI() schon der nächste Int
ansteht. In so einem Fall führt ein AVR genau einen Befehl in der
Hauptschleife aus, bevor wieder die ISR dran ist. Und ein delay(1000) in
der Hauptschleife muß 1..20 Millionen Taktzyklen "vernichten", von denen
dann aber nur einer je Sekunde ausgeführt wird. Dauert also etwas
länger!
Zudem wird Reti() dafür sorgen, daß je ISR-Aufruf einige Bytes auf dem
Stack liegen bleiben. Nach einiger Zeit endet das bestenfalls in einem
"Soft-Reset".
Also:
- ISR() braucht kein reti(), das macht es schon selbst
- delay() in ISR ist böse, denn
- delay() in Mainloop erwartet, daß die geplanten Takt auch von der
Mainloop ausgeführt werden. Werden 50% davon in der ISR ausgeführt,
dann dauert das delay doppelt so lang. Werden 99.999% der Takte in der
ISR ausgeführt, dann ...