Alle, die in Interruptserviceroutinen UND dem Hauptprogramm verwendet
werden. Du vermeidest damit, dass die Variable vom Compiler wegoptimiert
wird.
Allgemein solltest du Variablen mit einem Wertebereich von 0 bis 3 auch
nicht als int deklarieren. Speicher ist wertvoll und ein char tut es an
dieser Stelle auch. Wenn du Variablen, die größer sind als ein Byte,
auch in einer ISR verwenden willst, solltest du im Hinterkopf haben,
dass das Lesen und Schreiben einer solchen Variable nicht atomar ist.
Das heisst dein 8-bit Prozessor bearbeitet zunächst das erste Byte und
dann das Zweite, kann jedoch nach dem ersten Byte durch einen Interrupt
unterbrochen werden. Wenn in der ISR genau diese Variable geändert wird,
hast du möglicherweise nach dem Rücksprung ins Hauptprogramm dort einen
falschen Wert gelesen, der sich aus einem alten ersten Byte und einem
neuen zweiten Byte zusammensetzt. Man verhindert das durch kurzzeitiges
deaktivieren der Interrupts.
Das ist in deiner Anwendung hier nicht weiter von Bedeutung, aber
vielleicht in der Nächsten.