正文

GPS串口数据接收程序实例2005-09-24 07:34:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5198.html

分享到:

GPS串口数据接收程序实例 文章作者:巩志民       摘  要:目前GPS(全球定位系统)定位应用市场日趋成熟,正在进入应用的高速发展时期。本文以一款EverMore公司的GM-X205GPS接受模块为例,介绍了其数据格式,以及应用PIC16F874单片机RS232串口进行数据接收的程序。     关键词:GPS、NMEA格式、PIC16F874、串口数据接收     1、 GPS应用简介     近年来GPS系统,已经在大地测绘、海上渔用、车辆定位监控、建筑、农业等各个领域得到广泛应用。从九十年代我国引进GPS定位技术开始,经过十多年的市场培育,GPS定位应用进入了发展的最好时机,未来十年基于GPS的应用将会改变我们的生活和工作方式。     目前市场上的大部分GPS接受模块都是通过RS232串口与MCU进行数据传输的。这些数据包括经度、纬度、海拔高度、时间、卫星使用情况等基本信息。开发人员再依据这些基本数据,进行数据处理来完成整套的定位系统软件。     2、 GM-X205模块数据格式     在进行数据接受编程之前,先介绍一下该模块的数据格式。它支持NMEA-0183输出格式。信息如下:     GGA位置测定系统定位资料(Global Positioning System Fix Data)    GSV 导航卫星资料(GNSS Satellites in View)    RMC导航卫星特定精简资料(Recommended Minimum Specific GNSS Data)    VTG 方向及速度等相关资料(Course Over Ground and Ground Speed)    由于文章篇幅问题,笔者在这里只以接收GGA数据为例,格式如下:    $GPGGA,hhmmss,dddmm.mmmm,a,dddmm.mmmm,a,x,xx,x.x,x.x,M,,M,x.x,xxxx*CS    例:$GPGGA,033744,2446.5241,N,12100.1536,E,1,10,0.8,133.4,M,,,,*1F   说明见表: 区域 名称 例 单位 说明 1 信息ID $GPGGA   GGA协议开始 2 UTC时间 033744   hhmmss 3 纬度 2446.5241   dddmm.mmmm 4 南/北半球指示 N   N=north ; S=south 5 经度 12100.1536   dddmm.mmmm 6 东/西半球指示 E   E=east ; W=west 7 定位指示 1   0 =未定位 1=定位SPS模式 2=定位DGPS, SPS模式 8 应位卫星数 10   00-12 9 HDOP 0.8 米   10 海拔高度 133.4 米   11 海拔高度单位 M 米   12 WGS84水准面划分       13 WGS-84水准面划分单位       14 累计GPS数据微分     本模块中不可用 15 参考工作站ID     本模块中不可用 16 校验位 *1F     上面例子中,我们可读出位置信息:北纬24度46.5241分,西经121度00.1536分                                格林威治时间:3点37分44秒3、 PIC16F874数据接收程序笔者在系统中把接收到的数据处理后,显示到图形液晶屏上。限于篇幅在这里只给出数据接收部分程序,并且只接收经度和时间信息,并且给出格林威治时间转换为北京时间的转换函数。其他数据接收程序类似。;**********************************************************;         THIS IS A GPS RECEIVER PROGRAM                  *;**********************************************************         LIST P=16F874         INCLUDE P16F874.INC       ;*******寄存器定义 ********************TEMP1     EQU    0X27W_TEMP    EQU    0X54         STATUS_TEMP  EQU 0X55LONG1     EQU    0X40          ;LONG1--- LONG10经度的10位数据LONG2     EQU    0X41LONG3     EQU    0X42LONG4     EQU    0X43LONG5     EQU    0X44LONG6     EQU    0X45LONG7     EQU    0X46LONG8     EQU    0X47LONG9     EQU    0X48LONG10    EQU    0X49T1        EQU    0X58           ;T1---T6时间的6位数据T2        EQU    0X59T3        EQU    0X60T4        EQU    0X61T5        EQU    0X62T6        EQU    0X63;********************************************************       ORG  00H       NOP       NOP       GOTO MAIN       ORG  04H          ;设定按中端健才开始数据接受       NOP       NOP       GOTO INTERRUPT;*********判断头文件是不是'$GPGGA’**********IDMESSAGE        BCF     STATUS,RP0BREAK0      CALL      PAND        MOVWF     TEMP1        MOVLW     '$'        ;detect $        SUBWF     TEMP1,0        BTFSS     STATUS,Z        GOTO   BREAK0        CALL     PAND        MOVWF     TEMP1        MOVLW     'G'        ;detect G        SUBWF     TEMP1,0        BTFSS     STATUS,Z        GOTO   BREAK0        CALL     PAND        MOVWF     TEMP1        MOVLW     'P'        ;detect P        SUBWF     TEMP1,0        BTFSS     STATUS,Z        GOTO  BREAK0        CALL     PAND        MOVWF     TEMP1        MOVLW     'G'        ;detect G        SUBWF     TEMP1,0        BTFSS     STATUS,Z        GOTO  BREAK0        CALL     PAND        MOVWF     TEMP1        MOVLW     'G'        ;detect G        SUBWF     TEMP1,0        BTFSS     STATUS,Z      &n

阅读(4507) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册