atmeag 164p uart/usart problems

c code :
Incorrectly Prints:
writes hieroglyphs

#define BAUDRATE 57600
#define F_CPU 14745600UL
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)

void USART_init(void);
unsigned char USART_receive(void);
void USART_send( unsigned char data);
void USART_putstring(char* StringPtr);


void USART_init(void){
	
	
	UBRR0H = BAUD_PRESCALLER>> 8;
	UBRR0L = BAUD_PRESCALLER & 0xFF;
    //UCSR0C = (1<<UCSZ00)|(1<<UCSZ00);        ///test 3
	UCSR0C = (1<<UCSZ00)|(1<<UCSZ00);         // Asynchron 8N1
	UCSR0B |= (1<<RXEN0);                     // Enable UART RX
	UCSR0B |= (1<<TXEN0);                     // Enable UART TX
	UCSR0B |= (1<<RXCIE0);
	UCSR0A = 0x00;
	
	
	
//	UBRR0H = (unsigned char)(BAUD_PRESCALLER>>8);
//	UBRR0L= (unsigned char)BAUD_PRESCALLER;
	/* Enable receiver and transmitter */                             //test 2
//	UCSR0B = (1<<RXEN0)|(1<<TXEN0);
	/* Set frame format: 8data, 2stop bit */
//	UCSR0C = (3<<UCSZ00);
	
	
	
	//UBRR0H = (BAUD_PRESCALLER>>8);
//	UBRR0L = (BAUD_PRESCALLER);
//	UCSR0B = (1<<TXEN0)|(1<<RXEN0);   
//	UCSR0C|= (1<<UCSZ00)|(1<<UCSZ11);                                 //test1
//	UCSR0A = 0x040;
	//UCSR0C = 0x06;
//	UCSR0A = 0x00;
	//UCSR0B=0xd9;
//	UCSR0C = (1<<UCSZ00);

}

unsigned char USART_receive(void){
	
	while(!(UCSR0A & (1<<RXC0)));
	return UDR0;
	
}

void USART_send( unsigned char data){
	
	while(!(UCSR0A & (1<<UDRE0)));
	UDR0 = data;
	
}

void USART_putstring(char* StringPtr){
	
	while(*StringPtr != 0x00){
		USART_send(*StringPtr);
	StringPtr++;}
	
}