Code as requested....basically it is generating GPS sentence, and using a I2C compass to populate the heading information in the sentence.....it works fine on the 16f877a. Got a problem with space on the gizmo I am building hence the move to a smaller chip.

Include "modedefs.bas"
define OSC 20
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600 'Set Baud rate to 9600bps
DEFINE HSER_BITS 8 'Set to 8 bit mode

DEFINE HSER_CLROERR 1 'Clear overflow error automaticallyAFPCON1 = %00000001

APFCON0 = %11110001 'Set RB pins to SCL1 and SDA 1
APFCON1 = 1 ' TX on RB5
B0 var Word ' Temp variable
Heading var Word ' Compass heading
B2 var byte ' Temp variable
DPIN var portb.7 ' I2C data pin RB2 and RB4
CPIN var Portb.6 ' I2C clock pin
APFCON0 = %11110001 'Set RB pins to SCL1 and SDA 1
APFCON1 = 1 ' TX on RB5
p var byte

Dec_lat1 var word
Dec_lat2 var word
S_byte var byte
Dec_long1 var word
Dec_long2 var word
E_byte var byte
variation var byte
UTC var byte
UTC_2 var byte
Dec_off var byte
Course var byte
date_stamp var byte
UTC_A var byte
UTC_2_A var byte
Off_set var byte
Dec_long1_A var byte
Dec_long2_A var byte
Dec_lat1_A var byte
Dec_lat2_A var byte
TracID var word
WPT_array var byte (63)
WPT_array_A var byte (60)

cksum var Byte
cksum1 var byte
' "["
WPT_array[0]="$"
WPT_array[1]="G"
WPT_array[2]="P"
WPT_array[3]="R"
WPT_array[4]="M"
WPT_array[5]="C"
WPT_array[6]=","
WPT_array[7]=UTC DIG 5+"0"
WPT_array[8]=UTC DIG 4+"0"
WPT_array[9]=UTC DIG 3+"0"
WPT_array[10]=UTC DIG 2+"0"
WPT_array[11]=UTC DIG 1+"0"
WPT_array[12]=UTC DIG 0+"0"
WPT_array[13]="."
WPT_array[14]=UTC_2 DIG 2+"0"
WPT_array[15]=UTC_2 DIG 1+"0"
WPT_array[16]=UTC_2 DIG 0+"0"
WPT_array[17]=","
WPT_array[18]="A"
WPT_array[18]=","
WPT_array[20]=Dec_long1 Dig 3+"0"
WPT_array[21]=Dec_long1 Dig 2+"0"
WPT_array[22]=Dec_long1 Dig 1+"0"
WPT_array[23]=Dec_long1 Dig 0+"0"
WPT_array[24]="."
WPT_array[25]=Dec_long2 Dig 3+"0"
WPT_array[26]=Dec_long2 Dig 2+"0"
WPT_array[27]=Dec_long2 Dig 1+"0"
WPT_array[28]=Dec_long2 Dig 0+"0"
WPT_array[29]=","
WPT_array[30]="N"
WPT_array[31]=","
WPT_array[32]=Dec_lat1 Dig 3+"0"
WPT_array[33]=Dec_lat1 Dig 2+"0"
WPT_array[34]=Dec_lat1 Dig 1+"0"
WPT_array[35]=Dec_lat1 Dig 0+"0"
WPT_array[36]="."
WPT_array[37]=Dec_lat2 Dig 3+"0"
WPT_array[38]=Dec_lat2 Dig 2+"0"
WPT_array[39]=Dec_lat2 Dig 1+"0"
WPT_array[40]=Dec_lat2 Dig 0+"0"
WPT_array[41]=","
WPT_array[42]="W"
WPT_array[43]=","
WPT_array[44]=Dec_off Dig 1+"0"
WPT_array[45]=Dec_off Dig 0+"0"
WPT_array[46]="."
WPT_array[47]=Dec_off Dig 0+"0"
WPT_array[48]=","
WPT_array[49]= "0" + heading dig 2
WPT_array[50]= "0" + heading dig 1
WPT_array[51]= "0" + heading dig 0
WPT_array[52]="."
WPT_array[53]=Course Dig 0+"0"
WPT_array[54]=","
WPT_array[55]=date_stamp Dig 1+"0"
WPT_array[56]=date_stamp Dig 0+"0"
WPT_array[57]=","
WPT_array[58]=variation Dig 1+"0"
WPT_array[59]=variation Dig 0+"0"
WPT_array[60]=","
WPT_array[62]="E"
WPT_array[63]="*"


WPT_array_A[0]="$"
WPT_array_A[1]="G"
WPT_array_A[2]="P"
WPT_array_A[3]="G"
WPT_array_A[4]="G"
WPT_array_A[5]="A"
WPT_array_A[6]=","
WPT_array_A[7]=UTC_A DIG 5+"0"
WPT_array_A[8]=UTC_A DIG 4+"0"
WPT_array_A[9]=UTC_A DIG 3+"0"
WPT_array_A[10]=UTC_A DIG 2+"0"
WPT_array_A[11]=UTC_A DIG 1+"0"
WPT_array_A[12]=UTC_A DIG 0+"0"
WPT_array_A[13]="."
WPT_array_A[14]=UTC_2_A DIG 2+"0"
WPT_array_A[15]=UTC_2_A DIG 1+"0"
WPT_array_A[16]=UTC_2_A DIG 0+"0"
WPT_array_A[17]=","
WPT_array_A[18]=Dec_long1_A Dig 3+"0"
WPT_array_A[19]=Dec_long1_A Dig 2+"0"
WPT_array_A[20]=Dec_long1_A Dig 1+"0"
WPT_array_A[21]=Dec_long1_A Dig 0+"0"
WPT_array_A[22]="."
WPT_array_A[23]=Dec_long2_A Dig 3+"0"
WPT_array_A[24]=Dec_long2_A Dig 2+"0"
WPT_array_A[25]=Dec_long2_A Dig 1+"0"
WPT_array_A[26]=Dec_long2_A Dig 0+"0"
WPT_array_A[27]=","
WPT_array_A[28]="N"
WPT_array_A[29]=","
WPT_array_A[30]=Dec_lat1_A Dig 3+"0"
WPT_array_A[31]=Dec_lat1_A Dig 2+"0"
WPT_array_A[32]=Dec_lat1_A Dig 1+"0"
WPT_array_A[33]=Dec_lat1_A Dig 0+"0"
WPT_array_A[34]="."
WPT_array_A[35]=Dec_lat2_A Dig 3+"0"
WPT_array_A[36]=Dec_lat2_A Dig 2+"0"
WPT_array_A[37]=Dec_lat2_A Dig 1+"0"
WPT_array_A[38]=Dec_lat2_A Dig 0+"0"
WPT_array_A[39]=","
WPT_array_A[40]="W"
WPT_array_A[41]=","
WPT_array_A[42]="1"
WPT_array_A[43]=","
WPT_array_A[44]="0"
WPT_array_A[45]="9"
WPT_array_A[46]=","
WPT_array_A[47]="1"
WPT_array_A[48]=","
WPT_array_A[49]=Off_set Dig 0+"0"
WPT_array_A[50]=Off_set Dig 0+"0"
WPT_array_A[51]=Off_set Dig 0+"0"
WPT_array_A[52]=","
WPT_array_A[53]="M"
WPT_array_A[54]=","
WPT_array_A[55]="0"
WPT_array_A[56]=","
WPT_array_A[57]="M"
WPT_array_A[58]=","
WPT_array_A[59]=","
WPT_array_A[60]="*"

pause 1000
cksum=0
p=0
for p = 1 to 63
cksum = cksum^(WPT_array[p])
Next P
p=0
cksum1=0
for p = 1 to 60
cksum1 = cksum1^(WPT_array_A[p])
Next P
Main
I2CREAD DPIN,CPIN,$C0,$C1,[B2] ' Read 2 locations in a row
B0=B2*14
Heading=B0/10
WPT_array[49]= "0" + heading dig 2
WPT_array[50]= "0" + heading dig 1
WPT_array[51]= "0" + heading dig 0

pause 100

Hserout [Str WPT_array\63, HEX Cksum,13,1]
pause 100

hserout [Str WPT_array_A\60, HEX Cksum1,13,10]
pause 100

Goto Main
End