十年專注單片機方案開發(fā)的方案公司英銳恩,分享基于PIC16F874單片機的GPS串口數(shù)據(jù)接收程序實例。英銳恩現(xiàn)提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。
摘 要:目前GPS(全球定位系統(tǒng))定位應用市場日趨成熟,正在進入應用的高速發(fā)展時期。本文以一款EverMore公司的GM-X205GPS接受模塊為例,介紹了其數(shù)據(jù)格式,以及應用PIC16F874單片機RS232串口進行數(shù)據(jù)接收的程序。
關鍵詞:GPS、NMEA格式、PIC16F874、串口數(shù)據(jù)接收
1、 GPS應用簡介
近年來GPS系統(tǒng),已經在大地測繪、海上漁用、車輛定位監(jiān)控、建筑、農業(yè)等各個領域得到廣泛應用。從九十年代我國引進GPS定位技術開始,經過十多年的市場培育,GPS定位應用進入了發(fā)展的最好時機,未來十年基于GPS的應用將會改變我們的生活和工作方式。
目前市場上的大部分GPS接受模塊都是通過RS232串口與MCU進行數(shù)據(jù)傳輸?shù)摹_@些數(shù)據(jù)包括經度、緯度、海拔高度、時間、衛(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 導航衛(wèi)星資料(GNSS Satellites in View)
RMC導航衛(wèi)星特定精簡資料(Recommended Minimum Specific GNSS Data)
VTG 方向及速度等相關資料(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 | 經度 | 12100.1536 | dddmm.mmmm | |
6 | 東/西半球指示 | E | E=east ; W=west | |
7 | 定位指示 | 1 | 0 =未定位 1=定位SPS模式 2=定位DGPS, SPS模式 | |
8 | 應位衛(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分,西經121度00.1536分
格林威治時間:3點37分44秒
3、 PIC16F874數(shù)據(jù)接收程序
筆者在系統(tǒng)中把接收到的數(shù)據(jù)處理后,顯示到圖形液晶屏上。限于篇幅在這里只給出數(shù)據(jù)接收部分程序,并且只接收經度和時間信息,并且給出格林威治時間轉換為北京時間的轉換函數(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經度的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ù)據(jù)接受
NOP
NOP
GOTO INTERRUPT
;*********判斷頭文件是不是'$GPGGA’**********
IDMESSAGE
BCF STATUS,RP0
BREAK0
CALL PAND
MOVWF TEMP1
MOVLW '