Nun kommt was anderes an, aber immernoch nicht das richtige...

Mein Programm:

Code:
#define F_CPU 3686400
#include <avr\io.h>
//----------------------------------------------------------------------
void uartInit()
{
	uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*9600) - 1); 
  
    UBRRH = (uint8_t) (ubrr>>8); 
    UBRRL = (uint8_t) (ubrr); 
  
    // UART Receiver und Transmitter anschalten 
    // Data mode 8N1, asynchron 
    UCSRB = (1 << RXEN) | (1 << TXEN); 
    UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); 
}
//----------------------------------------------------------------------
void uartPutChar(char data)
{
	//warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
	while (!(UCSRA&32));
	//sende
	UDR=(uint8_t)data;
}
//----------------------------------------------------------------------
void print(char buffer[])
{
	for (int i=0;buffer[i]!=0;i++)
		uartPutChar(buffer[i]);
}
//======================================================================
main ()
{
	uartInit();
	while (true) // Mainloop
	{
		print("x");
	}
}

Edit:
Ich habe das Beispiel aus der Wiki übernommen (die ohne Interupts):

Code:
#define 	F_CPU 3686400	// Taktferquenz des myAVR-Boards
#include	<avr\io.h>		// AVR Register und Konstantendefinitionen
#include	<util\delay.h>

void uart_init()
{
	uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*9600) - 1);

	UBRRH = (uint8_t) (ubrr>>8);
	UBRRL = (uint8_t) (ubrr);

	// UART Receiver und Transmitter anschalten 
	// Data mode 8N1, asynchron 
	UCSRB = (1 << RXEN) | (1 << TXEN);
	UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);

	// Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) 
	do
	{
		UDR;
	}
	while (UCSRA & (1 << RXC));
}

int	uart_putc (const uint8_t c)
{
	// Warten, bis UDR bereit ist für einen neuen Wert 
	while (!(UCSRA & (1 << UDRE)))
		;

	// UDR Schreiben startet die Übertragung 
	UDR = c;

	return 1;
}

uint8_t	uart_getc_wait()
{
	// Warten, bis etwas empfangen wird 
	while (!(UCSRA & (1 << RXC)))
		;

	// Das empfangene Zeichen zurückliefern 
	return UDR;
}

int	uart_getc_nowait()
{
	// Liefer das empfangene Zeichen, falls etwas empfangen wurde; -1 sonst 
	return (UCSRA & (1 << RXC)) ? (int) UDR : -1;
}

//----------------------------------------------------------------------
main ()						// Hauptprogramm, startet bei Power ON und Reset
{
	uart_init();

	//...					// hier Init-Code eintragen
	do 
	{
		// Schleifenanfang Mainloop
		uart_putc('x');
		_delay_ms(50);
	}
	while (true);			// Schleifenende Mainloop
}
Aber immernoch das selbe Ergebnis.