This is driving me crazy. I'm displaying an analog voltage on an LCD attached to the PIC as adval.HighByte,adval.LowByte(3 233)
I'm also sending the same values to a VB program using the same format, I've attached the code below, PBP then VB.
Everytime I start the VB program, the HighByte and LowByte literally switch places. I added a debug.print to look at the HighByte and LowByte and everyother time I start the VB program, the displayed values agree with the LCD display and the next time the HighByte and LowByte has swapped positions while the LCD Display remains the same and true. I apoligize for the raggedness I've been cutting and hacking at it to learn.

PIC Code
'Attribute VB_Name = "Module1"
' PicBasic Pro program to display result of
' 10-bit A/D conversion on LCD
'
' Connect analog input to channel-0 (RA0)

' Define LCD registers and bits
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_RWREG PORTD
DEFINE LCD_RWBIT 4

DEFINE OSC 20

'DEFINE CHAR_PACING 2000

'DEFINE HSerout/in parameters
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h
DEFINE HSER_BAUD 2400


' Define ADCIN parameters
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS

adval VAR WORD ' Create adval to store result


TRISA =%11111111 ' Set PORTA to all input
ADCON1=%10001110 ' Set PORTA analog and right justify result
TRISD=0
TRISE=0
' PORTE.2=0 ' This worked with or without this statement
'Porte.2 cause the LED's on the Dev Board to float(no ground)
'which allows the LCD on the same pins to operate

PORTD.3=0 ' LCD R/W line low (W)

Pause 500 ' Wait .5 second

Loop: ADCIN 0, adval ' Read channel 0 to adval

LCDOut 254, 1 ' Clear LCD
Pause 1000

'LCDOut "Value= ", DEC adval ' Display the decimal value

LCDOut DEC adval.highbyte," ",DEC adval.lowbyte ' Display the decimal value
Pause 500
HSerout [adval.HighByte,adval.LowByte]
'HSerout [adval]

Pause 1000 'Wait .1 second

GoTo loop ' Do it forever
End


VB Code
Private Sub Label1_Click()

End Sub

Private Sub Form_Load()
' Fire Rx Event Every Two Bytes
MSComm1.RThreshold = 2

' When Inputting Data, Input 2 Bytes at a time
MSComm1.InputLen = 2

' 2400 Baud, No Parity, 8 Data Bits, 1 Stop Bit
MSComm1.Settings = "2400,N,8,1"
' Disable DTR
MSComm1.DTREnable = False

' Open COM2
MSComm1.CommPort = 2
MSComm1.PortOpen = True


End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub

Private Sub lblRCTime_Click()

End Sub

Private Sub MSComm1_OnComm()
Dim sData As String ' Holds our incoming data
Dim lHighByte As Long ' Holds HighByte value
Dim lLowByte As Long ' Holds LowByte value
Dim lWord As Long ' Holds the Word result

' If comEvReceive Event then get data and display
If MSComm1.CommEvent = comEvReceive Then

sData = MSComm1.Input ' Get data (2 bytes)

lHighByte = Asc(Mid$(sData, 1, 1)) ' get 1st byte
lLowByte = Asc(Mid$(sData, 2, 1)) ' Get 2nd byte
Debug.Print "HB=", CStr(lHighByte), " ", "LB=", CStr(lLowByte)
' Combine bytes into a word
lWord = (lHighByte * &H100) Or lLowByte

' Convert value to a string and display
lblRCTime.Caption = CStr(lWord)

'Debug.Print Val(lWord) / 10.1


End If

End Sub