新聞中心

        EEPW首頁(yè) > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > GPS串口數(shù)據(jù)接收程序?qū)嵗?/p>

        GPS串口數(shù)據(jù)接收程序?qū)嵗?/h1>
        作者: 時(shí)間:2004-12-07 來源:網(wǎng)絡(luò) 收藏
        作者Email: Atom002@sohu.com

        摘 要:目前(全球定位系統(tǒng))定位應(yīng)用市場(chǎng)日趨成熟,正在進(jìn)入應(yīng)用的高速發(fā)展時(shí)期。本文以一款EverMore公司的GM-X205接受模塊為例,介紹了其格式,以及應(yīng)用PIC16F874單片機(jī)RS232進(jìn)行

        關(guān)鍵詞、NMEA格式、PIC16F874、

        1、GPS應(yīng)用簡(jiǎn)介

        近年來GPS系統(tǒng),已經(jīng)在大地測(cè)繪、海上漁用、車輛定位監(jiān)控、建筑、農(nóng)業(yè)等各個(gè)領(lǐng)域得到廣泛應(yīng)用。從九十年代我國(guó)引進(jìn)GPS定位技術(shù)開始,經(jīng)過十多年的市場(chǎng)培育,GPS定位應(yīng)用進(jìn)入了發(fā)展的最好時(shí)機(jī),未來十年基于GPS的應(yīng)用將會(huì)改變我們的生活和工作方式。

        目前市場(chǎng)上的大部分GPS接受模塊都是通過RS232與MCU進(jìn)行數(shù)據(jù)傳輸?shù)摹_@些數(shù)據(jù)包括經(jīng)度、緯度、海拔高度、時(shí)間、衛(wèi)星使用情況等基本信息。開發(fā)人員再依據(jù)這些基本數(shù)據(jù),進(jìn)行數(shù)據(jù)處理來完成整套的定位系統(tǒng)軟件。

        2、GM-X205模塊數(shù)據(jù)格式

        在進(jìn)行數(shù)據(jù)接受編程之前,先介紹一下該模塊的數(shù)據(jù)格式。它支持NMEA-0183輸出格式。信息如下:

        GGA位置測(cè)定系統(tǒng)定位資料(Global Positioning System Fix Data)
        GSV 導(dǎo)航衛(wèi)星資料(GNSS Satellites in View)
        RMC導(dǎo)航衛(wèi)星特定精簡(jiǎn)資料(Recommended Minimum Specific GNSS Data)
        VTG 方向及速度等相關(guān)資料(Course Over Ground and Ground Speed)
        由于文章篇幅問題,筆者在這里只以GGA數(shù)據(jù)為例,格式如下:
        $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

        說明見表:

        區(qū)域

        名稱

        單位

        說明

        1

        信息ID

        $GPGGA

        GGA協(xié)議開始

        2

        UTC時(shí)間

        033744

        hhmmss

        3

        緯度

        2446.5241

        dddmm.mmmm

        4

        /北半球指示

        N

        N=north S=south

        5

        經(jīng)度

        12100.1536

        dddmm.mmmm

        6

        /西半球指示

        E

        E=east W=west

        7

        定位指示

        1

        0 =未定位

        1=定位SPS模式

        2=定位DGPS, SPS模式

        8

        應(yīng)位衛(wèi)星數(shù)

        10

        00-12

        9

        HDOP

        0.8

        10

        海拔高度

        133.4

        11

        海拔高度單位

        M

        12

        WGS84水準(zhǔn)面劃分

        13

        WGS-84水準(zhǔn)面劃分單位

        14

        累計(jì)GPS數(shù)據(jù)微分

        本模塊中不可用

        15

        參考工作站ID

        本模塊中不可用

        16

        校驗(yàn)位

        *1F

        上面例子中,我們可讀出位置信息:北緯24度46.5241分,西經(jīng)121度00.1536分
        格林威治時(shí)間:3點(diǎn)37分44秒
        3、PIC16F874數(shù)據(jù)接收
        筆者在系統(tǒng)中把接收到的數(shù)據(jù)處理后,顯示到圖形液晶屏上。限于篇幅在這里只給出數(shù)據(jù)接收部分,并且只接收經(jīng)度和時(shí)間信息,并且給出格林威治時(shí)間轉(zhuǎn)換為北京時(shí)間的轉(zhuǎn)換函數(shù)。其他數(shù)據(jù)接收程序類似。
        ;**********************************************************
        ; 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經(jīng)度的10位數(shù)據(jù)
        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時(shí)間的6位數(shù)據(jù)
        T2 EQU 0X59
        T3 EQU 0X60
        T4 EQU 0X61
        T5 EQU 0X62
        T6 EQU 0X63
        ;********************************************************
        ORG 00H
        NOP
        NOP
        GOTO MAIN
        ORG 04H ;設(shè)定按中端健才開始數(shù)據(jù)接受
        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 ;跳過逗號(hào)
        RETURN
        ;************接收函數(shù)******************
        RECEIVE
        CALL PAND ;開始時(shí)間數(shù)據(jù)接收
        MOVWF T1
        CALL PAND
        MOVWF T2
        CALL PAND
        MOVWF T3
        CALL PAND
        MOVWF T4
        CALL PAND
        MOVWF T5
        CALL PAND
        MOVWF T6 ;時(shí)間數(shù)據(jù)接收完成
        CALL PAND ;跳過逗號(hào)
        CALL PAND ;跳過10位緯度數(shù)據(jù)---開始
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND
        CALL PAND ;跳過10位緯度數(shù)據(jù)---結(jié)束
        CALL PAND ;跳過逗號(hào)
        CALL PAND ;跳過南/北緯判斷位數(shù)據(jù)
        CALL PAND ;跳過逗號(hào)
        CALL PAND ;接受經(jīng)度信號(hào)開始
        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 ;接受經(jīng)度信號(hào)結(jié)束
        RETURN
        ;***************串口寄存器中是否數(shù)據(jù)*****************
        PAND
        BCF STATUS,RP0
        CC BTFSSPIR1,5
        GOTOCC
        MOVF RCREG,0
        RETURN
        ;*****************中斷函數(shù)***************************
        INTERRUPT
        BCFINTCON,7 ;SET GIE=0屏蔽所有中端
        BCF STATUS,RP0
        BCF RCSTA,1 ;清除溢出錯(cuò)誤位
        BSF STATUS,RP0
        BCF TXSTA,2 ;BRGH=0 Low speed
        BCF TXSTA,4 ;Set Asynchronous mode
        MOVLW 0X0C
        MOVWF SPBRG ;設(shè)置波特率為4800
        BCF STATUS,RP0
        MOVLW B'10010000'
        MOVWF RCSTA ;串口接收相關(guān)設(shè)置
        BSF STATUS,RP0
        BSF OPTION_REG,6 ; RB0/INT 引腳上升沿中斷
        MOVWFW_TEMP
        SWAPFSTATUS,W
        BCF STATUS,RP0
        MOVWFSTATUS_TEMP
        BCF STATUS,RP0
        CALL IDMESSAGE
        CALL RECEIVE
        BCF STATUS,RP0
        CLRF RCSTA ;清除串口設(shè)置
        CALL CONVERT ;調(diào)用時(shí)間轉(zhuǎn)換函數(shù)
        OUTBCFSTATUS,RP0 ;跳出中斷部分,恢復(fù)寄存器
        SWAPFSTATUS_TEMP,W
        MOVWFSTATUS
        SWAPFW_TEMP,F
        SWAPFW_TEMP,W
        BSF INTCON,7 ;SET GIE=1允許所有中端
        NOP
        RETFIE
        ;************ 格林威治時(shí)間轉(zhuǎn)換為北京時(shí)間******************
        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 ;打開中斷
        LOOPNOP
        BCF STATUS,RP0
        GOTO LOOP
        GOTOMAIN
        END



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阿鲁科尔沁旗| 商都县| 定日县| 威宁| 新丰县| 蓬莱市| 横山县| 双鸭山市| 泸溪县| 同仁县| 印江| 巴林右旗| 敦化市| 娄底市| 新宁县| 东明县| 新丰县| 石台县| 岳西县| 邳州市| 阳原县| 湾仔区| 平江县| 肥西县| 彩票| 白玉县| 柳林县| 陇西县| 新安县| 志丹县| 无为县| 麻栗坡县| 鄂尔多斯市| 新河县| 青岛市| 永仁县| 泽普县| 原平市| 山东省| 扶风县| 措美县|