作者Email: Atom002@sohu.com
摘 要:目前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 0X27
W_TEMP EQU 0X54
STATUS_TEMP EQU 0X55
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
GOTO MAIN
ORG 04H ;设定按中端健才开始数据接受
NOP
NOP
GOTO INTERRUPT
;*********判断头文件是不是"$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" ;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
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
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
CALL PAND
MOVWF LONG3
CALL PAND
MOVWF LONG4
CALL PAND
MOVWF LONG5
CALL PAND
MOVWF LONG6
CALL PAND
MOVWF LONG7
CALL PAND
MOVWF LONG8
CALL PAND
MOVWF LONG9
CALL PAND
MOVWF LONG10 ;接受经度信号结束
RETURN
;***************串口寄存器中是否数据*****************
PAND
BCF STATUS,RP0
CC BTFSS PIR1,5
GOTO CC
MOVF RCREG,0
RETURN
;*****************中断函数***************************
INTERRUPT
BCF INTCON,7 ;SET GIE=0屏蔽所有中端
BCF STATUS,RP0
BCF RCSTA,1 ;清除溢出错误位
BSF STATUS,RP0
BCF TXSTA,2 ;BRGH=0 Low speed
BCF TXSTA,4 ;Set Asynchronous mode
MOVLW 0X0C
MOVWF SPBRG ;设置波特率为4800
BCF STATUS,RP0
MOVLW B"10010000"
MOVWF RCSTA ;串口接收相关设置
BSF STATUS,RP0
BSF OPTION_REG,6 ; RB0/INT 引脚上升沿中断
MOVWF W_TEMP
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_TEMP
BCF STATUS,RP0
CALL IDMESSAGE
CALL RECEIVE
BCF STATUS,RP0
CLRF RCSTA ;清除串口设置
CALL CONVERT ;调用时间转换函数
OUT BCF STATUS,RP0 ;跳出中断部分,恢复寄存器
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
BSF INTCON,7 ;SET GIE=1允许所有中端
NOP
RETFIE
;************ 格林威治时间转换为北京时间******************
CONVERT
MOVLW A"0"
SUBWF T2,1
SUBWF T1,1
MOVLW D"10"
MOVWF TEMP1
LOOP1 MOVF TEMP1,0
MOVF TEMP1,1
BTFSS STATUS,Z
GOTO ADD10
MOVLW D"8"
ADDWF T2,1
MOVLW D"24"
SUBWF T2,1
BTFSC STATUS,C
GOTO CON1
ADDWF T2,1
GOTO CON1
CON1 MOVLW D"20"
MOVWF TEMP1
SUBWF T2,0
BTFSS STATUS,C
GOTO CON2
MOVWF T2
MOVLW 0X02
MOVWF T1
GOTO HALT1
CON2 MOVLW D"10"
MOVWF TEMP1
SUBWF T2,0
BTFSS STATUS,C
GOTO CON3
MOVWF T2
MOVLW 0X01
MOVWF T1
GOTO HALT1
CON3 MOVLW 0X00
MOVWF T1
HALT1 MOVLW A"0"
ADDWF T1,1
ADDWF T2,1
RETURN
ADD10 MOVF T1,0
ADDWF T2,1
DECF TEMP1,1
GOTO LOOP1
RETURN
;******************MAIN***********************
MAIN
BCF STATUS,RP0
MOVLW B"10010000"
MOVWF INTCON ;打开中断
LOOP NOP
BCF STATUS,RP0
GOTO LOOP
GOTO MAIN
END
引用地址:GPS串口数据接收程序实例
小广播
热门活动
换一批
更多
最新网络通信文章
- Wi-Fi 8规范已在路上:2.4/5/6GHz三频工作
- 治理混合多云环境的三大举措
- Microchip借助NVIDIA Holoscan平台加速实时边缘AI部署
- 是德科技 FieldFox 手持式分析仪配合 VDI 扩频模块,实现毫米波分析功能
- 高通推出其首款 RISC-V 架构可编程连接模组 QCC74xM,支持 Wi-Fi 6 等协议
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 英飞凌推出新型高性能微控制器AURIX™ TC4Dx
- Rambus宣布推出业界首款HBM4控制器IP,加速下一代AI工作负载
- 恩智浦FRDM平台助力无线连接
更多精选电路图
更多热门文章
更多每日新闻
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
更多往期活动
11月16日历史上的今天
厂商技术中心