Zum einen schiebst du ja (max. 7 mal) nach rechts, da kann es egal sein, ob Einsen nachkommen, wenn du immer nur das letzte Bit prüfst. Zum anderen, ich vermute sehr, dass Null-Bits nachgeschoben werden, weiss aber nicht, ob das in ANSI-C eindeutig definiert ist.

PORTD |= (1<<1); //setzen
PORTD &= ~(1<<1); //Rücksetzen
das wird ohne kleines Delay nicht klappen, vermute ich.

Grüße