Also ich schreib das immer etwa anders:
Code:
#include <avr/io.h>

uint8_t input = 0x00; 

int main(void) 
{
   DDRB = 0xff; //Port B = Ausgang
   DDRD = 0x00; //Port D = Eingang 
	while (1)
		{
		input = PIND; //Port D in input einlesen
                PORTB = input; //input auf Port B ausgeben 
		}
			
	return 0;
}
meine methode ist eben etwas anders. ich hab aber schon methoden die deiner ähnlich sind gesehen. doch return 0; solltest mal versuchen das ist vieleicht die lösung ich weis zwar das eigendlich nicht notwendig sein soll aber ich schreibs immer dazu.

und die interrupt.h brauchst du nicht da du keine interrupts nutzt.

hast schon versucht das in der while schleife als if schleife zu schreiben?
Code:
	if (PIND!=0xFF)	
			{ 
            PORTB==0xFF;
			}
			else
			{
            PORTB==0x00;
			}
ist die hardware ok? hast schon probiert die led einfach mit PORTB = 0xff einzuschalten damit du weist das es wirklich geht?

meine lösungen sind vieleicht nicht für jedeen wirklich die lösung (da ich ja die probleme umgehe.....) hauptsache es geht.