摘 要:介紹以51單片機為處理器的應用系統在編程時的內存使用區劃分和GPS定位信息流的數據格式。說明GPS15L型接收模塊的數據線應用情況。針對51單片機的內存較小和GPS 導航數據流較大的矛盾,提出使用51單片機接收GPS數據的一種壓縮算法,并給出軟件設計流程圖,最后以51匯編語言為例給出實際接收GPS 數據的部分程序的具體實現方法。
關鍵詞:51單片機;數據格式;GPS數據;數據壓縮
中圖分類號:TP368.1文獻標識碼:B
文章編號:1004373X(2008)2205003
Algorithm and Implementation Based on the MCU-51 Receiving GPS Data
YANG Yong,DU Wenlong
(Huaian College of Information Technology,Huaian,223003,China)
Abstract:The application system based on processor MCU-51 is introduced.The system programming memory uses data formats of the division and GPS positioning information flow.The data line application of GPS15L receiver module is noted.Because of the small memory of MCU-51 and the great navigation data of GPS,a kind of compression algorithm based on the MCU-51 receiving GPS data is introduced.The flow chart of software design is given.The specific method of the part process for GPS receiving data based on 51 language is given.
Keywords:MCU-51;data format;GPS data;data compression
1 小內存單片機的內存
51系列的單片機只有128 B的內存,分為:寄存器區(00H~1FH)32個字節、位尋址區(20H~2FH)16個字節、數據緩沖區(30H~7FH)80個字節。能否充分高效地使用這有限的寶貴資源是衡量一個單片機技術人員水平高低的尺度之一。在應用51系列單片機開發項目時,程序設計人員經常在數據緩沖區暫存數據運算的結果或中間結果,位尋址區用作定義一些變量或標志等,寄存器區作為參與程序運算數據的寄存單元來使用。
2 GPS定位信息
GPS接收機只要處于工作狀態就會源源不斷地把接收并計算出的GPS導航定位信息通過串口傳送單片機中,在沒有進一步處理之前,傳送的數據是一長串字節流信息。因此必須經過程序將其轉化為有實際意義的;可供高層決策使用的定位信息數據。與其他通信協議類似,GPS進行信息提取,必須明確其幀結構,然后才能根據其結構完成對各個定位信息的提取。對本文以使用的GARMIN GPS 接收機為例,其發送到單片機的數據主要由幀頭,幀尾和幀內數據組成。根據數據幀的不同,幀頭也不相同,主要有“#GPGGA”,“$GPGSA”,“$GPRMC”等。這些幀頭標識了后續幀內數據的組成結構,各幀均以回車符和換行符作為幀尾標識一幀的結束。對于通常的情況,大家所關心的定位數據如經緯度、速度、時間、航向等均以“$GPRMC”中獲取得到。該幀的結構及各字段釋義如下:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
其中:
<1>為UTC時間,hhmmss(時分秒)格式;
<2>為定位狀態,A=有效定位,V=無效定位;
<3>為緯度ddmm.mmmm(度分)格式;
<4>為緯度半球N北半球或S南半球;
<5>為經度dddmm.mmmm(度分)格式;
<6>為經度半球E東經或W西經;
<7>為地面速度(000.0~999.9節);
<8>為地面航向(000.0~359.9°),以真北為參考標準;
<9>為UTC日期,ddmmyy(日月年)格式;
<10>為磁偏角(000.0~180.0°),磁偏方向,E(東)或W(西)模式指示;
<11>為校驗和;
<12>為結束標志。
GPS模塊是以 GPS15L為例。GPS15L接口特性是CMOS電平,波特率固定為4 800 b/s。其接口線共有6根,分別說明如下:
白線:備用電源輸入線;
黑線:接地線;
紅線:電源線;
黃線:數據輸出線接單片機的RXD;
藍線:數據輸入線;
桔色線:天線外部電源線。
用51系列單片機接收GPS15L的數據一般只用到3根線即黑線、紅線和黃線。
3 51單片機內存小與GPS定位信息長的矛盾
嵌入式GPS車載系統的使用者只關心其日期和時間、糾度、面速度信息,因而可以只選用$GPRMC記錄語句。一條$GPRMC語句包括13個記錄:語句標識頭、世界時間、定位狀態、緯度、緯度方位、經度、經度方位、地面速度、地面路線、日期、磁偏角、校驗和和結束標記,它一共占用70個字節(其中包括用于分隔記錄所使用的13個逗號),例如:$GPRMC,121530,A,0033.4304,N,00118.2030,E,029.1,240.8,050712,120.4,E,A,由此可見,從GPS15 OEM板接收下來的數據流文本字符串,如果全部直接由51單片機的內存緩沖區80個字節來接收,一次就占用70個字節,對單片機設計人員來說剩余的緩沖區空間根本就無法再用作其他的安排。
4 GPS接收程序的設計與算法
仔細觀察以上段中的GPS數據記錄,可以發現語句之間的數據段還存在很多冗余位。除此之外,這些記錄中所含的信息既有英文字符又有數字,為了后續的壓縮,把GPS數據分為10段:對語句中的各個記錄應做如下的處理
‖$GPRMC,‖121530,‖A,‖0033.4304,‖N,‖00118.2030,‖E,‖029.1,‖240.8,‖050712,120.4,E,A,‖
(1) 語句標識頭(ID)$GPRMC,:占用7個字節,因為每個語句的標識頭都一樣,所以該記錄段屬冗余信息,完全可以去除,可去掉7個字節,在程序中具體處理時可先預置$GPRMC,標識頭與接收的GPS信息進行同步信號檢測處理。
(2) 世界時間(UTC):占用7個字節,該信息段以時、分、秒的格式指示出當時世界時間。轉換為北京時間還需要再加上8小時。末尾的“,”是冗余位可去掉。
(3) 定位狀態(A/V):占用2個字節,不進行處理。其與其他信息一起傳到控制中心,由此可判斷GPS信息定位成功與否。末尾的“,”是冗位可去掉。
(4) 緯度:占用10個字節,進行預處理時中間的“.”和末尾的“,”是冗余位。可去掉2個字節。
(5) 經度指示器(E/W):占2個字節,它指示出經度是東經,還是西經。由于各個$GPRMC語句中的該段信息在中國都是東徑,它是冗余信息,可去掉。
(6) 緯度:占用11個字節,進行預處理時中間的“.” 和末尾的“,”是冗余位。可去掉2個字節。
(7) 緯度指示器(N/S):占2個字節,各個$GPRMC語句中的該段信息完全一樣,是冗余信息,處理方法與上相同。
(8) 地面速度:占用6個字節,進行預處理時中間的“.” 和末尾的“,”是冗余信息。可去掉2個字節。
(9) 地面航向:占用6個字節,進行預處理時中間的“.” 和末尾的“,”是冗余信息。可去掉2個字節。
(10) 其他記錄段與本系統的設計無關都不保留和進行壓縮。可去掉17個字節。
通過以上壓縮預處理后,保留的數據,共占用32個字節,壓縮掉38個字節。這其中把GPS數據格式段中的“,”,和“.”兩個符號去掉非常重要,其他的冗余位可以通過接收不存儲的方法去掉。為了直觀可先設計2個子程序,分別是單片機的單字節串行口接收的子程序和接收GPS數據流中的一段如時間、經度、緯度等并去掉GPS數據串中間的“,”和“.”兩個符號的子程序。單片機串行口單字節接收子程序設計框圖如圖1所示。去掉GPS數據流中間的“,”,“、”子程序如圖2所示。單片機接收GPS數據的壓縮程序設計框圖如圖3所示。

GPS的數據串行口接收程序中不允許中斷,如單字節接收子程序命名為“RECEIVE1”,接收GPS數據段并壓縮掉該數據段中間的“,”,“.”的子程序命名為RECEIVE2,GPS數據流接收的程序為GPSRECEIVE。
在程序中定義:
GPRMC:DB 6
DB “GPRMC,”為GPS數據同步識別標志。

以51匯編語言編寫的程序代碼如下所示:
GPSRECEIVE: MOV DPTR,#GPRMC
…;同步識別處理
ACALL RECEIVE2;接收時間
…;北京時間調整
MOVR0,#30H;數據存放的起始地址
ACALL RECEIVE2;接收定位成功與否信息A或V
ACALL RECEIVE2;接收經度信息
ACALL RECEIVE1;接收不存儲去掉“E”
ACALL RECEIVE1;接收不存儲去掉“,”
ACALL RECEIVE2;接收緯度信息
ACALL RECEIVE1;接收不存儲去掉“S”
ACALL RECEIVE1;接收不存儲去掉“,”
ACALLRECEIVE2;接收速度信息
ACALL RECEIVE2;接收航向信息
…;
該壓縮方在車載系統中使用不僅能節省存儲空間,而且能減少信道占有時間及提高數據的安全性。由于壓縮程序是針對GPS數據格式編寫的,因此其壓縮比大但通用性不強。盡管如此,該程序略做修改可移植到其他系統中,因為各個GPS廠家所執行的規范標準都是NMEA-0183輸出語句,其數據的輸出格式略有差別。
參考文獻
[1]劉大杰,施一民,過靜君.全球定位系統(GPS)的原理與數據處理[M].上海:同濟大學出版社,1996.
[2]魏守明,周生輝.GPS數據在出租車集群調度系統中的傳輸方案[J].電子技術,2002,29(5):29-31.
[3]楊宏業,張躍.GPS定位數據壓縮算法的設計與實現[J].電子技術應用,2002,28(12):29-32.
[4]長青,柳重提.GPS定位與測速算法研究\\.北京航空航天大學學報,1998,24(5):510-513.
[5]劉基余等.全球定位系統原理及應用[M].北京:測繪出版社,1993.
[6]袁玫,袁文.數據壓縮技術及應用[M].北京:電子工業出版社,1995.
[7]吳樂南.數據壓縮的原理及應用[M].北京:電子工業出版社,1995.
作者簡介 楊 永 男,1973年出生,工學碩士,講師,電子信息教研室主任。研究方向為信號與信息處理。
杜文龍 男,1973年出生,工學碩士,講師,通信教研室主任。研究方向為通信工程。