《GPS串口数据接收程序实例 (3)》由会员分享,可在线阅读,更多相关《GPS串口数据接收程序实例 (3)(9页珍藏版)》请在金锄头文库上搜索。
1、GPS串口数据接收程序实例作者:天大天财股份有限公司巩志民文章来源:单片机及嵌入式系统应用 摘 要:目前GPS(全球定位系统)定位应用市场日趋成熟,正在进入应用的高速发展时期。本文以一款EverMore公司的GM-X205GPS接受模块为例,介绍了其数据格式,以及应用PIC16F874单片机RS232串口进行数据接收的程序。1、GPS应用简介 近年来GPS系统,已经在大地测绘、海上渔用、车辆定位监控、建筑、农业等各个领域得到广泛应用。从九十年代我国引进GPS定位技术开始,经过十多年的市场培育,GPS定位应用进入了发展的最好时机,未来十年基于GPS的应用将会改变我们的生活和工作方式。 目前市场上
2、的大部分GPS接受模块都是通过RS232串口与MCU进行数据传输的。这些数据包括经度、纬度、海拔高度、时间、卫星使用情况等基本信息。开发人员再依据这些基本数据,进行数据处理来完成整套的定位系统软件。 2、GM-X205模块数据格式 在进行数据接受编程之前,先介绍一下该模块的数据格式。它支持NMEA-0183输出格式。信息如下: GGA位置测定系统定位资料(Global Positioning System Fix Data) GSV 导航卫星资料(GNSS Satellites in View) RMC导航卫星特定精简资料(Recommended Minimum Specific GNSS D
3、ata) 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$GPGGAGGA协议开始2UTC时间033744hhmmss3纬度2446.5241dddmm.mmmm4南/北半球指示N
4、N=north ; S=south5经度12100.1536dddmm.mmmm6东/西半球指示EE=east ; W=west7定位指示10 =未定位1=定位SPS模式2=定位DGPS, SPS模式8应位卫星数1000-129HDOP0.8米10海拔高度133.4米11海拔高度单位M米12WGS84水准面划分13WGS-84水准面划分单位14累计GPS数据微分本模块中不可用15参考工作站ID本模块中不可用16校验位*1F上面例子中,我们可读出位置信息:北纬24度46.5241分,西经121度00.1536分 格林威治时间:3点37分44秒3、PIC16F874数据接收程序笔者在系统中把接收到
5、的数据处理后,显示到图形液晶屏上。限于篇幅在这里只给出数据接收部分程序,并且只接收经度和时间信息,并且给出格林威治时间转换为北京时间的转换函数。其他数据接收程序类似。;*; 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
6、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 TEM
7、P1 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 BR
8、EAK0 CALL PAND MOVWF TEMP1 MOVLW G ;detect G SUBWF TEMP1,0 BTFSS STATUS,Z GOTO BREAK0 CALL PAND MOVWF TEMP1 MOVLW A ;detect A 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
9、MOVWF T5 CALL PAND MOVWF T6 ;时间数据接收完成 CALL PAND ;跳过逗号 CALL PAND ;跳过10位纬度数据-开始 CALL PANDCALL 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 CALL PAND MOVWF LONG3 CALL PAND MOVWF LONG4 CALL PAND MOVWF LONG5 CALL PAND MOVWF LONG6 CALL PAND MOVWF LONG7 CALL PAND MOVWF LONG8