Das du den Rückabewert in einer unsigned char Variable speicherst, ist schon richtig.
Jedoch wird sie im Vergleich wahrscheinlich in signed umgewandelt.
Versuch es mal auf folgende Arte:
Code:if (sw == (unsigned char)0x01) StatusLED(RED); /* ... */
Lesezeichen