RS232 serial commands


Closed Thread
Results 1 to 16 of 16

Hybrid View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    OK, so you need to check a couple of different Strings possibilities and act upon right?

    Is this really need to be string? Did you built the "Transmitting unit" or it's just for learning purpose?

    Most common and easiest way to implement such thing is to wait for a specific header and then use the next Byte for specific command.
    ex:
    Transmitter send: "NextCommandIs", 10
    Receiver Wait for "NextCommandIs" and store 10 in a byte variable. Depending the value of that Byte Variable, it process various task.

    So Easy as
    Transmitter Side:
    HSEROUT ["NextCommandIs", 10]

    Receiver Side:
    HSERIN [WAIT ("NextCommandIs"), ByteA]
    SELECT CASE ByteA
    '
    '
    '
    '

    Should you really need to wait for a specific String, then you'll need to build a string with each single character you receive parse them. Not hard, just a tad longer to implement.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  2. #2
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    Also, depending of how you send the whole thing, you may also check for a "end" character. If the string is right but the next character/byte is false, you discard the result.

    All the time, you want to implement a structured "serial data message" on both side.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  3. #3
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    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
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    Another Variant...
    Code:
            DEFINE OSC 40      
            DEFINE HSER_RCSTA 90h 
            DEFINE HSER_TXSTA 20h 
            DEFINE HSER_BAUD 9600
            DEFINE HSER_SPBRG 64
    
            WaitFor     var byte [6]
            CounterA    VAR BYTE
            clear
            PORTD = 0
            TRISD = 0
            Hserout ["Varidrive V2011.00 has started",13,10] 
     
    main:   
            GOSUB ClearArray     
            HSEROUT ["Main loop",13,10]   
            HSERIN   1000,Test_bloff,[str waitFor\6]
            
    Test_bloff:
            ARRAYREAD  WaitFor,6, Test_blon,[WAIT ("bloff",0)]
            LOW PORTD.4
            HSEROUT ["OFF",13,10]
            goto main
            
    Test_blon:
            ARRAYREAD  WaitFor,6, FAIL,[WAIT ("blon",0)]
            HIGH PORTD.4
            HSEROUT ["ON",13,10]
            goto main
            
    FAIL:
            HSEROUT ["FAIL!",13,10]
            GOTO main
            
    ClearArray:
            FOR CounterA = 0 TO 5
                    WaitFor[CounterA]=0
                    next
            RETURN
    now tell me it's not hard
    Last edited by mister_e; - 22nd August 2011 at 22:28.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    Wow! Next time I need some code written, I'll just state what I want to do, and let you guys write it.
    Charles Linquist

  6. #6
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    good karma... that is
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  7. #7


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    Quote Originally Posted by mister_e View Post
    Another Variant...
    Code:
            DEFINE OSC 40      
            DEFINE HSER_RCSTA 90h 
            DEFINE HSER_TXSTA 20h 
            DEFINE HSER_BAUD 9600
            DEFINE HSER_SPBRG 64
    
            WaitFor     var byte [6]
            CounterA    VAR BYTE
            clear
            PORTD = 0
            TRISD = 0
            Hserout ["Varidrive V2011.00 has started",13,10] 
     
    main:   
            GOSUB ClearArray     
            HSEROUT ["Main loop",13,10]   
            HSERIN   1000,Test_bloff,[str waitFor\6]
            
    Test_bloff:
            ARRAYREAD  WaitFor,6, Test_blon,[WAIT ("bloff",0)]
            LOW PORTD.4
            HSEROUT ["OFF",13,10]
            goto main
            
    Test_blon:
            ARRAYREAD  WaitFor,6, FAIL,[WAIT ("blon",0)]
            HIGH PORTD.4
            HSEROUT ["ON",13,10]
            goto main
            
    FAIL:
            HSEROUT ["FAIL!",13,10]
            GOTO main
            
    ClearArray:
            FOR CounterA = 0 TO 5
                    WaitFor[CounterA]=0
                    next
            RETURN
    now tell me it's not hard
    Thanks a lot, your code is perfectly understandable.

  8. #8
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    ... And have a deliberate small mistake in before receiving the bomb-proof approval... but this... i'll let you the pleasure find it

    Enjoy!
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  9. #9
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: RS232 serial commands

    Steve.... I put lots of "deliberate" mistakes in my code as well.
    Charles Linquist

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts