51单片机接收GPS数据的算法与实现
摘 要:介绍以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年出生,工学硕士,讲师,通信教研室主任。研究方向为通信工程。