当前位置:首页 > 通信技术 > 通信技术
[导读]本文以一款EverMore公司的GM-X205GPS接受模块为例,介绍了其数据格式,以及应用PIC16F874单片机RS232串口进行数据接收的程序。

 作者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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

ESP32模块非常通用,可以通过WiFi连接到各种不同的平台来发送和接收数据。在本教程中,我们将使用Arduino的物联网云平台(这是完全免费使用)与ESP32。有关Arduino IoT Cloud的更详细概述,请查看...

关键字: GPS ESP32模块 Arduino 物联网

无人机以高效创新的方案,改变了多个行业的格局。在农业领域,无人机助力精准农业、作物监测和牲畜追踪。工业部门利用无人机进行现场勘测、基础设施检查和项目监控。无人机还在革新配送服务,尤其在向偏远地区运送包裹、医疗用品和紧急援...

关键字: 无人机 GPS 图像传感器

无GPS环境下的自主导航是当今无人驾驶飞行器(UAV)系统面临的最关键挑战之一。从城市峡谷到地下隧道和茂密的森林,许多现实世界的环境使GPS不可靠或完全不可用。为了让无人机在这些条件下安全有效地运行,无论是执行搜救任务、...

关键字: 无人机 GPS TELEM2

虽然现有的技术已经显著改善了盲人的导航和障碍物检测,但它们主要集中在这些方面。我们的目标是扩展这项技术,不仅包括检测,还包括物体、人脸和图像的识别。人工智能的广泛应用旨在通过提供有关其周围环境的更详细和有意义的信息来增强...

关键字: 人工智能 GPS 人脸识别

2025年3月24日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起供应Molex的MX-DaSH线对线连接器。该连接器在同一个系统中集...

关键字: 连接器 显示器 GPS

Sensize的低功耗蓝牙和GPS追踪设备可监测各类在途货物。其重点聚焦于食品分销链,由于全球杂货零售业产生的巨大食品浪费,这一领域尤其引人注目。据智能废弃物处理公司Recycle Tracking Systems的数据...

关键字: 低功耗蓝牙 GPS 自动化

本项目演示了如何使用粒子B系列SoM构建实时大象跟踪系统。该系统可以对大象进行实时GPS跟踪,并实施地理围栏,如果大象离开了预定义的边界,就通知护林员。数据显示在与OpenStreetMap集成的web界面上,并存储在F...

关键字: B-SoM模块 GPS 蜂窝物联网 LED

在这个Visuino项目中,确保精确计时与双源系统!

关键字: Visuino GPS ESP8266-D1 LCD

全球定位系统(GPS)是一种基于卫星的无线电导航系统,归美国政府所有,由美国太空部队运营。它是全球导航卫星系统(GNSS)的一种,它向地球上或地球附近的任何地方的GPS接收器提供地理位置和时间信息,这些接收器可以畅通无阻...

关键字: GP-20U7 GPS 蓝牙

在智能穿戴设备日益普及的今天,智能手表作为其中的佼佼者,不仅具备了时间显示、健康监测等基本功能,还融入了GPS定位技术,为用户提供精准的地理位置服务。然而,智能手表受限于体积和功耗,其GPS定位功能的实现与优化面临诸多挑...

关键字: 智能手表 GPS
关闭