1. 程式人生 > >【藍橋杯單片機10】串行接口的進階與實戰應用

【藍橋杯單片機10】串行接口的進階與實戰應用

而已 也有 案例 font enter 代碼塊 通知 基本原理 init

【藍橋杯單片機10】串行接口的進階與實戰應用

廣東職業技術學院 歐浩源

串行接口作為51單片機的重要外設,編程操作並不復雜,但在實際的項目應用中,由於數據結構和通信規約的不同,其程序邏輯也有各種變化,不會像“【藍橋杯單片機09】串行接口的基本原理與應用”中說的那麽簡易。
一般情況下,上位機的命令可能不是一個字節,而是多個字節組成的命令幀,有的長度固定,有的長度變化;而且要求返回的數據可能也不是一個字節,可能是一個數組,也有可能是一個字符串等。在藍橋杯的比賽中,也不可能讓你只是收發一個字節而已,因此,在串口這一個單元中,必須多加一個強化環境,掌握多字節的數據幀收發應用。
具體的實現有不同的思路,主要還是通過實戰案例來理解和強化。

1、單元實訓題目

技術分享圖片

2、程序設計思路與框架
首先要認真閱讀通信規約,在閱讀的過程中,頭腦中就應該逐漸將文字信息抽象成為數據結構,該定義多少變量,需要多大的數組,程序大致要安排那幾個函數,怎麽把它們搭建成程序框架...在動手敲代碼之前都應該有一個大概而清晰的輪廓。
就本題來講,通信規約中明確指導命令幀的長度為4個字節,而且有固定的幀頭和幀尾,一個用於接收數據的4字節數組是肯定需要的。
什麽時候才是命令幀接收完成呢,這就需要一個全局的標誌來通知主函數了。
當然你還需要,串口初始化函數、字符串發送函數、串口數據接收函數、和命名解析執行函數。
因此,你可以得到下面的程序框架結構:

技術分享圖片

3、關鍵代碼的實現
教程到了這個階段,如果你細心觀察的話,你就會發現很多代碼塊是可以重用的,直接拷貝來,一個字母都不用該就能用。例如,串口初始化函數Init_Uart()和單字節發送函數SendByte()就不需要修改,拷過來就能用。
其他的代碼實現起來也不難,幾個關鍵的代碼實現,大家可以參考:
<1> 字符串發送函數

技術分享圖片

<2> 串口數據接收函數

技術分享圖片

<3> 命令幀解析執行函數

技術分享圖片

*************藍橋杯單片機視頻教程(永久免費)*************

技術分享圖片

**************************************************

【藍橋杯單片機10】串行接口的進階與實戰應用