• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: GPS  NMEA  

资源简介

单片机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


评论

共有 条评论