Hallo,
es wäre nicht schlecht, wenn Du mal die entsprechende Kompilerausgabe mal postest, damit wir kein Copy/Paste machen, und das ganze übersetzen müssen.
Bitte aber nur diese Funktion und nicht das ganze Programm

Gruß Sebastian

P.S.

Außerdem sehe ich hier ein paar Denkfehler
Code:
unsigned char belegung;
Lokale Variablen haben undefinierten Wert, meine ich, also steht irgendwas drin.

und weiter kommt das:
Code:
belegung |= (1 << cA0);
Also veroderst du irgendwas mit cA0
und das
Code:
belegung &= (1 << cSI);
Ergibt immer 0, war das so gewollt ?