Editar: se confirmó que la información de nivel estaba bien (TTL out invertido - > TTL invertido en un puente USB FTDI) pero lo he dejado al final de esta respuesta en caso de que alguien más lo necesite.
La forma más fácil de lidiar con este tipo de solución de problemas es descomponerlo y confirmar que los bits funcionan. Un osciloscopio (o analizador lógico) confirmará que el tiempo es correcto y que la señal no está invertida y es el nivel adecuado. Eso elimina posibles problemas con la configuración de BRG, la fuente del reloj o la configuración de frecuencia, etc.
Si hay una falta de coincidencia entre el número de bits de inicio y de parada o la longitud en el receptor y el transmisor, entonces puede aparecer cuando los caracteres se envían uno tras otro sin espacio, por lo que puede ayudar a espaciarlos ( también hace que sea más fácil interpretar el analizador lógico o las imágenes de alcance). No en este caso, ya que está controlado por interrupciones, pero incluso es posible que el búfer se pueda sobrescribir.
He tenido buena suerte al utilizar Realterm como un programa de terminal, también Teraterm y Putty en menor medida.
Suposición original del problema (se deja por razones históricas).
Si no está utilizando un convertidor de nivel RS-232, ese podría ser su problema. Una unidad típica es el MAX232 .
Además de cambiar los niveles a los voltajes apropiados, invierte la señal.
La mayoría de los receptores RS-232 responderán a señales de 0 / 5V, pero la señal invertida provocará que se reciban datos incorrectos.
De la hoja de datos vinculada arriba:
El chip contiene bombas de carga para obtener señales de +/- 8.5V de una sola fuente de alimentación de 5V, con solo unos pocos condensadores cerámicos o electrolíticos externos.
Puede probarlo con un inversor si no tiene ninguno de estos chips.