I'm trying to play with this code from Mister_e, but my trouble is I can not send message to PC at the same time(Sending Hello and reading from analog pin). I hope anyone can give a hint on this.
Code:

    '
    '   Simple program to handle USART interrupt using PIC16F877 @20MHZ
    '   ===============================================================
    '
    '   This program will Blink a LED on PORTB.0 to show
    '   that the PIC is running.  
    '
    '   This program also allow the user to activate or deactivate 
    '   a LED connected on PORTB.1 pin by sending command from a PC
    '   terminal software using 9600,n,8,1 setting
    '
    '   User command:
    '   =============
    '                1. If character "1" is received => enable the LED1
    '                2. if character "2" is received => disable the LED1
    '                3. If character "3" is received => enable the LED2
    '                4. if character "4" is received => disable the LED2
    '
    '
    'DEFINE LOADER_USED 1        ' using bootloader
    Include "modedefs.bas"
    DEFINE OSC 20               ' running at 20 MHZ
    
    '    PORT setting
    '    ============
         '
         TRISC=%10000000        ' RC.7 => USART RX pin set to input
                                ' all other pin set to output
                                '
         TRISB=0                ' RB<7:0> set to output
    
    '    USART setting
    '    =============
         ' Since we will not use HSERIN/HSEROUT, we must
         ' write directly to internal PIC register
         ' 
         TXSTA=$24              ' enable transmit and SPBRGH=1
         RCSTA=$90              ' Enable USART and continuous receive
         SPBRG=129           ' BAUD RATE = 9600 BAUDS
   
    '    Interrupt definition
    '    ====================
         '
         PIE1.5   =1            ' enable USART receive interrupt
         INTCON.6 =1            ' enable peripheral interrupt
    
    '    Alias definition
    '    ================
         '
         RCIF      var PIR1.5   ' receiver interrupt
         StatusLED var PORTB.0  ' the LED who show a 'running process'
         UserLED1   var PORTB.1  ' the LED1 that user want to control
         UserLED2   var PORTB.2  ' the LED2 that user want to control
         UserLED3   var PORTB.3  ' the LED3 that user want to control
         UserLED4   var PORTB.4  ' the LED4 that user want to control
         
    '    Variable definition
    '    ===================
         '
         Delay     var word     ' 
         DataIn    var byte     ' use to store RCREG content
         Discard   var byte     ' use to erase RCREG register
        
    '    Hardware/software initialisation
    '    ================================
         '
         PORTB=0                ' clear PORTB         
         on interrupt goto USARTInterrupt
 '------------------------------------------------------------------------------
DEFINE ADC_BITS 8       ' Set A/D for 8-bit operation
DEFINE ADC_CLOCK 1      ' Set A/D clock Fosc/8
DEFINE ADC_SAMPLEUS 50  ' Set A/D sampling time @ 50 uS


adval Var Byte          ' Create adval to store result
TRISA = %11111111    ' Set PORTA to all input
'ADCON1 = %00000011  ' Set PORTA.0,1,2,5 = A/D, PortA.3 = +Vref
ADCON1 = %00000010   ' Set PORTA analog


pause 500
        
Start:
    '    Main program loop that make the user happy to
    '    see a LED flashing to mean that something is 
    '    running 
    '
    Serout2 PortC.6, 84,["Hello",13]
    toggle statusled
    'for delay = 1 to 5000       ' use a loop delay to ensure
      'pauseus 5                 ' getting interrupt as fast as possible
      'next 
    ADCIN 0, adval
    Serout2 PORTC.6, 84, ["Value: ", DEC adval, 13, 10] ' Display value
    pause 100
                      
    goto start
    


disable interrupt
USARTInterrupt:
    '    Here's the interrupt routine who will make the user
    '    much happy by giving him the feeling to have the 
    '    control on the machine when the status of the user
    '    LED will change
    '
    RCSTA=0                     ' Disable serial port AND
                                ' clear possible error (FERR,OERR)
                                
    datain=RCREG                ' Get data
                                
    while RCif                  ' wait untill the RCREG is empty
          discard=RCREG         ' by reading it and store result in a
    wend                        ' don't care variable
                                
    select case datain          ' What to do with that data???
                                
           case "1"            ' User selection = 1
                userled1=1       '      => Enable the LED
                                
           case "2"           ' User selection =2
                userled1=0       '      => disable the LED
                
           case "3"            ' User selection = 3
                userled2=1       '      => Enable the LED
                                
           case "4"           ' User selection =4
                userled2=0       '      => disable the LED
           
           case "5"            ' User selection = 3
                userled3=1       '      => Enable the LED
                                
           case "6"           ' User selection =4
                userled3=0       '      => disable the LED
           
           case "7"            ' User selection = 3
                userled4=1       '      => Enable the LED
                                
           case "8"           ' User selection =4
                userled4=0       '      => disable the LED
                                
           end select           
    RCSTA=$90                   ' Re-enable the serial PORT AND
    resume                      ' get out of here
enable interrupt
Hardware: Pic16F877A at 20Mhz crystal

regards,
tacbanon