Have you tried hooking up the UART to HyperTerminal to see what is being sent? Or even better - download and use Realterm as that is much better at displaying 'non ascii' characters.
I presume that you have set the UART to 9600 baud, no parity, 1 stop and 8 data bits. The reason I say that is that commands starting with 124 are also used to modify the baud rate. So if the top bit of the second byte (140) is being stripped out somehow then it will get converted to 12 which will then change the baud rate instead - and thus you get garbage from then on.