Für dieses Beispiel ist es egal, wie du an TIFR ran gehst.
Sobald du in TIFR an eine Stelle eine 1 schreibst, wird dieses Bit gelöscht. Mit einem |= wirst du also *alle* 1-Bits löschen! Wenn nur Timer2-Overflow ne Rolle spielt, ist es egal. Aber wenn du mehrere Timer oder andere Timer-Ereignisse hast, suchst du dir womöglich den Wolf, warum (scheinbar) Timer-Ereignisse verloren gehen...
TIFR kannst du ebenso löschen mit
TIFR = TIFR; ...
Auf TIFR sollte man daher nie mit |= zugreifen, da das alles löscht. (Für INT-Flags gilt ähnliches)
Der Code in dem while schein ok.
Ich war halt nicht sicher, wie die Priorität der Operatoren in TIFR & 1<<TOV2 ist, also ob das ein
(TIFR & 1)<<TOV2 ist oder ein TIFR & (1<<TOV2). Es ist zum Glück letzteres. Damit können die Klammern tatsächlich entfallen.
Die 7 für fak hab ich einfach so gewählt, hätte auch 42 sein können. Mal rumspielen, was besser tönt. Die ">> 7" muss natürlich bleiben und hat nix damit zu tun.
Lesezeichen