Ok, nun hab ich die init umgeschrieben:
Code:
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;
}
Aber das Resultat war noch nicht zufriedenstellend, daher hab ich in die SIGNAL noch folgendes reingepackt:
Code:
	usart_writeChar('[');
	usart_writeChar(data);
	usart_writeChar(']');
Man soll zwar net im Interupt wieder schreiben, aber naja....

Resultat is jedenfalls folgendes:
Hello World[H][e][r][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[][[]...
Hmm

Warum muss man das egtl mit & verbinden und kann net mit == vergleichen?
Und muss ich dann vllt in der 3ten iif (Enable & WRITE & READ) schreiben?