HSER baudrate


Closed Thread
Results 1 to 15 of 15

Thread: HSER baudrate

  1. #1
    Join Date
    Sep 2009
    Posts
    737

    Default HSER baudrate

    Hello,
    I'm not very familiar with the hardware serial port. So far I have used define.
    But when I tried this:
    Code:
    HSerBaud var byte
    IF HSerBaud=0 THEN
     DEFINE HSER_BAUD 300
    ENDIF
    IF HSerBaud=1 THEN
       DEFINE HSER_BAUD 2400
    ENDIF
    IF HSerBaud=$BD THEN
       DEFINE HSER_BAUD 9600
    ENDIF
    I got an error, Redefininig symbor that can not be redefined...
    I do not know what registers should be set to change the baud rate.
    If you can help, so I would not read the whole datasheet. I'm using PIC18LF14K50.
    Thanks

  2. #2
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818

    Default Re: HSER baudrate

    That's is correct as far as I know, you cannot redefine it in running code, you can however select it in the beginning as your PIC starts. Look at the code example in the lower 1/2 of this article. I show you how to do it there.

    http://www.picbasic.co.uk/forum/content.php?r=171-LCD-serial-backpacks

    Last edited by Archangel; - 12th June 2011 at 00:46.
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  3. #3
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default Re: HSER baudrate

    If you need to change the baud rate during run time do not use defines. Deal with the registers directly.
    Code:
    X VAR WORD
        START:
         RCSTA.4 = 0 : RCSTA.4 = 1
         RCSTA=$90:TXSTA=$24:SPBRG=129
         HSERIN [dec X]
         HSEROUT [DEC X.7,13]
    blah
    blah
    Dave
    Always wear safety glasses while programming.

  4. #4
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818

    Default Re: HSER baudrate

    or there's Dave's way . . .
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

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

    Default Re: HSER baudrate

    When changing baudrate on the fly, you want to turn off the USART before though.

    RCSTA=0
    SPBRG=xyz
    TXSTA = whatever, assuming it's value change from baudrate to baudrate
    RCSTA=$90
    Steve

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

  6. #6
    Join Date
    Sep 2009
    Posts
    737

    Default Re: HSER baudrate

    Thanks, guys.
    Both examples helped me. Just to see which registers should be set. Today I'll try ..

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

    Default Re: HSER baudrate

    Get the latest version of my PICMultiCalc on this forum, it will give you a good kick.
    Steve

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

  8. #8
    Join Date
    Sep 2009
    Posts
    737

    Default Re: HSER baudrate

    Everything works great. The calculator has really helped me.
    Here's the code if someone needs it.
    Code:
                 IF HSerBaud=0 THEN
                    RCSTA = 0
                    SPBRG = 207 ' 300 Baud @ 4MHz, 0.0% 
                    RCSTA = $90 ' Enable serial port & continuous receive
                    TXSTA = $20 ' Enable transmit, BRGH = 0
                 endif   
                 IF HSerBaud=1 THEN
                    RCSTA = 0
                    SPBRG = 25  ' 2400 Baud @ 4MHz, 0.17%
                    RCSTA = $90 ' Enable serial port & continuous receive
                    TXSTA = $20 ' Enable transmit, BRGH = 0
                 endif
                 IF HSerBaud=$BD THEN
                    RCSTA = 0
                    SPBRG = 25  ' 9600 Baud @ 4MHz, 0.16%
                    RCSTA = $90 ' Enable serial port & continuous receive
                    TXSTA = $24 ' Enable transmit, BRGH = 1
                 endif

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

    Default Re: HSER baudrate


    For safety sake, I would set RCSTA at the end, just after TXSTA.
    Steve

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

  10. #10
    Join Date
    Sep 2009
    Posts
    737

    Default Re: HSER baudrate

    Done. But I don't see what difference it makes.
    Can someone explain?

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

    Default Re: HSER baudrate

    It shouldn't make so much difference, but it's a bit more logical to me

    1. You disable the USART
    2. You set the baudrate and mode
    3. You Enable the USART

    Open the datasheet, and see what else you do when you write 0 or $90 to RCSTA, it does more than just enable/disable the USART.
    Steve

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

  12. #12
    Join Date
    Sep 2009
    Posts
    737

    Default Re: HSER baudrate

    I looked into datasheet, and saw to change a bunch of thing. I just need to reset and set the seventh bit RCSTA to turn off and on UART
    Is there a way to use the parity bit. Suppose 2400.8, E, 1, or 9600.8, E, 1 As I see hardware support and the ninth bit. The PBP I saw that there define the ninth bit.
    If I add this to the beginning of the code
    DEFINE HSER_EVEN 1
    DEFINE HSER_BITS 9
    How will changes in RCSTA, TXSTA,SPBRG registers affect hserin or serout.

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

    Default Re: HSER baudrate

    RCSTA, TXSTA, SPBRG will override the DEFINE and configure the PIC USART. It doesn't affect Serout, Serout2 or DEBUG. Those are software solution.

    Again check out the USART section about Parity.
    Steve

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

  14. #14
    Join Date
    Sep 2009
    Posts
    737

    Default parity

    I continue where I left off ...
    This is code:
    Code:
             define OSC 4
            OSCCON=%01010110
    
    DEFINE HSER_CLROERR 1 'Hser clear overflow automatically 
    '        SPBRG = 25  ' 9600 Baud @ 4MHz, 0.16%
    '        TXSTA = $24 ' Enable transmit, BRGH = 1
    '        RCSTA = $90 ' Enable serial port & continuous receive
    DEFINE HSER_BAUD 9600        'Set Baud rate to 9600bps
    DEFINE HSER_BITS 9        'Set to 9 bit mode
    DEFINE HSER_EVEN 1        'Set Even Parity
    
    TRISB.7 = 0 'Make Tx output
    TRISB.5 = 1 'Make Rx input
    
    main:
     pause 1000
     HSerOut ["Parity:)"]
    goto main
    Use this or not
    Code:
    DEFINE HSER_BITS 9        'Set to 9 bit mode
    DEFINE HSER_EVEN 1        'Set Even Parity
    Always get a 9600, N, 1. PIC never send parity bit.
    I'm banging head all day, but I can't catch what I missed.

  15. #15
    Join Date
    Sep 2009
    Posts
    737

    Default Re: HSER baudrate

    Problem solved, thanks to Darrel.
    I find solution in this topic.

Members who have read this thread : 1

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