資源簡介
單片機51讀取GPS NMEA0183格式及解析;uart.h ,uart.c串口中斷程序;gps.c,gps.h 讀取GPS NMEA數據及解析位置,時間,和衛星狀態。主要包括了GGA和RMC數據讀取及解析;時區調整。采用的是upsd3300單片機(51系列);

代碼片段和文件信息
/*************************************************/
//項??目:水利數碼通
//文件名:UART.C
//功??能:?串口0、1數據收發處理,軟件串口處理
//作??者:楊世峰
//日??期:2004-03-13
/*************************************************/
#include?“upsd3300.h“
#include?“hardware.h“
#include?“gps.h“
#include?“uart.h“
#include?“string.h“
#include?“const.h“
//////////////////////////////////
//====================變量定義=====================
extern uchar idata ucGpsCommandStatus;//GPS信息處理狀態機
extern uchar xdata ucGPSCommand[8];//GPS命令標識頭
extern uchar xdata ucGPSDataBuff[82];//GPS數據緩存
extern uchar xdata ucCheckSum[2];//GPS命令校驗字節
extern uchar?idata ucGPSBuffCnt;
//每月最大天數表
extern uchar?xdata?GPS_Date[];
extern uint idata unInBufCntComm1; //緩沖區計數
extern union? ByteToFloatOrLong? xdata? ByteChang;
///////////////////////////////////
extern INFO_GPS xdata?InfoGPS;
extern INFO_GPS xdata?NowInfoGPS;//實時gps?信息
extern? INFO_STAR xdata?ucSNR[12];
////////////////////////////////////
//=================================================
//GPS數據處理主循環
//=================================================
void??GPS_ProcessNMEA(void)
{
uchar?idata?uch0;
while(unInBufCntComm1)
{
switch?(ucGpsCommandStatus)
{
case?0:
?????????{
ReadCharComm1(&uch0);
if?(uch0==‘$‘)
{
ucGpsCommandStatus++;
}
break;
}
?????????case?1:
{
ReadCharComm1(&uch0);
if?(uch0==‘G‘)
ucGpsCommandStatus++;
else
ucGpsCommandStatus=0;
break;
}
case?2:
{
ReadCharComm1(&uch0);
if?(uch0==‘P‘)
ucGpsCommandStatus++;
else
ucGpsCommandStatus=0;
break;
}
case?3:
{
if(unInBufCntComm1?>=?3)
{
ReadCharComm1(&ucGPSCommand[0]);
ReadCharComm1(&ucGPSCommand[1]);
ReadCharComm1(&ucGPSCommand[2]);
ucGPSCommand[3]?=?‘\0‘;
ucGPSDataBuff[0]?=?‘G‘;
ucGPSDataBuff[1]?=?‘P‘;
strcpy(ucGPSDataBuff+2ucGPSCommand);
ucGPSBuffCnt?=?5;
ucGpsCommandStatus++;
}
break;
}
??????? case?4:?//process?command
{
if(unInBufCntComm1?2)?
break;
else
{
if(ucGPSBuffCnt>80)
{
ucGpsCommandStatus?=?0;
break;
}
ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt);
ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt+1);
if((ucGPSDataBuff[ucGPSBuffCnt]?==‘\r‘)\
&&(ucGPSDataBuff[ucGPSBuffCnt+1]?==‘\n‘))
{
ucCheckSum[0]?=ucGPSDataBuff[ucGPSBuffCnt-2]?-?0x30;
ucCheckSum[1]?=ucGPSDataBuff[ucGPSBuffCnt-1]?-?0x30;;
if(GPS_CheckCommand())
{
ProcessGPSCommand();
}
ucGpsCommandStatus=0;
break;
}
else
{
if(ucGPSDataBuff[ucGPSBuffCnt+1]?==‘\r‘)
ucGpsCommandStatus++;
}
ucGPSBuffCnt+=2;
}
break;
???????? }//end?of?case?4
case?5:
{
if(ucGPSBuffCnt>81)
{
ucGpsCommandStatus?=?0;
break;
}
ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11665??2008-07-08?14:44??gpsnmea\gps.c
?????文件???????1711??2006-04-29?05:22??gpsnmea\gps.h
?????文件???????6301??2008-07-08?14:43??gpsnmea\uart.c
?????文件???????1068??2006-04-27?16:50??gpsnmea\uart.h
?????文件????????211??2008-07-08?15:16??gpsnmea\說明.txt
?????目錄??????????0??2008-07-08?15:12??gpsnmea
-----------?---------??----------?-----??----
????????????????20956????????????????????6
評論
共有 條評論