es spielt eigentlich keine rolle ob disp_text() oder sonst eine Sendeaufgabe...
hier der disp_text() code und die UART initialisierung und senderoutine:

Code:
void UART0_init(long int baudrate, long int quarzfrequenz)
{
	int baudwert;
	baudwert = (quarzfrequenz/(baudrate*16))-1;
	UBRR0H = (baudwert>>8);
	UBRR0L = baudwert;
	
	UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
	UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}


void UART0_send_char(char c0)
{
	if(c0=='ü'||'ä'||'ö'||'Ü'||'Ä'||'Ö')  // Falls das zu sendende Zeichen ein Umlaut		
	{										// wird der richtige Charaker zugeordnet	
		switch(c0)
		{
			case 'ü': c0=129; break;
			case 'ä': c0=132; break;
			case 'ö': c0=148; break;
			case 'Ü': c0=154; break;
			case 'Ä': c0=142; break;
			case 'Ö': c0=153; break;
			default: break;
		}
	}
	while((PIND&0x02)==0x02);				// Warten bis das Display bereit ist
	while ( !( UCSR0A & (1<<UDRE0)) );	// Warten bis der Sender bereit ist
	UDR0=c0;								// Zeichen senden
}


/****************************************************************************************
* orientation: h=horizontal, v=vertikal													*
* position: l=linksbündig, c=zentriert, r=rechtsbündig 									*
****************************************************************************************/

void disp_text(char orientation, char position, int x, int y, char *text)
{
	UART0_send_char(27);
	UART0_send_char('z');
	if(orientation=='v')
	{
		switch(position)
		{
			case 'l': UART0_send_char('o'); break;
			case 'c': UART0_send_char('m'); break;
			case 'r': UART0_send_char('u'); break;
			default: UART0_send_char('o'); break;
		}
	}
	else
	{
		switch(position)
		{
			case 'l': UART0_send_char('l'); break;
			case 'c': UART0_send_char('z'); break;
			case 'r': UART0_send_char('r'); break;
			default: UART0_send_char('l'); break;
		}
	}
	UART0_send_char(x);
	UART0_send_char(y);
	UART0_send_string(text);
	UART0_send_char(0);
}