#include <avr/io.h>
#include <util/delay.h>

#define USART_BAUDRATE 4800
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

void init_serial(void);
void serial_msg1(void);

int main(void)
{
	DDRA = 0XFF;
	
	init_serial();
	
	serial_msg1();
	
	return 0;
}

void init_serial(void)
{
	UCSRB |= (1 << RXEN) | (1 << TXEN);
	
	UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
	
	UBRRL = BAUD_PRESCALE;
	
	UBRRH = (BAUD_PRESCALE >> 8);
	
	UCSRC = UCSRC & 0b11110111;			//stop bit

}

void serial_msg1(void)
{
	while((UCSRA & (1 << UDRE)) == 0) {};
	UDR = 10;
	
	while((UCSRA & (1 << UDRE)) == 0) {};
	UDR = 13;
	
	int i;
	
	unsigned char msg1[]="Welcome to AVR programming. Hello World 0123456789 !@#$%^&*()_+";
	
	for(i = 0 ; i <= 75 ; i++)
	{
		while((UCSRA & (1 << UDRE)) == 0) {};
		
		UDR = msg1[i];
		
		PORTA = i;
		_delay_ms(2000);	
		
	}

}
