ATmega168: UART 8 data bits, no parity, 1 stop bit
Could it be that UCSZ02 bit in UCSR0B is set?  This would give you 9-bit character size...  It also could be a matter of incorrect baud selection, including the cases where your MCU does not run at the speed you are expecting: the set baud rate is sensitive to MCU clock speed.  

In general, I would recommend using |, &amp; and &lt;&lt; operators to set your register bits: it looks cleaner, and much easier to understand what is going on.  Thus, personally, I would rewrite your register assignment as:

UCSR0C = 0
    | (0&lt;&lt;UMSEL01) | (0&lt;&lt;UMSEL00)   // Asynchronous USART
    | (0&lt;&lt;UPM01) | (0&lt;&lt;UPM00)       // Parity Disabled
    | (0&lt;&lt;USBS0)                    // 1 stop bit
    | (1&lt;&lt;UCSZ01) | (1&lt;&lt;UCSZ00)     // 8-bit character size
    | (0&lt;&lt;UCPOL)                    // Rising TX, falling RX
    ;


But this is not what you asked about, and this is clearly a matter of taste.