⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.c

📁 gps接收处理c程序 单片机处理程序 本人正在做gps处理
💻 C
字号:
/////////////////////////
unsigned char GetGps();
void GpsDO();
///**********************************
unsigned char GetGps()  {
  unsigned char j,i,data;
  for(j=0;j<4;j++) {
    asm("nop");}

    for(i=0;i<8;i++) 
   {
    for(j=0;j<15;j++);	// delay 104uS  10
    data>>=1;
    if(GPTXD==1)  data=data|0x80;
	 else data=data&0x7F; 
	 }
    GpsCT++; 	
  for(j=0;j<15;j++);
  return data; 
   }
/////////////////////////////
void GetIn()  {
    unsigned char i,t,k;
  if(FIO<90) {
  	k=GetGps();
  	FIO++;
  	}
  else {
	if(FIO<158)  {
	  RCBuf[FIO-90]=GetGps(); 
	  FIO++;
	  }
	else  {
    i=GetGps(); t=FIO-158;
	  RCBufEx[t]=i;
    FIO++;
     }
    } 
  }
/////////////////////
unsigned char GpsOut()  {
  if(FIO<90)
        return 0;
  else {
    if(FIO<158)
        return RCBuf[FIO-90];
    else 
        return RCBufEx[FIO-158];
  }}
  ////////////
void GpRMC()  {
  unsigned char i,p,t;
  if(GpsOut()=='$') {
  FIO+=4;
  if(GpsOut()=='M') {
  FIO++;
  if(GpsOut()=='C') {
  SENDBIT=0;
  INSENDBIT=1;
  p=FIO;
  FIO+=8;
  t=0;
  while(1) {
  FIO++;
  if(GpsOut()==',') break;
  if(FIO>180)  return;
  }
  FIO++;
  switch(GpsOut()) {
    case 'A':
    	GPSOKBIT=1;
    	GpsOkCt=0;
    	break;
    case 'V':
    	GPSOKBIT=0;
    	GpsOkCt=0;
    	for(i=0;i<9;i++) 
           GprsLat[i]='0';
        for(i=0;i<10;i++)
           GprsLong[i]='0';
    	break;
    default:
    	 return;
      }
   FIO=p+2; 
   GprsTime[0]=GpsOut();FIO++;
   GprsTime[1]=GpsOut();FIO++;
   GprsTime[3]=GpsOut();FIO++;
   GprsTime[4]=GpsOut();FIO++;
   GprsTime[6]=GpsOut();FIO++;
   GprsTime[7]=GpsOut();FIO++;
   t=0;
   FIO+=24;
   while(1) {
       FIO++;
        if(GpsOut()==','){
          t++;
          if(t==4) {
          break;	    	
   	 }
  	}
  	if(FIO>180)  return;
       }
      FIO++; 
      GprsDate[0]=GpsOut();FIO++;
      GprsDate[1]=GpsOut();FIO++; 
      GprsDate[3]=GpsOut();FIO++; 
      GprsDate[4]=GpsOut();FIO++;
      GprsDate[8]=GpsOut();FIO++;
      GprsDate[9]=GpsOut();FIO++;
      if(GPSOKBIT!=1)
          return;
      FIO=p;
      while(1) {
       FIO++;
       if((GpsOut()=='S')||(GpsOut()=='N'))  {
       	   GprsLat[10]==GpsOut();break;}
       if(FIO>180)  return;
  		}
      FIO=FIO-10;
      for(i=0;i<9;i++) {
      GprsLat[i]=GpsOut();
      FIO++;
      }
      FIO=p;
      while(1) {
       FIO++;
       if((GpsOut()=='E')||(GpsOut()=='W')) {
          GprsLong[11]==GpsOut();break;}
       if(FIO>180)  return;
  		}
  		FIO=FIO-11;
      for(i=0;i<10;i++) {
      GprsLong[i]=GpsOut();
      FIO++;
      }
   }
  }
 }
}
///////////////////////////
void GpsDO()  {
  unsigned int i;
  for(i=0;i<225;i++)  {
  FIO=i;
  GpRMC();
  }
 }
/////////////////////////////
void ReadGps() {
  unsigned int i,j,t;
  FIO=0;t=0;
  while(1)  {
  j=0;
  while(GPTXD==0){
  j++;
  if(j>1940)  {
  	SENDBIT=0;
        INSENDBIT=1;
        return;}
  }
  for(j=0;j<325;j++) {
   if(GPTXD==0) {
     GPSBIT=0;
     break;}
     GPSBIT=1;}
  if(GPSBIT==1)   break;
  }
  
  GPSBIT=0;FIO=0;GpsCT=0;
  while(1)  {
    i=0;
    for(j=0;j<13000;j++) {
    if(j>12000) {
      j=0;i++;
      if(i>=149) {
        SENDBIT=0;
        INSENDBIT=1;      
        return;
       }
    }
       if(GPTXD==0)
	  break; }
    GetIn();
    if(GpsCT>195) {
      GpsDO();
      return; 
      }
    }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -