I too have had problems using USART on the 18F2550.

Try this piece of code below. It works fine on my PIC now. It will basically echo back what ever you put on the PIC. Obvioulsy you can change the bottom lines to just send data if you wish.

Good luck and i hope it helps.

Code:
    '   Program to echo incoming serial data 
    '   Baudrate : 9600 Bauds
    '   Method :   Polling USART interrupts flags

    '   Pic Definition
    '   ==============
        ' Using PIC 18F2550 @ 20MHZ and bootloader
        '
        Clear
        DEFINE OSC 20          
        DEFINE LOADER_USED 1
        ADCON1 = %00001111
        
    '   Hardware configuration
    '   ======================
        TRISC  = %10000000    ' PORTC.7 is the RX input
                              ' PORTC.6 is the TX output
    
    '   Serial communication definition
    '   ===============================
    '   Using internal USART and MAX232 to interface to PC
    '
        DEFINE HSER_RCSTA 90h ' enable serial port, 
                              ' enable continuous receive
                              '
        DEFINE HSER_TXSTA 20h ' enable transmit, 
                              ' BRGH=1
                              '
        DEFINE HSER_BAUD 9600                   
        DEFINE HSER_CLROERR  1 ' automatic clear overrun error  
        
    '   Alias definition
    '   ================
        RCIF VAR PIR1.5     ' Receive  interrupt flag (1=full , 0=empty)
        TXIF VAR PIR1.4     ' Transmit interrupt flag (1=empty, 0=full)
        
    '   Variable definition
    '   ===================
        SerialData var byte
        
    '   Hardware initialisation
    '   =======================
        pause 10 ' safe start-up delay
    
Main:
    if RCIF then            ' incomming data?
       hserin  [Serialdata] ' take it
       hserout [serialdata] ' send it
       endif
    goto main
Steve