The program is too long to post all of it. Below I'll post the code related to the usart use.

DEFINE HSER_CLROERR 1
DEFINE HSER_RCSTA 90h
DEFINE HSER TXSTA 20h
DEFINE HSER_BAUD 9600



'this is at the beginning of the code, before it enters the main loop.
'Disable interrupts
INTCON = %00000000
PIE1 = %00000000
PIR1 = %00000000
OPTION_REG = %11000000


'Send/Recieve Codes
GROUND_ALL CON $00
ANT_1_SELECT CON $01
ANT_2_SELECT CON $02
ANT_3_SELECT CON $03
ANT_4_SELECT CON $04
ANT_REQUEST CON $09
RADIO_SENSE_OFF CON $10
RADIO_SENSE_ON CON $11
REQUEST_MODE CON $12
REQUEST_RF CON $13
RF_SENSED_OFF CON $14
RF_SENSED_ON CON $15
RF_SENSED CON $16
RADIO_OFF CON $17


Send_Code VAR BYTE 'Var to pass to the send routine
RX_Code VAR word 'Var to get the code from the remote



Tx_Sub:
hserout ["M", send_code]
return

Rx_Sub:
HSERIN [rx_code.byte0, rx_code.byte1]
gosub Handle_RX
return

Handle_RX:
if rx_code.byte0 = "R" then 'Make sure code is from remote
if rx_code.byte1 = Ground_ALL then 'command recieved to ground all
'code for ground all
endif
' repeat for each command
ENDIF

return

The send/recieve works fine if the sleep isn't in there. As soon as I try putting the chips to sleep, it stops working.