You have two STR_DONE=0 in main program, remove the first one:
str_done = 0
valid = 0
rxin = 0
str_done = 0
STR_DONE should only be cleared as the last statement after processing the buffer.
If running in the SIM, watch the variables in the Interrupt routine as you send a string in. You can use a "BREAK" statement to pause before or after every Select. Be sure to remove that when compiling for a real PIC chip
str_done = 0
valid = 0
rxin = 0
str_done = 0
STR_DONE should only be cleared as the last statement after processing the buffer.
If running in the SIM, watch the variables in the Interrupt routine as you send a string in. You can use a "BREAK" statement to pause before or after every Select. Be sure to remove that when compiling for a real PIC chip