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);
/* ... */