Riconoscimento automatico del baud-rate su microcontrollori 8051

Riconoscimento automatico del baud-rate su microcontrollori 8051
Nel listato 2 è riportata una tecnica per il riconoscimento automatico del baud rate nelle comunicazioni seriali. La soluzione riportata è scritta per un microcontrollore 8051, ma è facilmente modificabile per altri tipi di micro. Il baud rate viene calcolato assumendo che la comunicazione seriale sia di tipo 8-N-1.

autobaud:
         mov     tmod, #0x11    ;abilitazione timer #1
         mov     tcon, #0x00
         clr     a
         mov     th1, a
         mov     tl1, a
autob2:  jb      p3.0, *        ;attesa start bit
         jb      p3.0, autob2
         jb      p3.0, autob2   ;Prolungamento dell’attesa
         jb      p3.0, autob2   ;per evitare inneschi da rumore
         jb      p3.0, autob2
         jnb     p3.0, *        ;attesa del bit #0
         setb    tr1            ;inizio conteggio
         jb      p3.0, *        ;attesa bit #1
         jnb     p3.0, *        ;attesa bit #2
         jb      p3.0, *        ;attesa bit #4
         jnb     p3.0, *        ;attesa stop bit
         clr     tr1            ;arresto conteggio
         mov     a, tl1
         mov     c, acc.6       ;calcolo del baud-rate
         mov     f0, c
         mov     c, acc.7
         mov     a, th1
         rlc     a
         mov     c, f0
         addc    a, #0
         cpl     a
         inc     a
autoend: mov     0x7B, a
         mov     0x7A, a        ;salvataggio non volatile del baud rate.
         mov     0x79, a
         mov     0x78, a
         xrl     0x7A, #01010101b
         xrl     0x79, #11001100b
         xrl     0x78, #00011101b
         mov     th1, a
         mov     tl1, a
         mov     tmod, #0x21
         mov     pcon, #0x80     ;configurazione dell’uart interno
         mov     scon, #0x52
         setb    tr1             ;avvio del baud rate timer
         mov     r0, #0
         djnz    r0, *
         djnz    r0, *
         ret

Listato 2

La tecnica consiste nell’avviare il  conteggio  con TIMER1 all’arrivo dello  start bit  per arrestarlo in corrispondenza dello stop bit. Il risultato del conteggio è il numero di cicli macchina necessari alla ricezione di 8 bit. Per ottenere l’impostazione del baud rate dell’UART interno  è necessario suddividere il risultato per 8 (cicli macchina per 1 bit) quindi per 16 (in quanto l’UART interno si aspetta 16 overflow del timer per ciascun bit). Il risultato viene salvato nella memoria non volatile per essere nuovamente disponibile al successivo boot.

2 Comments

  1. Emanuele Emanuele 7 febbraio 2016
  2. Maurizio Di Paolo Emilio Maurizio 7 febbraio 2016

Leave a Reply