<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用PIC16F874單片機進行GPS串口數(shù)據(jù)接收

          用PIC16F874單片機進行GPS串口數(shù)據(jù)接收

          作者: 時間:2012-01-14 來源:網(wǎng)絡(luò) 收藏

           目前GPS(全球定位系統(tǒng))定位應(yīng)用市場日趨成熟,正在進入應(yīng)用的高速發(fā)展時期。本文以一款EverMore公司的GM-X205GPS接受模塊為例,介紹了其數(shù)據(jù)格式,以及應(yīng)用單片機RS232串口進行數(shù)據(jù)接收的程序。
          1、 GPS應(yīng)用簡介


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


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

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


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


            GGA位置測定系統(tǒng)定位資料(Global Positioning System Fix Data)
            GSV 導(dǎo)航衛(wèi)星資料(GNSS Satellites in View)
            RMC導(dǎo)航衛(wèi)星特定精簡資料(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時間
          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水準面劃分
          13
          WGS-84水準面劃分單位
          14
          累計GPS數(shù)據(jù)微分
          本模塊中不可用
          15
          參考工作站ID
          本模塊中不可用
          16
          校驗位
          *1F


            上面例子中,我們可讀出位置信息:北緯24度46.5241分,西經(jīng)121度00.1536分
            格林威治時間:3點37分44秒

          3、 數(shù)據(jù)接收程序


            筆者在系統(tǒng)中把接收到的數(shù)據(jù)處理后,顯示到圖形液晶屏上。限于篇幅在這里只給出數(shù)據(jù)接收部分程序,并且只接收經(jīng)度和時間信息,并且給出格林威治時間轉(zhuǎn)換為北京時間的轉(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時間的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 ;跳過逗號
            RETURN
            ;************接收函數(shù)******************
            RECEIVE
            CALL PAND ;開始時間數(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ù)據(jù)接收完成
            CALL PAND ;跳過逗號
            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 ;跳過逗號
            CALL PAND ;跳過南/北緯判斷位數(shù)據(jù)
            CALL PAND ;跳過逗號
            CALL PAND ;接受經(jīng)度信號開始
            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)度信號結(jié)束
            RETURN
            ;***************串口寄存器中是否數(shù)據(jù)*****************
            PAND
            BCF STATUS,RP0
            CC BTFSS PIR1,5
            GOTO CC
            MOVF RCREG,0
            RETURN
            ;*****************中斷函數(shù)***************************
            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 ;設(shè)置波特率為4800
            BCF STATUS,RP0
            MOVLW B‘10010000‘
            MOVWF RCSTA ;串口接收相關(guān)設(shè)置
            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 ;清除串口設(shè)置
            CALL CONVERT ;調(diào)用時間轉(zhuǎn)換函數(shù)
            OUT BCF STATUS,RP0 ;跳出中斷部分,恢復(fù)寄存器
            SWAPF STATUS_TEMP,W
            MOVWF STATUS
            SWAPF W_TEMP,F
            SWAPF W_TEMP,W
            BSF INTCON,7 ;SET GIE=1允許所有中端
            NOP
            RETFIE
            ;************ 格林威治時間轉(zhuǎn)換為北京時間******************
            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


          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();