Der Code ist nicht von mir, sondern von Peter Dannegger. Ich hatte ihn
lediglich analysiert und erklärt, weil in diesem Thread danach gefragt
wurde. Dabei gab es einige Missverständnisse, was den Thread auf den
ersten Blick etwas konfus erscheinen lässt.
Was ist denn eigentlich an einem Timer-Interrupt so schwer zu
verstehen?
Der Timer erzeugt alle n Takte einen Interrupt ("Pulsschlag" des
Programms). Am Einfachsten geschieht das mit dem Überlauf des Timers 0.
In der ISR wird dann der Timer wieder auf Startwert gesetzt (falls man
ihn nicht frei durchlaufen lassen möchte) und andere zeitabhängige
Dinge (Tastenentprellung, Verzögerungszähler, Zeitzählung, ADC-Abfragen
usw.) erledigt bzw. angestoßen. Wird in der ISR das SREG verändert, dann
ist noch das SREG zu sichern und wiederherzustellen, damit im
Hauptprogramm keine "Fehlentscheidungen" provoziert werden.
...