GPS串口数据接收研究管理论文

时间:2022-06-25 03:46:00

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位置测定系统定位资料(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

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数据接收程序

笔者在系统中把接收到的数据处理后,显示到图形液晶屏上。限于篇幅在这里只给出数据接收部分程序,并且只接收经度和时间信息,并且给出格林威治时间转换为北京时间的转换函数。其他数据接收程序类似。

;**********************************************************

;THISISAGPSRECEIVERPROGRAM*

;**********************************************************

LISTP=16F874

INCLUDEP16F874.INC

;*******寄存器定义********************

TEMP1EQU0X27

W_TEMPEQU0X54

STATUS_TEMPEQU0X55

LONG1EQU0X40;LONG1---LONG10经度的10位数据

LONG2EQU0X41

LONG3EQU0X42

LONG4EQU0X43

LONG5EQU0X44

LONG6EQU0X45

LONG7EQU0X46

LONG8EQU0X47

LONG9EQU0X48

LONG10EQU0X49

T1EQU0X58;T1---T6时间的6位数据

T2EQU0X59

T3EQU0X60

T4EQU0X61

T5EQU0X62

T6EQU0X63

;********************************************************

ORG00H

NOP

NOP

GOTOMAIN

ORG04H;设定按中端健才开始数据接受

NOP

NOP

GOTOINTERRUPT

;*********判断头文件是不是''''$GPGGA’**********

IDMESSAGE

BCFSTATUS,RP0

BREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''$'''';detect$

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''G'''';detectG

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''P'''';detectP

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''G'''';detectG

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''G'''';detectG

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND

MOVWFTEMP1

MOVLW''''A'''';detectA

SUBWFTEMP1,0

BTFSSSTATUS,Z

GOTOBREAK0

CALLPAND;跳过逗号

RETURN

;************接收函数******************

RECEIVE

CALLPAND;开始时间数据接收

MOVWFT1

CALLPAND

MOVWFT2

CALLPAND

MOVWFT3

CALLPAND

MOVWFT4

CALLPAND

MOVWFT5

CALLPAND

MOVWFT6;时间数据接收完成

CALLPAND;跳过逗号

CALLPAND;跳过10位纬度数据---开始

CALLPAND

CALLPAND

CALLPAND

CALLPAND

CALLPAND

CALLPAND

CALLPAND

CALLPAND

CALLPAND;跳过10位纬度数据---结束

CALLPAND;跳过逗号

CALLPAND;跳过南/北纬判断位数据

CALLPAND;跳过逗号

CALLPAND;接受经度信号开始

MOVWFLONG1

CALLPAND

MOVWFLONG2