UART Baudrate on ATmega328p
I solved it. I had to wait on the transmitter and receive flags here the working code :

#define F_CPU 1000000
#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;
#define BAUD 9600 
#define MYUBRR    F_CPU/8/BAUD-1

void init_uart(unsigned short uValue  ){
    // setting the baud rate  based on the datasheet 
    UBRR0H =0x00;//(unsigned char)  ( uValue&gt;&gt; 8);  // 0x00 
    UBRR0L =0x0C;//(unsigned char) uValue;  // 0x0C  
    // enabling TX &amp; RX 
    UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);
    UCSR0A = (1&lt;&lt;UDRE0)|(1&lt;&lt;U2X0);
    UCSR0C =  (1 &lt;&lt; UCSZ01) | (1 &lt;&lt; UCSZ00);    // Set frame: 8data, 1 stop

}

unsigned char USART_Receive( void )
{
    /* Wait for data to be received */
    while ( !(UCSR0A &amp; (1&lt;&lt;RXC0)) )
    ;
    /* Get and return received data from buffer */
    return UDR0;
}
void USART_Transmit( unsigned char data )
{
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A &amp; (1&lt;&lt;UDRE0)) )
    ;
    /* Put data into buffer, sends the data */
    UDR0 = data;
}

int main (){
    init_uart(MYUBRR);
    DDRD |= (1&lt;&lt; PD7);
    for(;;){
        PORTD ^= (1&lt;&lt; PD7);
        USART_Transmit('x');
        USART_Transmit('l');
        //_delay_ms(1000);
    }
    return 0;
}