Moin,

da kann ich hoffentlich auch mal helfen :

erstens sollte die Routine in der While(1) -Schleife stehen, sonst wird's nur einmal ausgeführt und danach nie wieder.
Also quasi
Code:
int main(void){
 while (1){
  // das hier die ganze zeit wiederholen
 }
}
außerdem ist

uint8_t portd; //Per int wird portd hoffentlich als Variable deklariert
portd = PIND; //portd soll immer den Zustand der Pins annehmen

irgendwie seltsam, da würde ich doch direkt PIND nehmen, um den Zustand der Eingangspins auszulesen.

Also z.B. so:
Code:
#include <avr/io.h> 
#include <stdint.h> 

int main (void) { 

 //einmalig die Ports festlegen

 DDRA = 0xff; //Das bedeutet das Port B komplett als Ausgang deklariert ist, denk ich 
 DDRD = 0x00; //Das bedeutet das Port D komplett als Eingang deklariert ist, denk ich 

 while (1) {

  // die folgende Abfrage funktioniert nur, wenn nur an PD0 high anliegt und an allen anderen low!! ich würd's so machen
  // if ((PIND&(1<<0) !=0) ,damit ist der Zustand der anderen Pins egal

  if (PIND==1) //Wenn PortD 1 ist, also PD0 ein Signal "+5V" bekommt soll der komplette Porta 
  { 
   PORTA = 0x00; //auf 0V steuern 
  } 
 else 
 PORTA = 0xff; //wenn PortD nicht 1 ist sollen die pins des PortA 5V haben 
} //ende der While-schleife

return 0; 
}