Dass das ganze nur einmal richtig funktioniert, liegt daran, dass Ausgänge, die einmal auf 1 gesetzt wurden, nie wieder zurückgesetzt werden.
Denn so was hier "PORTD |= (1<<PD0) | (1<<PD1) | (0<<PD2);" sorgt nicht dafür, dass PD2 auf 0 gesetzt wird.