第四章 基于单片机的GPS软件设计
4.1 NMEA-0183数据格式
NMEA-0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。它是在过去海用电子设备的标准格式0180和0182的基础上,增加了GPS接收机输出的内容而完成的。目前广泛采用的是Ver 2.00版本。现在除少数早期的GPS接收机外,几乎所有的GPS接收机均采用了这一格式。此协议是为了在不同的GPS导航设备中建立统一的RTCM标准。这种格式的广泛使用使得GPS接收模块的通用化和互换性大大提高。
这种格式所输出的语句采用的是ASCII字符码,包含了纬度、经度、速度、日期、时间、航向、以及卫星信号情况等信息。其串行通信默认参数为:波特率=9600bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。
帧格式形如:$aaccc,ddd,ddd,…,ddd*hh
(2) aaccc:地址域,前两位为识别符,后三位为语句名; (3) ddd…ddd:数据; (4) “*”:校验和前缀;
(5) hh:校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到校验和后,再转换16进制格式的ASCII字符。)
(6)
4.1.1 输入语句
NMEA-0183输入语句是指GPS接收模块可以接收的语句。输入语句包括初始位置,时间,秒脉冲状态,差分模式,NMEA输出间隔等设置信息。这些语句是GPS接收机可以接受的语句。一般情况下初始化信息语句为PGRMI。
$GPRMI,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh
17
<3>经度dddmm.mmmm(度分)格式(前面的0也将被传输); <4>经度半球E(东经)或W(西经); <5>UTC日期,ddmmyy(日月年)格式; <6>UTC时间,hhmmss(时分秒)格式; <7>接收机命令,A=自动定位,R=机器重新启动。 4.1.2 输出语句
SiRF Star II的输出语句有十余种 ,其主要语句有GPALM(历书数据)、GPGGA(GPS标准数据,定位数据)、GPGSV(卫星状态)、GPGSA、GPRMC、GPVTG、PGRME、PGRMF、PGRMT、PGRMV(GARMIN定义的语句,3D速度信息)、LCGLL、LCVTG(NMEA标准语句)等。可通过GPS串口调试软件发送相应的命令语句给SiRF Star II芯片,此后芯片会根据命令语句设置参数。
几种常用的数据格式如下:
(1) GPS标准数据(GPGGA),其结构为:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15>
<1> UTC时间,格式为hhmmss.sss;
<2> 纬度,格式为ddmm.mmmm(前导位数不足则补0); <3> 纬度半球,N或S(北纬或南纬);
<4> 经度,格式为dddmm.mmmm(前导位数不足则补0); <5> 经度半球,E或W(东经或西经); <6> 定位质量指示,0=定位无效,1=定位有效;
<7> 使用卫星数量,从00到12(前导位数不足则补0); <8> 水平精确度,0.5到99.9;
<9> 天线离海平面的高度,-9999.9到9999.9米 ; <10> 高度单位,M表示单位米;
<11> 大地椭球面相对海平面的高度,-999.9到9999.9米; <12> 高度单位,M表示单位米;
18
<13> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量; <14> 差分参考基站标号,从0000到1023(前导位数不足则补0); <15> 校验和。
(2) 可视卫星状态输出语句(GPGSV),其结构为:
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,...,<4>,<5>,<6>,<7>*<8>
<6> 卫星方位角,000至359度,实际值;
<7> 信噪比(C/No),00至99dB;无表未接收到讯号; <8> 校验和。
(3) 推荐最小GPS/TRANSIT数据(GPRMC),其结构为:
$GPRMC,<1>,<2>,<2>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
$GPRMC语句数据区的内容为:
<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度;
19
<9>UTC日期,ddmmyy(日月年)格式; <10>磁偏角,000.0~180度;
<11>磁偏角方向,E(东)或W(西);
<12>工作模式:A=自主,D=差分,E=评估,N=数据无效[10]。
4.2 基于单片机的GPS定位系统软件开发环境―Keil uVision2
4.2.1 8051开发工具
Keil uVision2是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,它还能嵌入汇编,您可以在关键的位置嵌入。KeilC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器功能的不断增强,使我们可以更加贴近CPU本身及其他的衍生品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包括:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境[11]。
Keil uVision2与同类开发环境具有以下优点:
(1) 真正的集成调试环境,集成了编缉器、编译器、调试器;
(2) 众多强大软硬件调试手段,包括逻辑分析仪、跟踪器、逻辑笔、波形发生器、影子存储器、记时器、程序时效分析、 数据时效分析、硬件测试仪、事件触发器;
(3) 所有类型的单片机集成在一个调试环境下,支持汇编、C、PL/M源程序混合调试; (4) 支持软件模拟,支持项目管理;
(5) 支持点屏功能,直接点击屏幕就可以观察变量的值,方便快捷; (6) 功能强大的观察窗口,支持所有的数据类型; (7) 树状结构显示,一目了然;
(8) 在线直接修改、编译、调试源程序,错误指令定位[12]。 4.2.2 uVision2集成开发环境
(1) 项目管理
20
工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器
(mathaccelerator)的特性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模[13]。
(2) 集成功能
uVision2的强大功能有助于用户按期完工。
集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器;
文件寻找功能:在特定文件中执行全局文件搜索; 工具菜单:允许在V2集成开发环境下启动用户功能; 可配置SVCS接口:提供对版本控制系统的入口; PC-LINT接口:对应用程序代码进行深层语法分析; Infineon的EasyCase接口:集成块集代码产生;
Infineon的DAVE功能:协助用户的CPU和外部程序。DAVE工程可被直接输入uVision2。
4.2.3 编辑器和调试器
(1) 源代码编辑器
uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。
(2) 断点
uVision2允许用户在编辑时设置程序断点(甚至在源代码未经编译和汇编之前),用户启动V2调试器之后,断点即被激活。断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。
21