⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 关于串行通讯波特率的计算方法
💻
📖 第 1 页 / 共 2 页
字号:
                  <P align=center>接收到的二进制位序列</P></TD>
                <TD align=middle width=70>
                  <P align=center>字节表示</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>19200</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0xF?</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>9600</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 1  0 1  1 0  0  0 0  1 </P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x0D</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>4800</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0xE6</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>2400</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x78</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>1800</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0xE0</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>1800</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0xF0</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>1200</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x80</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>600</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x00</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>300</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x00</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>150</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x00</P></TD></TR>
              <TR>
                <TD align=middle width=71>
                  <P align=center>110</P></TD></CENTER>
                <TD align=middle width=288>
                  <P align=center>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</P></TD>
                <CENTER>
                <TD align=middle width=70>
                  <P align=center>0x00</P></TD></TR></TBODY></TABLE></CENTER></DIV>
            <P 
            align=left>  发送速率为1800波特时,因为<BR>  T<SUB>1800</SUB>=T<SUB>9600</SUB>*16/3,<BR>而16/3不是整数,接收端二进制位的状态转换时刻和9600波特不一一对应,引起在接收端 
            的一个位接收周期内有状态发生变化的可能。表1中给出的第六个位(表示为x)就是这种情 
            况。因为x有可能被看作‘1’,也有可能被看作‘0’,所以发送速率为1800波特时接收到 
            的字节可能是0xE0或者0xF0。波特率为3600和7200时也有同样的问题,也可以采用同样的方 
            法,但不确定的位数会增加,需要检测的字节种类也会更多。3600波特和7200波特的传输速 
            率几乎不采用,因此这个问题并不严重。只要发送波特率在1200~19200之间,我们都可以 通过接收到的一个字符对此波特率进行唯一的判定。 

            <P><STRONG>2 低波特率的检测</STRONG><BR>  当发送速率低于1200波特时,接收端收到的字节都是0x00,因此只能确定其速率低于12 
            00波特,而不可能再得到更多的信息。为了解决这个问题,可以在9600波特的速率下继续接 
            收下一个字节信息。发送速率为600波特或更低时,一个位的发送时间要大于9600波特时整 
            个字节的接收时间。因此,发送端每一个从‘1’(终止位)到‘0’(起始位)的跳变都会 
            让接收端认为一个新的字节开始了。表2所示为600波特或更低的传输速率时接收端回车符的 二进制序列(只给出开始的一些位)。</P>
            <P align=center>表2  低波特率回车符的接收方式</P>
            <DIV align=center>
            <CENTER>
            <TABLE borderColor=#808080 height=148 cellSpacing=0 cellPadding=0 
            width=471 border=1>
              <TBODY>
              <TR>
                <TD align=middle width=62 height=32>
                  <P align=center>波特率</P></TD>
                <TD align=middle width=226 height=32>
                  <P align=center>9600波特二进制序列</P></TD>
                <TD align=middle width=71 height=32>
                  <P align=center>时间差<BR>(周期)</P></TD>
                <TD align=middle width=102 height=32>
                  <P align=center>时间差<BR>(实时间)</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=17>
                  <P align=center>600</P></TD></CENTER>
                <TD align=middle width=226 height=17>
                  <P align=center>16 0's 16 1's 16 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=17>
                  <P align=center>32</P></TD>
                <TD align=middle width=102 height=17>
                  <P align=center>3.33ms</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=17>
                  <P align=center>300</P></TD></CENTER>
                <TD align=middle width=226 height=17>
                  <P align=center>32 0's 32 1's 32 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=17>
                  <P align=center>64</P></TD>
                <TD align=middle width=102 height=17>
                  <P align=center>6.66ms</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=17>
                  <P align=center>150</P></TD></CENTER>
                <TD align=middle width=226 height=17>
                  <P align=center>64 0's 64 1's 64 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=17>
                  <P align=center>128</P></TD>
                <TD align=middle width=102 height=17>
                  <P align=center>13.33ms</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=17>
                  <P align=center>110</P></TD></CENTER>
                <TD align=middle width=226 height=17>
                  <P align=center>87 0's 87 1's 87 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=17>
                  <P align=center>174</P></TD>
                <TD align=middle width=102 height=17>
                  <P align=center>18.13ms</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=18>
                  <P align=center>75</P></TD></CENTER>
                <TD align=middle width=226 height=18>
                  <P align=center>128 0's 128 1's 128 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=18>
                  <P align=center>256</P></TD>
                <TD align=middle width=102 height=18>
                  <P align=center>26.66ms</P></TD></TR>
              <TR>
                <TD align=middle width=62 height=16>
                  <P align=center>50</P></TD></CENTER>
                <TD align=middle width=226 height=16>
                  <P align=center>192 0's 192 1's 192 0's</P></TD>
                <CENTER>
                <TD align=middle width=71 height=16>
                  <P align=center>384</P></TD>
                <TD align=middle width=102 height=16>
                  <P align=center>4 
0.00ms</P></TD></TR></TBODY></TABLE></CENTER></DIV>
            <P align=left>  600波特时,第一个从‘1’到‘0’的跳变在初始化以后即刻发生。这个跳变让接收端 
            得到字节0x00。第二个跳变在初始化(16+16)*T<SUB>9600</SUB>秒以后发生,这会让接收端认 
            为另外一个字节开始接收了。一个二进制位的接收时间是T<SUB>9600</SUB>,所以串行接口电路 会在第一个跳变以后10* 
            T<SUB>9600</SUB>秒提示第一个字节接收完毕,在(16+16+10)* T<SUB>96 
            00</SUB>秒以后提示第二个字节接收完毕。因此600波特时,第一个字节接收完毕和第二个字节 
            接收完毕的时间差是(16+16+10-10)* T<SUB>9600</SUB>=32* 
            T<SUB>9600</SUB>秒。表2的第三列所示 
            是把这个时间差以T<SUB>9600</SUB>的个数表示。因为T<SUB>9600</SUB>=1/9600秒=104.16毫秒,相 
            乘可以得到两个字节接收完毕的实时间差。不同发送波特率的时间差如表2的最后一列所示 
            。有了这个时间差信息,就可以确定低传输速率时的波特率了:测定第一个和第二个字节的 
            接收时间差,然后在时间差常数表(表2)里查出哪个波特率下的时间差与之最相近,对应 
            的就是终端发送波特率。即使测定的时间差有些误差,一般也可以正确地确定波特率。 
            <P><STRONG>3 实现方式</STRONG><BR>  通过以上分析,各种波特率都可以通过回车符的发送和接收信息来测定,算法实现的伪 
            代码在本文的最后给出。应用实践证明了这种方法的有效性。<BR>; Pseudo code to determine what baud 
            rate a transmitter is at,</P>
            <P align=right>on the b asis of a single</P>
            <P align=left>; RETURN (0x0D) character received from 
            it.<BR><BR>Initialise receive baud rate to 9600<BR>Wait for Byte to 
            be received<BR>IF Byte = 0x00 THEN<BR>   Start 
            Timer<BR>   REPEAT<BR>   UNTIL (Timer &gt; 50 ms OR New Byte 
            Received)<BR>   CASE Timer IN<BR>    1 ms-4 ms:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -