Das stimmt zwar, aber data wird ja nie ein Wert zugewiesen, daher sollte der ja nicht in die if schleife springen, daran kann's also nicht liegen...

Nun habe ich den Code erweitert:
Code:
//...
volatile unsigned char data;
volatile int changed;

//...

void usart_writeChar(unsigned char c) {
	while (!(UCSRA & (1<<UDRE))) {}
	UDR = c;
	while(!(UCSRA & (1<<TXC))) {}
}

//...

SIGNAL (SIG_UART_RECV) {		
	data = UDR;
	changed = 1;
}

//...

int main (void)
 {
//...
  changed = 0;
  sei();
//...
 while (1)
  {
   if (changed == 1)
    {
  	 if (data == 'l')
      {
//...     
      }
     else usart_writeChar(data);
     changed = 0;
	}
  }
 }
Trotzdem wird der Motor eingeschaltet und das Terminal empfängt dasselbe wie oben. Dabei schicke ich doch gar nichts ab...