pic33f UART Problems
Edit: The level information was confirmed to be okay (TTL out inverted-> TTL in inverted on an FTDI USB bridge) but I've left it in at the end of this answer in case anyone else needs it. 

The easiest way to deal with this sort of troubleshooting is to break it down and confirm the bits are working. An oscilloscope (or logic analyzer) will confirm that the timing is correct and that the signal is not inverted and is the proper levels. That eliminates potential issues with BRG setting, clock source or frequency settings and so on. 

If there is a mismatch between the number of start and stop bits or length at receiver and transmitter, then it can show up when characters are sent one after the other with no space, so it can help to space them out (it also makes it easier to interpret the logic analyzer or 'scope images). Not in this case, since it's interrupt-driven but it's even possible the buffer could be overwritten. 

I have had good luck using Realterm as a terminal program, also Teraterm and Putty to a lesser extent. 



Original guess as to problem (left for historical reasons).

If you are not using an RS-232 level converter, that could be your problem. A typical unit is the MAX232. 

As well as shifting levels to appropriate voltages, it inverts the signal. 

Most RS-232 receivers will respond to 0/5V signals, but the inverted signal will lead to incorrect data being received. 

From the datasheet linked above:



The chip contains charge pumps to get +/- 8.5V signals from a single 5V supply, with only a few external ceramic or electrolytic capacitors. 

You could try it out with an inverter if you don't have any of these chips around.