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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5666|回復(fù): 3
收起左側(cè)

2440裸機(jī)編程之十二 GPS

[復(fù)制鏈接]
ID:68618 發(fā)表于 2014-11-12 13:33 | 顯示全部樓層 |閱讀模式

全球衛(wèi)星定位系統(tǒng)實(shí)際上是由24 顆衛(wèi)星所組成,其中有3 顆為備用衛(wèi)星,這些衛(wèi)星分布于距地表20,200 公里的上空,而且分屬于6 個(gè)軌道面;衛(wèi)星軌道面傾斜角為55 度﹐提供全球全天候﹐每秒一次﹐持續(xù)不斷的定位訊號(hào)。這些衛(wèi)星每11 小時(shí)58 分環(huán)繞地球一次,即每天繞過(guò)您的頭頂二次,就像是月球一樣不停地繞著地球旋轉(zhuǎn),其速度約每秒1.8 哩。這些衛(wèi)星需要地面管制站隨時(shí)加以監(jiān)控是否GPS 衛(wèi)星在其正確的軌道上及正常運(yùn)作,另外監(jiān)控中心可上傳資料給衛(wèi)星,衛(wèi)星再將這些信息下傳給GPS 使用者使用。地面共有五個(gè)監(jiān)控中心,四個(gè)上傳資料站及一個(gè)控制中心,這些控制站以緯度來(lái)劃分其所控制的衛(wèi)星。在概念上﹐GPS 是代表著整個(gè)系統(tǒng)﹐包括天空上的衛(wèi)星、地面控制站及GPS 接收機(jī)。不過(guò)一般而言﹐GPS 即意指一個(gè)GPS 接收機(jī)﹐這是因?yàn)槲覀冊(cè)谑褂蒙隙喟胫粫?huì)接觸GPS 接收機(jī)的緣故。一般所使用之GPS 接收機(jī)在任何時(shí)刻接收到4 顆或更多的衛(wèi)星。
簡(jiǎn)單的說(shuō)GPS 如何運(yùn)作:每一顆衛(wèi)星會(huì)告訴您使用的接收機(jī)三件事,我是第幾號(hào)衛(wèi)星,我現(xiàn)位置在那里,我什么時(shí)候送這訊息給您。當(dāng)您的GPS 接收機(jī)接收到這些資料后會(huì)將星歷資料及Almanac 存起來(lái)使用,這些資料也用做修正GPS 接收機(jī)上的時(shí)間。GPS 接收機(jī)比較每一衛(wèi)星訊號(hào)接收到的時(shí)間及本身接收機(jī)的時(shí)間的不同,而計(jì)算出每一衛(wèi)星道接收機(jī)的距離。接收機(jī)若在接收到更多衛(wèi)星時(shí),它可利用三角公式計(jì)算出接收機(jī)所在位置。三顆衛(wèi)星可做所謂2D 定位(經(jīng)度及緯度),四顆或更多衛(wèi)星可做所謂3D 定位(經(jīng)度、緯度及高度)。接收機(jī)繼續(xù)不段地更新您的位置,所以它可計(jì)算出您的移動(dòng)方向及速度。

GPRMC
  推薦定位信息(GPRMC)
例:$GPRMC,154717.000, A ,3906.1439, N ,11720.8569, E ,0.00,331.02,050611,    ,    ,   A*6B
  $GPRMC,   <1>    ,<2>,    <3>  ,<4>,    <5>   ,<6>, <7>,  <8> ,  <9> ,<10>,<11>,<12>*hh
  <1> UTC時(shí)間,hhmmss.sss(時(shí)分秒.毫秒)格式
  <2> 定位狀態(tài),A=有效定位,V=無(wú)效定位
  <3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
  <4> 緯度半球N(北半球)或S(南半球)
  <5> 經(jīng)度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
  <6> 經(jīng)度半球E(東經(jīng))或W(西經(jīng))
  <7> 地面速率(000.0~999.9節(jié),前面的0也將被傳輸)
  <8> 地面航向(000.0~359.9度,以正北為參考基準(zhǔn),前面的0也將被傳輸)
  <9> UTC日期,ddmmyy(日月年)格式
  <10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
  <11> 磁偏角方向,E(東)或W(西)
  <12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無(wú)效)

GPGGA
GPS固定數(shù)據(jù)輸出語(yǔ)句($GPGGA)
這是一幀GPS定位的主要數(shù)據(jù),也是使用最廣的數(shù)據(jù)。
  $GPGGA 語(yǔ)句包括17個(gè)字段:語(yǔ)句標(biāo)識(shí)頭,世界時(shí)間,緯度,緯度半球,經(jīng)度,經(jīng)度半球,定位質(zhì)量指示,使用衛(wèi)星數(shù)量,水平精確度,海拔高度,高度單位,大地水準(zhǔn)面高度,高度單位,差分GPS數(shù)據(jù)期限,差分參考基站標(biāo)號(hào),校驗(yàn)和結(jié)束標(biāo)記(用回車符<CR>和換行符<LF>),分別用14個(gè)逗號(hào)進(jìn)行分隔。該數(shù)據(jù)幀的結(jié)構(gòu)及各字段釋義如下:
  
例:          $GPGGA,154717.000,3906.1439, N ,11720.8569, E , 1 , 05,1.6, 23.2,M,-2.3,M,    , 0000*74
其標(biāo)準(zhǔn)格式為:$GPGGA,   (1)   ,    (2)  ,(3),    (4)   ,(5),(6),(7),(8),  (9),M,(10),M,(11),(12) *hh(CR)(LF)
起始引導(dǎo)符及語(yǔ)句格式說(shuō)明(本句為GPS定位數(shù)據(jù));
  <1> UTC時(shí)間,格式為hhmmss.sss;
  <2> 緯度,格式為ddmm.mmmm(第一位是零也將傳送);
  <3> 緯度半球,N或S(北緯或南緯)
  <4> 經(jīng)度,格式為dddmm.mmmm(第一位零也將傳送);
  <5> 經(jīng)度半球,E或W(東經(jīng)或西經(jīng))
  <6> GPS狀態(tài), 0未定位, 1非差分定位, 2差分定位, 3無(wú)效PPS, 6正在估算
  <7> 使用衛(wèi)星數(shù)量,從00到12(第一個(gè)零也將傳送)
  <8> 水平精確度,0.5到99.9
  <9> 天線離海平面的高度,-9999.9到9999.9米
  M 指單位米
  <10> 大地水準(zhǔn)面高度,-9999.9到9999.9米
  M 指單位米
  <11> 差分GPS數(shù)據(jù)期限(RTCM SC-104),最后設(shè)立RTCM傳送的秒數(shù)量,如不是差分定位則為空
  <12> 差分參考基站標(biāo)號(hào),從0000到1023(首位0也將傳送)。
  * 語(yǔ)句結(jié)束標(biāo)志符
  xx 從$開(kāi)始到*之間的所有ASCII碼的異或校驗(yàn)和
  <CR> 回車
  <LF> 換行


GPGSA
  $GPGSA : GPS DOP and Active Satellites(GSA)當(dāng)前衛(wèi)星信息
例:$GPGSA,A,3,28,02,10,23,04,,,,,,,,2.4,1.6,1.8*36

    字段1:定位模式,A=自動(dòng)手動(dòng)2D/3D,M=手動(dòng)2D/3D
  字段2:定位類型,1=未定位,2=2D定位,3=3D定位
  字段3:PRN碼(偽隨機(jī)噪聲碼),第1信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段4:PRN碼(偽隨機(jī)噪聲碼),第2信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段5:PRN碼(偽隨機(jī)噪聲碼),第3信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段6:PRN碼(偽隨機(jī)噪聲碼),第4信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段7:PRN碼(偽隨機(jī)噪聲碼),第5信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段8:PRN碼(偽隨機(jī)噪聲碼),第6信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段9:PRN碼(偽隨機(jī)噪聲碼),第7信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段10:PRN碼(偽隨機(jī)噪聲碼),第8信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段11:PRN碼(偽隨機(jī)噪聲碼),第9信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段12:PRN碼(偽隨機(jī)噪聲碼),第10信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段13:PRN碼(偽隨機(jī)噪聲碼),第11信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段14:PRN碼(偽隨機(jī)噪聲碼),第12信道正在使用的衛(wèi)星PRN碼編號(hào)(00)(前導(dǎo)位數(shù)不足則補(bǔ)0)
  字段15:PDOP綜合位置精度因子(0.5 - 99.9)
  字段16:HDOP水平精度因子(0.5 - 99.9)
  字段17:VDOP垂直精度因子(0.5 - 99.9)
  字段18:校驗(yàn)值


GPGSV
  可視衛(wèi)星狀態(tài)輸出語(yǔ)句($GPGSV)
  例:       $GPGSV,  3 ,  1 ,  12,  04,  51, 261,  44,  28,45,179,27,10,18,192,26,02, 12,250, 44*7C
  標(biāo)準(zhǔn)格式: $GPGSV,(1),(2),(3),(4),(5),(6),(7),       ………………       (4),(5),(6),(7)*hh(CR)(LF)
  各部分含義為:
  (1)總的GSV語(yǔ)句電文數(shù);2;
  (2)當(dāng)前GSV語(yǔ)句號(hào):1;
  (3)可視衛(wèi)星總數(shù):08;
  (4)PRN碼(偽隨機(jī)噪聲碼) 也可以認(rèn)為是衛(wèi)星編號(hào)
  (5)仰角(00~90度):33度;
  (6)方位角(000~359度):240度;
  (7)信噪比(00~99dB):45dB(后面依次為第10,16,17號(hào)衛(wèi)星的信息);
  *總和校驗(yàn)域; 
  hh 總和校驗(yàn)數(shù):78;
  (CR)(LF)回車,換行。
  注:每條語(yǔ)句最多包括四顆衛(wèi)星的信息,每顆衛(wèi)星的信息有四個(gè)數(shù)據(jù)項(xiàng),即: 
  (4)-衛(wèi)星號(hào),(5)-仰角,(6)-方位角,(7)-信噪比。


一、GPS接PC機(jī),用超級(jí)終端接收信息
圖中只是示意,天線要接到戶外,否則信號(hào)很難接收




二、2440的串口1接GPS模塊

程序如下:
//////////////////////////////////////////////////////////////////////////////////////////////
#define GLOBAL_CLK  1
/*
*********************************************************
*        頭文件
*********************************************************
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"

/*
*********************************************************
*         常量
*********************************************************
*/
/*
*********************************************************
*         變量
*********************************************************
*/
int isdigit(char  c)
{
if(c>='0' && c <='9') return 1;
else return 0;
}
int my_atoi(char * pzNum)    //把字符串str轉(zhuǎn)換成int類型
{
int nLen;
int nIndex;
int bFlag;
int nRt;
if (pzNum == NULL)
  return 0;
nLen = strlen(pzNum);
if (nLen <= 0)
  return 0;
nIndex = 0;
bFlag = TRUE;
if (!isdigit(pzNum[0]))
{
  if (pzNum[0] == '-')
   bFlag = FALSE;
  else if (pzNum[0] == '+')
   bFlag = TRUE;
  else
      return 0;  
  nIndex ++;
}
nRt = 0;
for (; nIndex < nLen; nIndex++)
{
  if (!isdigit(pzNum[nIndex]))
   break;
  nRt = nRt * 10 + (pzNum[nIndex]-'0');
}
if (!bFlag)
  nRt = -nRt;
return nRt;
}

void Main(void)
{     
    int i;
    U8 key;
U32 mpll_val = 0 ;
char Buffer[256];
char buf[20];
char *p;

    Port_Init();  //端口初始化
    Isr_Init();   //中斷初始化
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
cal_cpu_bus_clk();
   
    Uart_Init(0,0,115200);  //串口初始化 波特率為115200
    Uart_Init(0,1,9600);
    Uart_Select(0);  //選者串口0
Clk0_Disable();
Clk1_Disable();
Uart_Printf("\n======  GPS Test program start ======\n");
while(1)
{
  i=0;
  Uart_Select(1);
  Uart_GetString(Buffer);                                      //讀取一段信息
  Uart_Select(0);
  p = strtok(Buffer+1, ",");                                   //將字符串 Buffer+1  以","為界,讀取第一個(gè)單詞,
     if (strcmp(p,"$GPRMC") == 0)                                 //找到"$GPRMC"
     {
      Uart_Printf("%s\n", p);
      p = strtok(NULL, ",");                                   //得到協(xié)調(diào)世界時(shí)間
      sprintf(buf,"%c%c",p[0],p[1]);
      Uart_Printf("Current Time: %2d:",(my_atoi(buf)+8)%24);   //顯示小時(shí): 協(xié)調(diào)世界時(shí)間+8  轉(zhuǎn)換為北京時(shí)間
      Uart_Printf("%c%c:%c%c\n",p[2],p[3],p[4],p[5]);          //顯示分 秒
      
      p = strtok(NULL, ",");                                   //得到有效性
      if(*p == 'A') Uart_Printf("State: Data valid.\n");
      else Uart_Printf("State: Date no valid!!\n");
      
      p = strtok(NULL, ",");                                   //得到緯度值
      Uart_Printf("latitude(WGS-84): %s",p);
      p = strtok(NULL,",");                                    //北緯還是南緯
      Uart_Printf("%s\n",p);
      
      p = strtok(NULL, ",");                                   //得到經(jīng)度值
      Uart_Printf("longitude(WGS-84): %s",p);
      p = strtok(NULL,",");                                    //東經(jīng)還是西經(jīng)
      Uart_Printf("%s\n",p);
      
      p = strtok(NULL,",");                                    //速度
      Uart_Printf("speed: %s\n",p);
      
      p = strtok(NULL,",");                                    //方位
      Uart_Printf("Direction: %s\n",p);
      
      p = strtok(NULL,",");                                    //日期
      Uart_Printf("Date: %c%c-%c%c-%c%c\n",p[0],p[1],p[2],p[3],p[4],p[5]);
     }
}

Uart_Printf("\n====== GPS Test program end ======\n");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
運(yùn)行結(jié)果如圖:

回復(fù)

使用道具 舉報(bào)

ID:71526 發(fā)表于 2015-1-6 15:36 | 顯示全部樓層
朋友   有完整的代碼嗎?
回復(fù)

使用道具 舉報(bào)

ID:45457 發(fā)表于 2015-9-11 19:14 | 顯示全部樓層
2440裸機(jī)編程之十二 GPS
回復(fù)

使用道具 舉報(bào)

ID:83422 發(fā)表于 2015-9-15 13:12 | 顯示全部樓層
這是什么品牌開(kāi)發(fā)板
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产一区二区 | 国产一区999 | 国产成人99久久亚洲综合精品 | 国产在线观看一区二区 | 99精品久久 | 激情五月综合 | 国产精品嫩草影院精东 | 中文字幕 在线观看 | 草比网站 | 欧美video | 综合欧美亚洲 | 岛国在线免费观看 | 91精品久久久久久久久久入口 | 欧美一级电影免费 | 久久国产精品精品国产色婷婷 | 羞羞的视频在线观看 | 久久国色 | 中文字幕不卡一区 | 久久亚洲综合 | 欧美日韩中文字幕在线 | 久优草 | 中文字幕91 | 日本一区二区在线视频 | 亚洲国产高清免费 | a级片播放 | 欧洲亚洲精品久久久久 | 成人片免费看 | 特级毛片www | 水蜜桃久久夜色精品一区 | 亚洲精品视频一区 | 欧美视频 亚洲视频 | 久久久精品一区 | 红桃成人在线 | 一区二区三区四区在线 | 亚洲国产一区二区在线 | 69性欧美高清影院 | 国产午夜亚洲精品不卡 | 一区二区三区在线免费观看视频 | 欧洲精品码一区二区三区免费看 | 欧美一区视频 | 日韩中文电影 |