Hallo booty,
eigentlich steht alles in dem Link, den ich Dir gepostet habe drin, aber egal, ich erkläre es nochmal

1. Problem:
Code:
#define USART_RXC_vect _VECTOR(14)
Das ist unnötig, kann eventuell schaden, lass das weg, das ist Aufgabe von Compiler (Präprozessor) den Vektor richtig zuzuordnen.
2. Problem:
Code:
uint8_t buffer;
buffer muß als volatile deklariert werden, warum, sehe link oben
Code:
volatile uint8_t buffer;
3. Problem
Code:
UCSRB = (1<<TXEN) | (1<<RXEN);
Ja, hier mußt Du noch den Interrupt einschalten, sonst wird er nie ausgeführt, also
Code:
UCSRB = (1<<TXEN) | (1<<RXEN)|(1<<RXCIE);
4. Problem, der Interrupt sollte etwa so aussehen:
Code:
ISR(USART_RXC_vect) 
{ 
buffer = UDR; 
}
Du brauchst hier keine flags mehr setzen, oder auf irgendwas warten.
5. Problem, es fehlt wieder die Endlosschleife, mach das etwa so:
Code:
int main(void) 
{ 
DDRA = 0xff; 
uart_init(); 
sei(); 
for(;;){
led_init(); 
}
return 0;
}
So dann schaumal...
Anmerkung noch Du kannst auch anstatt von 0x31 '1' schreiben, ist vielleicht einfacher zu lesen(wenn man die ASCII Werte nicht im Kopf hat.

Viel Erfolg

@kater,
Kein Problem, der Dragon hat sich auch gefreut mal ein paar Bytes schaufeln zu dürfen, außerdem wollte ich es auch wissen...
Gruß Sebastian