I ran into very time-consuming difficulties using the serial port on the PIC, which ended up being solved by a relatively simple exchange (thanks to Cindy Jeffers for the idea). When I first hooked up my PIC serial port, I was getting gibberish. Garbled text was being spat out, but it was predictable gibberish, so it was as if it was running through a translator. The problem ended up being with the clock. Apparently, the using a 20 MHz crystal on the PIC does not produce a reliable enough clock to make serial communications work properly. I fixed it by using a 4 MHz crystal, but the ideal way would be to use a 'powered oscillator'. Tom Igoe has a little blurb about it on his site.
I ended up working with Cindy Jeffers' serial test program, which was written in PICBasic:
include "modedefs.bas"
define osc 4
'variable to receive data
inputData var byte
input portc.7
output porta.0
output porta.1
output porta.2
output porta.3
output portb.0
output portb.7
aVar var byte
aVar = "a" '97
bVar var byte
bVar = "b" '98
low porta.1
low porta.2
low porta.3
low porta.4
high portb.7
main:
serout portc.6, n9600, [" key please: "]
serin portc.7, n9600, inputData
if inputData = aVar then
high porta.0
high portb.0
low porta.1
else
high porta.1
low porta.0
low portb.0
endif
serout portc.6, n9600, ["your key: "]
serout portc.6, n9600, [inputData]
goto main