#include <avr / io.h>                            
#include <stdio.h>                            //Standart Ein/Ausgabe
#define  TAKT 8000000UL                        //Controllertakt 8 MHz
#define BAUD 9600UL                            //Baudrate 9600Bd
void inituart(void)                            //USART bzw UART initialisieren
{
unsigned char x;                            //Hilfsvariabel
#ifdef UBRRL                                //USART-Schnittstelle
UBRRL = (TAKT / (16 * BAUD)) -1;            //BAudrate
UCSRB |= (1 << TXEN) | (1<< RXEN);
UCSRC |= (1 << URSEL) | (1<< UCSZ1) | (1<< UCSZ0);                                                                
#else                                        //UART-Schnittstelle
UBRR = (TAKT / (16 * BAUD)) -1;                //BAudrate
UCR |= (1 << TXEN) | (1 << RXEN);
#endif
x = UDR;                                    //Empfänger leeren
}

int putch (char X)                            //warten und Zeichen senden
{
#ifdef UCSRA
while ( !(UCSRA & (1 << UDRE)));            //warten solange Sender besetzt
#endif
UDR = 127; ;                                //Sendet Daten (Zeichen)an Sender
return 0;                                    //Marke kein Fehler
}

int getch (void)                            //warte und Zeichen abholen
{
#ifdef UCSRA                                //USART
while (!(UCSRA & (1 << RXC)));                //warte solange Empfänger besetzt ist

#else USRA                                    //UART
while (!(USRA & (1 << RXC)));                //warte solange Empfänger besetzt ist
#endif
return UDR;
}

int getche (void)
{
unsigned char x;
x = getch();
putch (x);
return x;
}