首页 > 免费论文 > 计算机论文 > GPS串口数据接收程序实例
 

GPS串口数据接收程序实例

日期:2006-06-10 04:24:53  来源:
请您记住思索网的网址: http://www.4so.net  [加入收藏夹]

     摘 要:目前GPS(全球定位系统)定位应用市场日趋成熟,正在进入应用的高速发展时期。本文以一款EverMore公司的GM-X205GPS接受模块为例,介绍了其数据格式,以及应用PIC16F874单片机RS232串口进行数据接收的程序。

   关键词:GPS、NMEA格式、PIC16F874、串口数据接收

   1、 GPS应用简介

   近年来GPS系统,已经在大地测绘、海上渔用、车辆定位监控、建筑、农业等各个领域得到广泛应用。从九十年代我国引进GPS定位技术开始,经过十多年的市场培育,GPS定位应用进入了发展的最好时机,未来十年基于GPS的应用将会改变我们的生活和工作方式。

   目前市场上的大部分GPS接受模块都是通过RS232串口与MCU进行数据传输的。这些数据包括经度、纬度、海拔高度、时间、卫星使用情况等基本信息。开发人员再依据这些基本数据,进行数据处理来完成整套的定位系统软件。

   2、 GM-X205模块数据格式

   在进行数据接受编程之前,先介绍一下该模块的数据格式。它支持NMEA-0183输出格式。信息如下:

   GGA位置测定系统定位资料(GlobalPositioningSystemFixData)
   GSV导航卫星资料(GNSSSatellitesinView)
   RMC导航卫星特定精简资料(RecommendedMinimumSpecificGNSSData)
   VTG方向及速度等相关资料(CourseOverGroundandGroundSpeed)
   由于文章篇幅问题,笔者在这里只以接收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

 office:office"/>

GGA协议开始

2

UTC时间

033744

 

hhmmss

3

纬度

2446.5241

 

dddmm.mmmm

4

/北半球指示

N

 

N=northS=south

5

经度

12100.1536

 

dddmm.mmmm

6

/西半球指示

E

 

E=eastW=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数据接收程序
笔者在系统中把接收到的数据处理后,显示到图形液晶屏上。限于篇幅在这里只给出数据接收部分程序,并且只接收经度和时间信息,并且给出格林威治时间转换为北京时间的转换函数。其他数据接收程序类似。
;**********************************************************
;        THISISAGPSRECEIVERPROGRAM                 *
;**********************************************************
        LISTP=16F874
        INCLUDEP16F874.INC       
;*******寄存器定义********************
TEMP1    EQU   0X27
W_TEMP   EQU   0X54         
STATUS_TEMP EQU0X55
LONG1    EQU   0X40         ;LONG1---LONG10经度的10位数据
LONG2    EQU   0X41
LONG3    EQU   0X42
LONG4    EQU   0X43
LONG5    EQU   0X44
LONG6    EQU   0X45
LONG7    EQU   0X46
LONG8    EQU   0X47
LONG9    EQU   0X48
LONG10   EQU   0X49
T1       EQU   0X58          ;T1---T6时间的6位数据
T2       EQU   0X59
T3       EQU   0X60
T4       EQU   0X61
T5       EQU   0X62
T6       EQU   0X63
;********************************************************
      ORG 00H
      NOP
      NOP
      GOTOMAIN
      ORG 04H         ;设定按中端健才开始数据接受
      NOP
      NOP
      GOTOINTERRUPT
;*********判断头文件是不是'$GPGGA’**********
IDMESSAGE
       BCF    STATUS,RP0
BREAK0 
    CALL     PAND
       MOVWF    TEMP1
       MOVLW    '$'       ;detect$
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO  BREAK0
       CALL    PAND
       MOVWF    TEMP1
       MOVLW    'G'       ;detectG
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO  BREAK0
       CALL    PAND
       MOVWF    TEMP1
       MOVLW    'P'       ;detectP
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO BREAK0
       CALL    PAND
       MOVWF    TEMP1
       MOVLW    'G'       ;detectG
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO BREAK0
       CALL    PAND
       MOVWF    TEMP1
       MOVLW    'G'       ;detectG
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO BREAK0
       CALL    PAND
       MOVWF    TEMP1
       MOVLW    'A'       ;detectA
       SUBWF    TEMP1,0
       BTFSS    STATUS,Z
       GOTO BREAK0
       CALL    PAND       ;跳过逗号
       RETURN
;************接收函数******************
RECEIVE
      CALL    PAND                   ;开始时间数据接收
      MOVWF   T1
      CALL    PAND
      MOVWF   T2
      CALL    PAND
      MOVWF   T3
      CALL    PAND
      MOVWF   T4
      CALL    PAND
      MOVWF   T5
      CALL    PAND
      MOVWF   T6                     ;时间数据接收完成
      CALL    PAND                    ;跳过逗号
      CALL    PAND                    ;跳过10位纬度数据---开始
      CALL    PAND
CALL    PAND
      CALL    PAND                    
      CALL    PAND
      CALL    PAND
      CALL    PAND                    
      CALL    PAND
      CALL    PAND
      CALL    PAND                    ;跳过10位纬度数据---结束
      CALL    PAND                    ;跳过逗号
      CALL    PAND                    ;跳过南/北纬判断位数据
      CALL    PAND                    ;跳过逗号
      CALL    PAND                    ;接受经度信号开始
      MOVWF   LONG1
      CALL    PAND
      MOVWF   LONG2

 
 
热门信息
 
相关文章
 
    无相关信息