Ich glaube die vorgegebene Sleep() Funktion funktioniert nur bis zu 3 ms. Probier mal diese Erweiterung von Sleep (funktioniert bei mir einwandfrei):

Code:
/* uses 72kHz timer => Sleep(x) = x/72kHz [sec] */
void Sleep(unsigned char time72kHz)
{
    count72kHz = 0;
    while (count72kHz < 72);
}

void sleep(int milliseconds) {
    int i;
    for (i=0; i<milliseconds; i++) {
        Sleep(72);
Dann natürlich sleep() verwenden, nicht Sleep().

Kam denn "I'm pushed on an item!" bei dir überhaupt an?
Wenn ja, dann bau mal am Ende der PollSwitch-Abfrage nochmal ein SerWrite() ein. Dann siehst du im Hyperterminal schon, wie lange die Abfrage + Behandlung dauert.