Volatile teilt dem Compiler mit, daß er diese Variable im Ram speichern soll. Ansonsten könnte er das in ein Register speichern und dir IRQ Routine würde von einer Änderung dieser Variable nichts mitbekommen oder umgekehrt.
Ich weiß immer noch nicht, welche Signale Dein Hallencoder liefert. Soll das ein normales Ausgangssignal eines Incrementalencoders sein ? Wenn ja, kann das was Du da machst, auf keinen Fall funktionieren.
So sieht ein normales Signal eines Encoders aus:
Wahrheitstabelle Encoder

Encoder1alt Encoder1neu Encoder2alt Encoder2neu Richtung
1 1 1 1 Ungültig
1 1 1 0 „++“
1 1 0 1 „--“
1 1 0 0 Ungültig
1 0 1 1 „--“
1 0 1 0 Ungültig
1 0 0 1 Ungültig
1 0 0 0 „++“
0 1 1 1 „++“
0 1 1 0 Ungültig
0 1 0 1 Ungültig
0 1 0 0 „--“
0 0 1 1 Ungültig
0 0 1 0 „--“
0 0 0 1 „++“
0 0 0 0 Ungültig

Encoder1 und Encoder2 sind dabei die beiden Encoderausgänge.
Darauf habe ich mein Programm aufgebaut und es funktioniert hervorragend.

Gruß
pctoaster