第88節(jié):電子稱連續(xù)不斷從串口對外發(fā)送數據,單片機靠關鍵字快速截取有效數據串
從業(yè)近十年!手把手教你單片機程序框架 第88講
開場白:
我前面串口程序大部分都是通過靠時間來識別每一串數據是否接收完畢,有一些串口項目的協(xié)議是固定不變的,而且也不需要從機反饋任何應答信號,這類項目只需根據特定關鍵字來快速識別數據串是否接收完畢即可。比如現在有一種電子稱,它的測量范圍是0.00克到500.00克,他是靠串口不斷對外發(fā)送當前重量數據的,每串數據固定長度26個字節(jié),最后兩個字節(jié)是回車換行符0x0d 0x0a,倒數第9,10,11,12,13,14為有效的ASCII碼數字,其中倒數第11位為固定的小數點,其它的數據可以忽略不計。這類串口框架的思路是:根據數據尾是否有0x0d 0x0a來判斷數據串是否有效的,一旦發(fā)現有此關鍵字,再判斷總的數據長度是否等于或者大于一串數據的固定長度,如果滿足,則把相關標志位置位,通知主函數中的串口服務程序進行處理。同時也及時關閉串口中斷,避免在處理串口數據期間受到串口數據的中斷干擾,等串口服務程序處理完畢再打開。
具體內容,請看源代碼講解。
(1) 硬件平臺:
基于朱兆祺51單片機學習板。
(2) 實現功能:
波特率是:9600。把當前電子稱的重量數據顯示在數碼管上,在電腦上用串口助手軟件來模擬電子稱發(fā)送以下格式協(xié)議的3串數據,它的協(xié)議很簡單,每串數據固定長度26個字節(jié),最后兩個字節(jié)是回車換行符0x0d 0x0a,倒數第9,10,11,12,13,14為有效的ASCII碼數字,其中倒數第11位為固定的小數點,其它的數據可以忽略不計。
(a)字符是:
ST,GS,+ 0.77 g
轉換成16進制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 20 20 30 2E 37 37 20 2020 20 20 67 0D 0A
數碼管顯示:0.77
(b)
字符是:
ST,GS,+ 136.39 g
轉換成16進制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 31 33 36 2E 33 39 20 2020 20 20 67 0D 0A
數碼管顯示:136.39
(c)
字符是:
ST,GS,+ 0.00 g
轉換成16進制是:
20 53 54 2C 47 53 2C 2B 20 20 20 20 20 20 30 2E 30 30 20 2020 20 20 67 0D 0A
數碼管顯示:0.00
(3)源代碼講解如下:
總結陳詞:
前面我在第48節(jié)里講過用ds1302做的時鐘程序,但是后來很多網友建議,為了方便初學者學習編程思路,我應該用單片機定時器做一個時鐘程序。因此,我決定下一節(jié)講這方面的內容。欲知詳情,請聽下回分解----用單片機內部定時器做一個時鐘。





