Here's some inspiration, not 100% efficient but easy to follow.
Code:
        DEFINE OSC 40      
        DEFINE HSER_RCSTA 90h 
        DEFINE HSER_TXSTA 20h 
        DEFINE HSER_BAUD 9600
        DEFINE HSER_SPBRG 64
        WaitFor     var byte [4]
        CounterA    VAR BYTE
        clear
        Hserout ["Varidrive V2011.00 has started",13,10] 
 
main:   
        GOSUB ClearArray     
        HSEROUT ["Main loop",13,10]   
        HSERIN  5000, main,[WAIT ("blo")]
        HSERIN 500, testit, [str waitFor\3]
testit:
        SELECT CASE WaitFor[0]
                CASE "n"
                        if WaitFor[1]=0 then
                                HIGH PORTD.4
                                HSEROUT ["ON",13,10]
                                else
                                    GOSUB FAIL
                                endif
                            
                CASE "f"
                        if WaitFor[1]="f" then
                                if WaitFor[2]=0 then  
                                        LOW PORTD.4
                                        HSEROUT ["OFF",13,10]
                                        else 
                                                GOSUB FAIL
                                        ENDIF
                                endif
                CASE ELSE
                        GOSUB FAIL
                END SELECT
           goto main
        
ClearArray:
        FOR CounterA = 0 TO 3
                WaitFor[CounterA]=0
                next
        RETURN 
        
FAIL:
        HSEROUT ["FAIL!",13,10]
        RETURN