#define F_CPU 8000000dontforgettochange
#define BAUD 38400
#define MYUBRR F_CPU/16/BAUD-1

#include <stdlib.h>
#include <avr/io.h>

void USART_Init( unsigned int ubrr)
{
	/* Set baud rate */
	UBRRH = (unsigned char)(ubrr>>8);
	UBRRL = (unsigned char)ubrr;
	/* Enable receiver and transmitter */
	UCSRB = (1<<RXEN)|(1<<TXEN);
	/* Set frame format: 8data, 2stop bit */
	UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

void USART_Transmit( unsigned char data )
{
	/* Wait for empty transmit buffer */
	while ( !( UCSRA & (1<<UDRE)) )
	;
	/* Put data into buffer, sends the data */
	UDR = data;
}

unsigned char USART_Receive( void )
{
	/* Wait for data to be received */
	while ( !(UCSRA & (1<<RXC)) )
	;
	/* Get and return received data from buffer */
	return UDR;
}

int main(void) 
{
	unsigned char data;

	USART_Init ( MYUBRR );

	USART_Transmit('h');
	USART_Transmit('e');
	USART_Transmit('l');
	USART_Transmit('l');
	USART_Transmit('o');

	for(;;)
	{
		data = USART_Receive();
		USART_Transmit(data);
	}
}

