數據位是7時,最大能傳輸0x8F,最高位不會被發送。
找到網上分析文章如下:
---------------------------------------------------------------------------
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/petershina/article/details/8612357
針對串口通信,關於設置數據位長度對通信的影響,如圖:
在串口數據通信中,會看到串口參數設置。其中“數據位”設置,共有四檔選項,分別是8、7、6、5。那么改變這個參數會對數據的傳輸有什么影響呢?
我來做個試驗,通過示波器觀察通信過程,能夠分析結果如下:
例如數據位設置為5。那么就相當於規定了每個傳輸字節只能由5個二進制位來表示,例如:11111,10110,01110等。也就是說,這個RS232口只能發送00000~11111這個范圍內的數,如果發送一個比11111還大的數,例如11111+1,也就是100000,那么經過這個RS232口的處理以后,只會發送出去一個00000,而接收端只能接收到00000。這樣看起來貌似發送的數據和接收的不一樣,其實這是串口數據位長度決定了他會發送多少位數據,超出的位是不會被發送的。
通過示波器觀察,我們就能清楚的看到,如果設備是正常的情況下,且串口發送端和接收端都設置數據位為5位,發送下面這些十六進制數,會顯示出如下波形:
分別在串口調試軟件的發送窗口輸入上面的這四個十六進制數,就能通過示波器看到這些數字所對應的二進制碼波形。數據位設置是5位,要從右往左查看波形,因為串口通信是先傳輸低位,后傳輸高位,所以要反過來讀取二進制位。
通過上面的觀察,我們可以確定,如果數據位設置是5位,那么我們可以發送的最大數字是0x1F,也就是二進制數11111B。超過0x1F的數就保留低五位,所構成的二進制數,就是能夠被接收到的數;如果我們設置數據位是6位,那么我們可以發送的最大數字就是0x3F。超過0x3F的數就就保留低六位,所構成的二進制數,就是能夠被接收到的數據。
另外,我們知道,一個ASCII碼必須要用8位二進制數來表示,其中低7位表示字符,同時還要注意,在標准ASCII中,最高位(b7)用作奇偶校驗位。這也就意味着如果串口傳輸的數據位設置是5或者6位,那么這種情況下,串口是無法發送出ASCII碼表中數值大於11111B(十進制31)或者111111B(十進制63)的數所表示ASCII字符的。
比如我們設置串口數據位是5位,我們發送一個字母a,我們知道在字母a在ASCII碼中的十進制數是97,二進制是1100001B,大於11111B。則此時只能傳輸出去后五位,也就是00001B,而接收端只會顯示出十六進制數01,而不能顯示出一個完整的字母a。只有數據為設置是7位和7位以上時,才能傳輸一個完整的ASCII字符。