單片機串口——如何判定接收一幀數據的完成


在串口接收的時候,有些通訊每一幀數據有幀頭尾標識,這種情況比較好判定。

但是也有些情況是,頭尾沒有固定的標識,也不知道一幀有多少字節,

那么我們只能靠檢測幀之間的間隔來判斷是不是幀完成了

 

例串口設置:9600波特率、8個數據位、1個停止位、無校驗。

9600波特率表示,每秒傳輸9600個位,即每秒傳輸9600/(8位數據位+1位停止)=1066字節,

那么每秒傳輸一個字節的時間就是:1/1066=9.38*10^-4s≈0.94ms;

考慮硬件的損耗,保證數據傳輸的可靠性,留出余量,假設一個字節的傳輸時間為2ms。

 

那么我們就可以配置定時器,通過對時間的判斷識別接收一幀未知長度的串口數據,

以定時2ms來說,當接收到一個字節的時候,我們打開定時器,開始計時,定時周期2ms。

如果過了2ms,沒有新數據,那么我們認為一幀數據接收完成。

如果在2ms這個時間內,有新數據到來,那么我們認為是同一幀數據,此時定時器計數清零,重新計數。

初始化定義:一個足夠大數組和一個記錄字節數的變量。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM