GPS串口数据接收程序实例》及本站其它信息均来自网络!
行业新闻技术文章解决方案电路图产品库厂商库供应信息求购信息外刊文摘
 技术文章 -> PCB电源单片机DSP设备与仪器EDA放大/转换存储器嵌入式接口与连接通讯与网络模拟技术其它技术文章
 解决方案 -> 汽车电子光电与显示测试测量计算机与外设仪器仪表通讯与网络视像设备消费电子工业控制其它解决方案
 产 品 库 -> 存储器嵌入式单片机电源通讯网络接口电路DSP视频音频EDA/PLD显示光电电测仪表传感与控制其它产品
 首页 -> 解决方案 -> 通信与网络 -> 正文

GPS串口数据接收程序实例

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

考工作站ID

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

()
Google
 >> 最近更新
 • 金属卤素曝光灯
 •  810nm激光二极管芯片
 •  室外光缆接续合
 •  车用插入式紫外线光触媒空气净化器
 •  开放KFPS槽型光电开关
 •  台湾阳明FOTEK超长检测距离光电开关
 •  智能深夜自控光电子镇流器
 •  cisco CWDM-GBIC-1470千兆波分复用光纤模块
 •  KHM-310AAA DVD机芯
 •  Omron光电开关
 •  电晶体输出光耦合IC
 • 高解夏普彩色CCD摄像机
 •   高速-光耦合IC
 • 交通灯用发光管
 •  GPJ50H光缆接头盒
 •  台湾阳明(fotek)长距离型光电开关
 • 迷你激光笔
 • 特大功率全彩
 • 紫外光敏管总成
 •  EL冷光片 EL背光源 EL广告片 EL冷光片
Copyright © 2005-2008 555DZ.com 联系站长:55dz@163.com