Noch mal was zu printf: Man kann sie doch benutzen. Man muss dem Compiler nur mit fdevopen() sagen, wie er die Ausgabe machen soll. die Routine zur Ausgabe eines einzelnen Zeichens muss man also selber schreiben, das zusammenstellen der Strings erledigt printf(). Folgender Code ist getestet und funktioniert:

Code:
#include <io.h>
#include <stdio.h>

#define F_CPU        8000000       // 8 MHz Taktfrequenz
#define UART_BAUD_RATE      2400
#define UART_BAUD_SELECT 	(F_CPU/(UART_BAUD_RATE*16l)-1)

int uart_putchar(char c) 
{ 

  if (c == '\n') 
    uart_putchar('\r'); 
  loop_until_bit_is_set(UCSR0A, UDRE); 
  UDR0 = c; 
  return 0; 
} 

void UartInit(void)
  {
  UCSRB = 0x08

  UBRRL = UART_BAUD_SELECT;	
	
  }


int main (void)
{

UartInit(); //Schnittstelle initialisieren 
fdevopen(uart_putchar, NULL, 0); 

printf ("HelloWorld");

}
Gruß,
askazo