Die Zeile "x ^= x" ist falsch, da x immer 0 bleiben würde. Das sollte eigentlich "x ^= 0xff;" heißen. Diese Zeile ist gleichbedeutend mit "x = x ^ 0xff;", das Zeichen "^" bedeutet in der Sprache C "bitweises XOR". Die Wahrheitstabelle eines XOR ist (A & B sind Eingänge, Q ist der Ausgang):
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
Sprich wenn A und B unterschiedlich sind, ist der Ausgang 1, sonst 0.
Das kann man z.B. zum Invertieren einer Led nutzen. Z.B. "PORTB ^= (1<<PB0);" ändert jedes mal den Ausgang PB0.
Das mit dem XOR habe ich geschrieben, weil du oben geschrieben hast ".....(x == Low) dann x = high" und dann "...(x == high) dann x = low", das wäre eine einfache Invertierung.
MfG Hannes
Lesezeichen