Sind Datenblätter wirklich so schwierig zu lesen ;-)
Das I-Flag legt fest ob überhaupt auf einen Interrupt reagiert wird
Die jeweiligen IE-Flag in den MASK-Register bestimmen welche der
verfügbaren Ints einen Int. auslösen dürfen und
die zugehörigen FLAG signalisieren ob ein Interrupt anliegt.
Bei deinem Timer setzt JEDER Overflow das Interrupt-Flag, dieses
signalisiert vorerst nur dass ein overflow stattgefunden hat. Somit
könntest du auch mit Polling auf einen Interrupt reagieren.
Wenn sowohl General Interrupt Enable als auch das TOIE0 gesetzt sind so
wird nach Setzen des Flags die Interrupt Routine angesprungen.
Gleichzeitig wird das GIE gelöscht (damit kein zweiter Int in die
Arbeitung des ersten pfuscht, und bei Ausführen von reti wieder
gesetzt). Das TOIE0 bleibt während der ganzen Verarbeitung unverändert.
Das TOV0 wird bei Sprung zum Int-Vektor von der Hardware automatsch
gelöscht.
Wenn du in einer Applikation Interrupts öfters enablest und disablest
empfiehlt es sich vorm enable (TOIE0 setzen) das zugehörige flag (TOV0)
zu löschen sonst kann es zu "eigenartigen" Fehlern kommen. Ist
nämlich vor langer Zeit ein Overflow aufgetreten so würde nach enablen
des Ints dieser sofort ausgeführt werden (wäre ja im Flag gespeichert
gewesen).
Ich hoff die Zusammenhänge sind jetzt etwas klarer und ich hab nicht zu
viel zur Verwirrung beigetragen.
grüsse leo9