$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1) UTC時間,hhmmss(時分秒)
(2) 定位狀態(tài),A=有效定位,V=無效定位
(3) 緯度ddmm.mmmmm(度分)
(4) 緯度半球N(北半球)或S(南半球)
(5) 經(jīng)度dddmm.mmmmm(度分)
(6) 經(jīng)度半球E(東經(jīng))或W(西經(jīng))
(7) 地面速率(000.0~999.9節(jié))
(8) 地面航向(000.0~359.9度,以真北方為參考基準)
(9) UTC日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0度,前導位數(shù)不足則補0)
(11) 磁偏角方向,E(東)或W(西)
(12) 模式指示(A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無效)
可以通過GPS模塊的配置軟件讓模塊只輸出這一條語句,也可以通過判斷第四位的字符是不是"M"從這幾條語句中篩選出$GPRMC語句。編程的流程圖如下圖所示:
N8}%T{ED3_T9[D8Y78OBL5J.png (36.41 KB, 下載次數(shù): 79)
下載附件
程序流程圖
2019-4-23 15:14 上傳
這樣解碼的效率較低,但不影響效果。可以在串口接收中斷里定義一個5位的命令類型數(shù)組,在中斷內(nèi)就判斷命令的類型,這樣免去了每條命令都完全接收的麻煩。這里衛(wèi)星解碼過后的定位數(shù)據(jù)、時間數(shù)據(jù)可以直接用1602和12864顯示。由于我的課設需求是要有一個基于LabView的上位機顯示,所以還需要考慮串口被占用的問題。由于還有其他數(shù)據(jù)需要處理,加之用普通IO口模擬串口輸出效率較低需要占用較多資源,所以暫定用三態(tài)門拓展串口。以后不定期再更新完善,歡迎各位交流指點。1602和12864顯示的代碼就添加在附件里了。