Also der gepostede Code erweckt garantiert nur den Eindruck das alles funktioniert, auch mit PIND == 0xff als while Bedingung. In wirklichkeit rennt der Controller jedes mal in einen Rest sobald PIND == 0xff nicht mehr erfüllt ist. Das ist hochgradiger Pfusch

Programme die innerhalb von main keine while(1) Schleife enthalten, sind meistens böse.

Was du machen möchtest, sollte man so realisieren.

Code:
#include <avr/io.h>
#include <util/delay.h>


int main(void){
   DDRB |= 0xff;
   DDRD |= 0x00;

   while(1){
       if(PIND == 0x00){
            PORTB &= ~0xff;
            _delay_ms(1000);
            PORTB |= 0xff;
            _delay_ms(1000);
        }
   }
return 0;    //Diese Zeile darf niemals ausgeführt werden! Ansonsten -> undefiniert, meist Reset
}