Hi,
ich hab das unten angehangene Program auf meinen ATMega32 gefalshed ich bekomme allerdings egal welches zeichen ich sende immer das gleiche zurück (À).

SYSCLK und BAUD sind natürlich angepasst

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

#define SYSCLK		7372800
#define BAUD		38400UL
#define UBRR_BAUD	((SYSCLK/(16*BAUD))-1)

/* USART initialisieren */
void uart_init(void);
void init(void);

int main(void)
{
	/* USART initialisieren */
	uart_init();

	sei();

	/* Nichts tun. Die Interrupts erledigten den Rest */
	while (1)
		;
}

void uart_init(void)
{
	/* Baudrate einstellen ( Normaler Modus ) */
	UBRRH = (unsigned char) (UBRR_BAUD>>8);
	UBRRL = (unsigned char) UBRR_BAUD;

	/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);

	/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

/* Interrupt wird ausgelöst sobald neue Daten im USART-Empfangspuffer liegen */
SIGNAL(SIG_UART_RECV)
{
	unsigned char buffer;

	/* Daten aus dem Puffer lesen ... */
	buffer = UDR;
	
	/* ... warten bis der Sendepuffer leer ist ... */
	while ( !( UCSRA & (1<<UDRE)) )
		;
	/* ... und gleich wieder zurück schicken */
	UDR = buffer;

}
void init(void)
{
	DDRB = 0xff;	// PortB als Ausgang deklarieren
	PORTB = 0x00;	// Ports auf LOW schalten
}