久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5098|回復: 3
打印 上一主題 下一主題
收起左側

單片機解讀GPS信息

  [復制鏈接]
跳轉到指定樓層
樓主
ID:486556 發表于 2019-3-7 23:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用單片機解讀GPS信息是GPS模塊使用最重要的環節,由于汲設到產品的保密問題,這里只介紹時間的處理方法,而方位、速度的處理方法不做介紹,但通過時間的處理方法,同樣可以處理方位、速度。
1、        獲取GPS模塊的輸出信息
由于GPS模塊每秒輸出一次:$GPGGA 、$GPGSA、$GPGSV、 $GPRMC數據。速率慢,因此必須采用中斷方式接收!(采用查詢會造成數據丟失),而且單片機只需要處理$GPRMC信息,即可得到時間、方位、速度。程序采用C51編制,在Keil C中編譯!

code unsigned char GPS_ASC[]="$GPRMC" ;  //定義特征字符串
unsigned char idata RsBuf[60];
//**********************************************************

//讀取GPS模塊串口數據, 采用中斷方式
void GetRs232_Data() interrupt 4
{
        unsigned char i;
        unsigned int j;
        if (RI){
                RI=0;
                RsBuf[0]=SBUF;
                if (RsBuf[0]=='$'){   //是GPS數據的開始,進入查詢接收
                       for (i=1;i<sizeof(GPS_ASC)-1;i++){
                               j=GetUartDat();     //接收下一個數據
                               if (j<256) {
                                       RsBuf=(unsignedchar)j;
                                       if(RsBuf!=GPS_ASC) return;  
                               }        
                       }
//判別是否為$GPRMC數據,是繼續接收!
                       for (;i<sizeof(RsBuf);i++){
                               j=GetUartDat();      
                               if (j<256) {
                                       RsBuf=(unsignedchar)j;
                               }else{
                                       break;
                               }        
                       }
//       接收完畢處理數據!
                       if (1==JiaoYanDat(RsBuf)){
                               FormatTimer(RsBuf);           //格式化時間               
                               FormatSpeed(RsBuf);          //處理速度
                       }
                }
        }
}
//    2、       接收數據的處理
//數據處理前,必須要再次檢驗是否為$GPRMC信息。
unsigned char JiaoYanDat(unsigned char *p){
        unsigned char *pP;
        pP=strstr(p,GPS_ASC);
        if (pP == NULL) return 0;
        return 1;               
}
//     3、接收的數據全部轉換成二進制數據,便于糾錯處理。
unsigned char ASC_To_Bin(unsigned char *p){
        unsigned char i;
        if (p[0]<'0' || p[0]>'9') return 0;
        if (p[1]<'0' || p[1]>'9') return 0;
        i=(p[0]-'0')*10;
        return (i+p[1]-'0');
}
//     4、時間調整
//由于GPS模塊采用格林威治時間,與北京時間相差8個時區,所以要加入8小時。
unsigned char TurnGLW(unsigned char GLW){
        return (GLW+8)%24;
}            
//     5、       格式化標準時間
//  定義一個時間的數據結構:
typedef struct{
        unsigned int  ms;
        unsigned char Sec;
        unsigned char Min;
        unsigned char Hour;
        unsigned char Day;
        unsigned char Mon;
        unsigned char Week;
        unsigned char Year;
}TIMER;
//由于GPS模塊輸出的毫秒不準,所以時間數據結構中的ms變量數據不準!請不要隨便使用!
void FormatTimer(unsigned char *p){
        unsigned char i;
        Timer.ms=(p[14]-'0')*100+(p[15]-'0')*10+p[16]-'0';
        Timer.Hour=TurnGLW(ASC_To_Bin(&p[7]));
        Timer.Min=ASC_To_Bin(&p[9]);
        Timer.Sec=ASC_To_Bin(&p[11]);
        if (p[50]==','){
               Timer.Day=ASC_To_Bin(&p[51]);        
               Timer.Mon=ASC_To_Bin(&p[53]);        
               Timer.Year=ASC_To_Bin(&p[55]);        
        }
}
//    6、 單片機接收串口的數據
//由于單片機接收GPS后續數據,采用了查詢方式!所以要注意避免死機!必須要帶超時處理!
unsigned int GetUartDat(void){
        unsigned int i=0,j=0;
        RI=0;
        while(!RI){
                if(i++>30000){  //超時時間
                       j=256;
                       return j;         //退出標志
                }
        }
        j=SBUF;
        RI=0;
        return j;
}
//    7、單片機的串口設置
//    采用89C52接收GPS數據的串口設置
#define  OSC               0                //定義使用晶振0=11.0592  1=18.4320
#if OSC
        code char BPSAsc[]={
        0x60,0xb0,0xd8,0xec,0xf6,0xfb,0xfb,
        };        //18.4320MHz
#else
        code char BPSAsc[]={
        0xa0,0xd0,0xe8,0xf4,0xfa,0xfd,0xfd,
        };        //11.0592MHz
#endif
//  串口設置
void InitBps (char Bps ){
        PCON &=0x7f;        //PCON。7==0
        SCON =0x50;        //設置成串口1方式
        TH1=BPSAsc[Bps];  //22.1184必須*22004-12-16
        TL1=TH1;
        TR1=1;
}
四、NEMA 0183協議祥解
該協議為NAEA 0183 20版(此協議是為了在不同的GPS導航設備中建立統一的RTCM標準)。
下列命令描述了GPS 25導航儀的數據格式定義,包括波特率選擇,秒脈沖輸出,RTCM定義輸出。

1、NMEA接收語句
*GPS 25輸入語句,主要為初始化,參數設置導通過RXP管腳
(1)ALM(歷書信息)格式:$GPALM、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、<12>、<13>、<14>、<15>、*hh<CR><LF>
如果板上的備用電池耗完,用此語句初始化信息
<1>在歷書下傳時能將歷書總數傳至GPS板上,當發送歷書到GPS板上此字段可空或任意數。
   <2>當前歷書數20這個字段可為空或任意值;
   <3>衛星PRN數不清0到32
   <4>GPS星歷數
   <5>SV狀態,每個歷書的17-24位
   <6>離心率
   <7>星歷參考時間
   <8>傾角
   <9>上升速率
  <10>半軸
  <11>近地點的末端
  <12>節經度
  <13>近點離角
  <14>Afo 時間參數
  <15> Af1 時間參數
   hh:語句末端的hh為該語句的校檢符,應由用戶計算送給GPS 25板,計算規則為:“S”后的所有字節的8個計,每4個組成一個BCD碼(A、B、C等應用大寫)。GPS 25輸出,語句后均有校驗位,用戶可通過它,驗證結果。
(2)初始化信息命令(僅在GPS 25上用)
$PGRMI用來初始化板子設定衛星位置和時間
該語句一般在裙位置和當前實際位置的距離超過800公里時使用,以回憶定位速度
格式:$PGRMI$GPALM、<1>、<2>、<3>、<4>、<5>、<6>、*hh<CR><LF>
  <1>緯度ddmm.mmm格式(初始化必須被寫入板子)
  <2>緯度方向N或S
  <3>經度ddmm.mmm格式(初始化必須被寫入板子)
  <4>經度方向E或N
  <5>當前UTC日期,kkmm yy格式
  <6>當前UTC時間hhmm ss格式
(3)板子配置信息命令(僅用于GPS 25)
$GPALM配置接收板上的參數,存儲在備用電池上。
$GPALM、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、<12>、*hh<CR><LF>
  <1>合適的工作模式A——自動,2——2D模式,3—3D模式
  <2>海平面高度-1500.00~1800.00米
  <3>地理坐標索引
  <4>用戶在地坐標
  <5>用戶大地坐標精度
  <6>用戶大地坐標 x軸
  <7>用戶大地坐標 y軸
  <8>用戶大地坐標z軸
  <9>差分模式A—自動(激活時自動輸出差分信息)D—差分模式
  <10>NMEA波特率1=200 2=2400 3=4800 4=9600
  <11>速度濾波器狀態0=不過濾  1—自動 2~255=濾波器時間常數
  <12>PPS模式:1=無Z=1HZ
  波特率和PPS的改變在重新加電或PIN6初始化后發揮作用。
(4)輸出語句的激活(僅適用于GPS 25)
$PGRMO決定是否進行語句輸出。
$PGRMO<1>、<2>*hh<CR><LF>
(1)語句描述
(2)語句模式0—關閉特殊1 —開啟特  2—關閉所有  3—開啟所有(除GPALM)
注意:(1)如果為2或3時,不做檢驗。允許有空字段
(2)如果為0或1時,描述字段必須被定義
(3)如果如果都不作用時(指上語句中<1><2>),該語句無影響
(4)$PGRMO、GPALM、1將傳送所有昨歷

2、NMEA的發送語句
   通過TXD管腳(GPS 25板上)
(1)傳輸速率
     用戶可自定義
     傳輸長度表傳輸長度=傳輸總字符數/每秒傳輸數
波特率        每秒傳輸數       語句        最大字符
1200        120        GPGGA       72
2400        240        GPGSA       65
4800        480        GPGSV       210
9600        960        GPRMC       70
                GPVTG       34
                PGRME       36
                PGRMT       47
                PGRMV       26
                PGRMF       79
                LCGLL       36
                LCDTG       34
缺省波特率為48000。
(2)時間傳輸
     輸出UTC時間和日期,通過計算板上時間得到當前日期時間。
(3)全球衛星的星歷(ALM)
$GPALM、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、<12>、<13>、<14>、<15>、*hh<CR><LF>
I 不能正常傳送,要通過$PGRMO、GPALM、1命令初始化后得到
*在讀取輸出語句時數據之間最好用“、”區分,不要按位讀取,以保證應用程序兼容性
(4)位置信息(GGA)
$GPGGA、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、M, <11>、<12>*hh<CR><LF>
    <1>UTC時間,hh mm ss格式(定位它的)
    <2>經度dd mm mmmm 格式(非0)
    <3>經度方向 N或S
    <4>緯度ddd mm mmmm 格式(非0)
    <5>緯度方向E或W
    <6>GPS狀態批示0—未定位 1—無差分定位信息 2—帶差分定位信息
    <7>使用衛星號(00~08)
    <8>精度百分比
    <9>海平面高度
    <10>*大地隨球面相對海平面的高度
    <11>差分GPS信息
    <12>差分站ID號 0000-123
(5)GPS  DOP 和活動衛星
  $GPGSA、<1>、<2>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<3>、<4>、<5>、<6>、*hh<CR><LF>
    <1>模式M—手動,A—自動
    <2>當前狀態 1—無定位信息,2—2D  3—3D
    <3>PRN號01~32
    <4>位置精度
    <5>垂直精度
    <6>水平精度
(6)當前GPS衛星狀態(GSV)
    $GPGSV、<1>、<2>、<3>、<4>、<5>、<6>、<7><4>、<5>、<6>、<7>*hh<CR><LF>
    <1>GSV語句的總數目
    <2>當前GSV語句數目
    <3>顯示衛星的總數目00~12
    <4>衛星的PRV號星號
    <5>衛星      仰角
    <6>衛星      旋角
    <7>信操比
    語句共兩條,第條最多包括4顆星的處所。每個星有4個數據,即<4>—星號 <5>—仰角<6>—方位<7>—信噪比
(7)最簡特性(RMC)
$GPRMC、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、*hh<CR><LF>
    <1>定位時UTC時間hhmmss 格式
    <2>狀態A=定位V=導航
    <3>經度ddmm.mmm 格式
    <4>經度方向N 或S
    <5>緯度dddmm.mmmm
    <6>緯度方向E或W
    <7>速率
    <8>方位敬愛(二維方向指向,相當于二維羅盤)
    <9>當前UTC日期ddmmyy 格式
    <10>太陽方位
    <11>太陽方向
(8)VTG速度相對正北的方向
  $GPVTG、<1>、T、<2>、M、<3>、N、<4>K*hh<CR><LF>
<1>真實方向<2>、相對方向<3>步長<4>速率
(9)帶有LORAN ID的地理信息命令
LCGLL 報告位置信息
     $LCGLL、<1>、<2>、<3>、<4>,<5><CR><LF>
1、        經度,ddmm .mm格式
2、        經度方向 N或S
3、        緯度,dddmm .mm格式
4、        緯度方向 E或W
5、        UTC時間(定位點)hhmmss格式
(10)帶有LORAN ID的軌跡,速度信息
LCVTG報告軌跡和速度信息
    $LCVTG、<1>、T、<2>、、<3>、N、<4>,K,<CR><LF>
1、        真實方向(相對于正北)
2、        相對方向
3、        步長
4、        速率
(11)評估錯誤信息
$PGRME 報告評估錯誤信息
    $PGRME、<1>、M、<2>、M、<3>、M、*hh<CR><LF>
1、        GPS星號(0-1023)
2、        附加PGS(0-604799)
3、        UTC日期(當前點)hhmmss格式
4、        UTC時間(當前點)hhmmss格式
5、        GPS跳躍秒數
6、        經度,ddmm.mmmm格式
7、        經度方向,N或S
8、        緯度,dddmm.mmmm格式
9、        緯度方向,E或W
10、模式 M=手動  A=自動
11、定位類型   0=沒定位  1=2D  2=3D
12、速率
13、方位角
(13)狀態信息
$PGRMT、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>*hh<CR><LF>
報告板子狀態語句
1、        產品名稱,模式和軟件版本
2、        自測 P-通過 F-失敗
3、        接收檢測 P-通過  F-失敗
4、        儲存數據狀態 R-保留 L-丟失
5、        時鐘數據狀態  R-保存 L-丟失
6、        晶振檢測 P-通過 F-測試有誤
7、        數據采集 C-收集  空時為不收集
8、        板子溫度 ℃
9、        板子配置數據 R-保留 L-丟失
(14) 3D定位信息
$PGRMV、<1>、<2>、<3>*hh<CR><LF>
1、        向東真實速率  -999.9to 9999.9
2、        向北真實速率  -999.9to 9999.9
3、        垂直速率     -999.9 to 9999.9
$GPGSA,A,1,,,,,,,,,,,,,99.9,99.9,99.9*09
$PSNY,0,00,05,500,06,06,06,06*14
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062320,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7D
$GPGLL,3537.8333,N,13944.6667,E,062320,V*3B
$GPRMC,062320,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0D
$GPZDA,062320,03,02,2022,,*4E
$GPGSV,1,1,00,,,,,,,,,,,,,,,,*79
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062321,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7C
$GPGLL,3537.8333,N,13944.6667,E,062321,V*3A
$GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C
$GPZDA,062321,03,02,2022,,*4F
$GPGSA,A,1,,,,,,,,,,,,,99.9,99.9,99.9*09
$PSNY,0,00,05,500,06,06,06,06*14
$GPVTG,000.0,T,,M,000.0,N,000.0,K*60
$GPGGA,062322,3537.8333,N,13944.6667,E,0,00,99.9,0100,M,,M,000,0000*7F
$GPGLL,3537.8333,N,13944.6667,E,062322,V*39
$GPRMC,062322,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0F
$GPZDA,062322,03,02,2022,,*4C

評分

參與人數 2黑幣 +55 收起 理由
ricardo60472174 + 5
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:447439 發表于 2021-1-21 09:45 | 只看該作者
學習下,最近在研究UBLOX m8n模塊。看到你的文章有點思路了。
回復

使用道具 舉報

板凳
ID:260407 發表于 2022-10-11 09:52 | 只看該作者
學習下,最近在研究
回復

使用道具 舉報

地板
ID:1086148 發表于 2023-7-17 17:39 | 只看該作者
非常感謝樓主作品, 仔細閱讀了, 非常好!  謝謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品72免费观看 | 农村真人裸体丰满少妇毛片 | 欧美一级久久精品 | 亚洲国产欧美在线 | 伦理片97 | 天天操,夜夜爽 | 免费av电影网站 | 日本一区二区高清不卡 | 午夜精品久久久久久久久久久久久 | 成人欧美一区二区三区在线播放 | 欧美性生活免费 | 精品美女在线观看视频在线观看 | 国产精品久久久久久久免费大片 | 日韩欧美网 | 日日骑| 日韩一区二区三区在线观看视频 | 免费成人高清 | 日韩精品在线播放 | 亚洲欧美日韩电影 | 国产女人与拘做受免费视频 | 999精品视频在线观看 | 国产午夜精品一区二区三区在线观看 | xx性欧美肥妇精品久久久久久 | 久久精品在线播放 | 国产精品99久久久精品免费观看 | 国产区精品在线观看 | 天天在线操 | 久久久一| 日韩高清中文字幕 | 精品久久一区 | 午夜影视免费片在线观看 | 午夜精品一区二区三区免费视频 | 一区二区三区av | 99这里只有精品 | 欧美日韩网站 | 精品久久久久久亚洲精品 | 国产免费一区 | 国产一区二区在线免费观看 | 久久亚洲国产精品 | 欧美一级二级视频 | 中文字幕 在线观看 |