I highly recommend you buy or get an access to an oscillosscope. It's very difficult to debug such problems without one. With an oscillosscope, you can measure the bitrate you actually are getting, and also verify the data bits if that needs to be done.
The most likely suspects are:
1) some calculation error on setting the baud configuration registers. Note, many MCU UART peripherals have a configuration bit which changes the rate by 2x, can be called "oversampling", "half mode" or similar
2) the clock source isn't what you think it is, the whole MCU is running at a completely different clock rate. Easy to see on an oscillosscope,
3) the clock source is an inaccurate RC oscillator, and it's off by more than about 3%, which will be too much error for UART. The solution is to calibrate the RC, or use a crystal oscillator instead.
Note about coding style, I recommend you document, in comments, what the register settings are, even briefly. Cryptic bit names like "USBS0" are impossible to understand without the datasheet in hand. Write in comments what you are doing, for example, if this is related to data width, add a comment // data width = 8 bits