Hi zusammen,
so richtig will's immernoch nicht klappen...
Das Schreiben scheint zu klappen, aber ich hab echt das Gefühl, dass der µC nicht mit dem Lesen klar kommt.

Folgender Code:
Code:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#define Pin1 0
#define Pin2 1
#define Pin3 2
#define Pin4 3
#define Pin5 4
#define Pin6 5
#define Pin7 6
#define Pin8 7

#define READ  1
#define WRITE 2

#define F_CPU 8000000
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)

volatile unsigned char data;

void usart_init(int Enable, int Interupts) {
    if (Enable == READ)         UCSRB = (1<<RXEN);
	if (Enable == WRITE)        UCSRB = (1<<TXEN);
	if (Enable == READ + WRITE) UCSRB = ( (1<<RXEN) | (1<<TXEN) );

    if (Interupts == READ)         UCSRB |= (1<<RXCIE);
	if (Interupts == WRITE)        UCSRB |= (1<<TXCIE);
	if (Interupts == READ + WRITE) UCSRB |= ( (1<<RXCIE) | (1<<TXCIE) );
	
    UBRRL = (unsigned char) USART_BAUD_SELECT;
}

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

unsigned char usart_readChar(void) {
    while(!(UCSRA & (1<<RXC))) {}
    return UDR;
}

void usart_writeString(unsigned char *string) {
    while (!(UCSRA & (1<<UDRE))) {}
	while ( *string)
		usart_writeChar(*string++);
}

SIGNAL (SIG_UART_RECV) {		
	data = UDR;
}

int main (void)
 {
 usart_init(READ + WRITE, READ);
  DDRD  = 0xFF;
  PORTD = 0x00;  
  usart_writeString("Hello World");
  sei();
 
 while (1)
  {
  	if (data == 'l')
     {
     PORTD = (1 << Pin6);
     usart_writeString("[Motor left]");
    }
   else if (data == 'r')
    {
     PORTD = (1 << Pin7);
     usart_writeString("[Motor right]");
    }
   else if (data == 's')
    {
     PORTD = 0x00;
     usart_writeString("[Motor stop]");
    }
   else usart_writeChar(data);
  }
 }
Folgende Ausgabe auf dem Terminal:
Hello World[Motor right]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]ht]
...
Das seltsame ist, dass ich über das Terminal gar nichts schicke, was das USART empfangen könnte.
Trotzdem wird die IF Schleife (data == 'r') ausgelöst, dabei kann data gar nicht 'r' sein