AVR USART OUTPUT almost similar as input
Using approximate numbers for 9600 with a 1MHz clock 1000000 / 9600 / 16 = 6.51 which will be truncated to 6 and then dropped to 5 once 1 is subtracted. You can see you lose a lot of precision when the divisor numbers are that small as they are converted to an integer. There is a calculator here you may find useful:

WormFood's AVR Baud Rate Calculator

That shows an error of 7.5% which is too high, you'll need more like 5% for reliable operation if the device it's connected to is very accurate, but I normally like to aim for a 2% or lower error. The alternatives that come to mind are changing your crystal frequency (or turn off the CKDIV8 fuse if you're using it) or to choose a baud rate such as 4800 that has an acceptable error margin at that clock rate.

Although looking at the table further (by clicking the relevant checkbox) another option would be to use the U2X=1 mode that doubles the effective UART clock rate that would drop the error to 0.2%. In that case your code should include:

#define BAUD_PRESCALE ((( F_CPU / ( USART_BAUDRATE * 8UL ))) - 1)
UCSRA |= (1 &lt;&lt; U2X);


That does cause the receiver to sample half as often to it may not quite be as reliable but might be an option if there's a reason you don't want to increase the clock rate.