Want to thank everyone for their help on this! I'm posting my code as of right now for review and comments.

Al, Even with the multiple collections, sorting and averaging routines put in, I'm still getting a wider variance of data than I think I should ]. Do I have the code right? If so, could my voltage divider be the wrong value?

Also, I tried to increase the baudrate to 9600 and it seemed to stop transmitting, does my serial setup code look OK? I am using a 4 mhz crystal.

Thanks again Everyone!

Dave
Code:
' Read and write hardware USART

B1      var     byte
Done    var     byte
TxBuf   var     byte[3]
SendBuf var     byte[6]
STX     var     byte
ETX     var     byte
Period  var     byte
i       var     byte
tmpval var     byte
A       var     byte        'for for next loop
DatAvg  var     word
    CounterA var Word
    DataA var Word
    RawData var Word [16]


' Initialize USART

        TRISC = %10111111       ' Set TX (PortC.6) to out, rest in
        ' Set receive register to receiver enabled
        DEFINE HSER_RCSTA 90h
        ' Set transmit register to transmitter enabled
        DEFINE HSER_TXSTA 20h
        ' Set baud rate
        DEFINE HSER_BAUD 2400
        DEFINE HSER_SPBRG 25 'Hser spbrg init 

' 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 = %10000010	' Set PORTA analog and right justify result
	Pause 500		' Wait .5 second


' Echo received characters in infinite loop
STX = 2
ETX = 3
Period = 46
TxBuf[1] = 51
TxBuf[2] = 54
TxBuf[3] = 56
mainloop: 
'Collect 17 AD samples
for A = 0 to 16
        ADCIN 0, RawData[A] 	' Read channel 0 to array
Next A
'Now Lets sort the array
Gosub SortArray
'Now Sum the middle 8 values
for A = 4 to 11                    ' pick out middle 8 readings
 DatAvg = DatAvg + RawData[A]
NEXT A
'Now Divide by 8 (by shifting) too get an average
DatAvg = DatAvg >>3
'Now put data in TxBuf
        For A=0 to 3
            txbuf[A]= DatAvg DIG (3-A)
        next A
        for A = 0 to 3
            TxBuf[A] = TxBuf[A] + 48
        next  A
'Send it!
        Gosub SendString         ' Send character to serial output
        pause 500               ' Wait half second
        Goto mainloop           ' Do it forever

        '
        '    Sort Array
        '    ----------
SortArray:
    CounterA=0
SortLoop:
    If RawData(CounterA+1) < RawData(CounterA) then
        DataA=RawData(CounterA)
        RawData(CounterA)=RawData(CounterA+1)
        RawData(CounterA+1+0)=DataA
        If CounterA > 0 then CounterA=CounterA-2
        endif
    CounterA=CounterA+1
    If CounterA < 15 then goto SortLoop
Return
' Subroutine to send a character string to USART transmitter
'First Send STX (02)  then 2 digits, then period (46), then 1 digit, then ETX (03)
SendString:
    'Build Buffer
    SendBuf[0] = STX
    SendBuf[1] = TxBuf[0]
    SendBuf[2] = TxBuf[1]
    SendBuf[3] = TxBuf[2]
    SendBuf[4] = Period
    SendBuf[5] = TxBuf[3]
    SendBuf[6] = ETX
    'Now Send it
       HSEROUT[STR SendBuf \ 7] 
    
Return                  ' Go back to caller