I'm happy to see that you guys seem to be working out the bugs but it really has me scratching my head. 4800 baud isn't exactly the Double A Fuel Dragster of baud rates so I can't quite grasp why the default 14M2 clock rate of 4MHz is causing a problem. Keep in mind that if the default clock frequency in increased it changes the value of any time specific command. This includes Wait, Pause, PauseUs and any serial rate and Timeout commands.
Earlier I said that I haven't ran any of the code posted because I wanted to use VB6 to transmit the GPS data to my 14M2 but 4800 baud isn't supported. At least I thought it wasn't. Sifting back through my VB6 folder I found a host of Serial programs I wrote well over 10 years ago. Surprisingly I also found that I used 4800 baud with no problems. My guess is that when Microsoft listed valid baud rates for VB6's MSComm they were dealing with real Serial Ports and UART's, not virtual ones like USB/RS323, where drivers can totally change the ballgame. So, if I find the time I just might run some tests at my end to see why doubling the clock rate is necessary. I still remain a skeptic.
Regarding your last posted schematic that includes the MAX232: You need a dot where the three 10K resistors converge to GND. This is the third time that I'm reiterating the importance of assigning component identifiers.
On a second note and I've mentioned this before too: Pause 1 is not pause for 1uS as repeatedly commented in the code.
Chris