gpsrecieve.c

来自「这些源码有的是我自已公司使用的一些实用的程序」· C语言 代码 · 共 114 行

C
114
字号
#include<reg51.h>
#include<string.h>
#define uchar unsigned char

  sbit P1_6=P1^6;
  sbit P3_4=P3^4;
  sbit GPS_POW=P1^5;
  uchar idata Data[70];   //定义定位数据缓存空间 
  bit flag;
   

 void serial() interrupt 4 using 1{
       uchar c;
     if (RI)
	    {c=SBUF;
	      RI=0;ES=0;
			if(c=='p')flag=1;	 
	     }
	   }

  	void receive_gps(void) //从GPS模块接收数据中提取所需数据
     { uchar n;
       do {
         do {
              while (RI==0);
 	            RI=0;
		        Data[0]=SBUF;
             } while (Data[0]!='$'); 
			
		   for(n=1;n<6;n++)
			    {while (RI==0);
              if(RI==1)
				    {RI=0;
				     Data[n]=SBUF;
    			    }		
			     } 	 
		   }  while (strcmp(Data,"$GPRMC")!=0);
        n=5;
        do {
		    while (RI==0);
             if (RI==1)
            { n++;
		        Data[n]=SBUF;
              RI=0;
            } 
             
          }  while (Data[n]!='\n');  
        }

struct GPS             //存储GPS接收提取出来的有用数据
   {
     uchar UTC_time[10];         //时间
     uchar latitude[9];         //纬度
     uchar longitude[10];      //经度
     uchar speed[4];          //速度
     uchar magnetic[6];      //变化方向
    }gps;

   void extract(void)            //在缓存数组Data中提出各各种定位数据.
		{ uchar i,k,l,m,n,j,SectionID;
			   j=k=l=m=n=0;
           for(i=0;i<strlen(Data);i++)  
		        { 
				    if (Data[i]=='$')
                    SectionID=0;
					 if (Data[i]==',')
					     SectionID++;
					 else   
			       switch(SectionID)
			        {
					    case 1 : {gps.UTC_time[j]=Data[i];j++;}  break;
						 case 3 : {gps.latitude[k]=Data[i];k++;}  break;
						 case 5 : {gps.longitude[l]=Data[i];l++;} break;
						 case 7 : {gps.speed[m]=Data[i];m++;}     break;
						 case 8 : {gps.magnetic[n]=Data[i];n++;}  break;
						 default :break;
					  } 
				  }
         }  

 void main(void)
 { 
  uchar i;
 
  GPS_POW=0;
  TMOD=0x20;           //定时器1,方式2;串口方式3,晶振22.1184MHZ,波特率9600
  TL1=0xfa;TH1=0xfa;
  SCON=0xd0;PCON=0x00;
  TR1=1;EA=1;ES=1;
 //while (RI==0);
      //RI=0;
		//c=SBUF;

	while(1) 
	  { ES=1;
	    if (flag)
       { 
            P1_6=0;P3_4=0;
            receive_gps();
		      extract();
            P1_6=1;P3_4=1;
         for (i=0;Data[i]!='\n';i++)	  
            { SBUF=Data[i];
	           while (TI==0);  
	            TI=0;
            }
		   for (i=0;i<70;i++)
			   Data[i]='\0'; flag=0;
       }  
     }
	}
 
			 

⌨️ 快捷键说明

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