1. 程式人生 > >序列通訊波特率的一種自動檢測方法

序列通訊波特率的一種自動檢測方法

  序列通訊中一個二進位制位的傳輸時間(記為T)取決於通訊的波特率,9600波特時一個二進位制位的傳輸時間是19200波特時一個二進位制位傳輸時間的兩倍,即:2*T19200=T 9600。因此,9600波特時一個位的傳輸時間,19200波特時可以傳輸兩個位。同樣地,9600波特傳輸兩個位的時間在4800波特時只能傳送一個位。主機設定接收波特率為9600, 終端只有也以9600波特傳送的字元,主機才能正確地接收。傳送波特率高於或低於9600都會 使主機接收到的字元發生錯誤。接收波特率為9600,終端以不同的波特率傳送回車符時,主機接收到的二進位制序列如表1所示。
  從表1中可以看出,除了19200和1800波特時兩種特例情況,其他情形的二進位制序列都是 9600波特時二進位制序列的變換。取前十個二進位制位與9600波特時的二進位制位相對應。忽略缺少停止位‘1’引發的資料幀錯誤,把接收到的字元表示成位元組方式(如表1的最右列所示)。例如:在傳送速率為1200波特,接收速率為9600波特時,主機得到的位元組是0x80,而不是正確的回車符0x0D。因為在不同的傳送速率下(9600,4800,2400,1200)得到的位元組不同,所以通過接收字元的判定就可以確定傳送波特率。
  傳送波特率為19200時,其傳送速度正好是接收速度(9600波特)的兩倍,因此傳送端 的兩個二進位制位會被接收端看作一個。取決於不同的序列介面硬體,‘01’和‘10’這兩種 二進位制位組合可能被認為是‘1’或者‘0’。幸運的是,只有0~4位存在這樣的歧義問題, 後面的位因為都是停止位,所以都是‘1’。因此,傳送速率為19200波特時接收到的字元其高半個位元組為0xF。低半個位元組可能是多個值中的一個,但不會是0x0,因為0x0D中有相鄰 的兩個‘1’,這就會至少在低半個位元組中產生一個‘1’。因此,整個位元組的形式為0xF?, 且低半個位元組不為0。