Der kleine aber feine Unterschied ist, dass "Ziffer" in einer Interruptroutine geändert wird.

Deklariere die Variable Ziffer mal als

volatile uint8_t Ziffer;

dann sollte es klappen.

Zur Erklärung:
Wenn eine Variable in einer Interruptroutine ändert und auch außerhalb der ISR verwendet wird, muss diese immer mit "volatile" deklariert werden. Der Compiler versucht, den Programmcode zu optimieren. So will er auch unnötiges neueinlesen von Variablen aus dem RAM in die Arbeitsregister verhindern. Da der Compiler aber nicht vorhersagen kann, wann eine Interruptroutine ausgeführt wird, kann es dabei Probleme geben. Mit "volatile" sagt man dem Compiler, dass er vor jeder Verwendung den aktuellen Wert der Variablen überprüfen soll.

askazo