This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Filtering $GPRMC string

Hi everybody
please check this code.

/*------------------------------------------------------------------------------
Serial.c
------------------------------------------------------------------------------*/
#include <reg52.H>                /* special function register declarations  */
#include <stdio.H>               /* for the intended 8051 derivative        */

unsigned char uc,RMC_Pos,GPSReceiveCtr,GPSData,Ctr;
unsigned char  GPSArray[110];
unsigned TIr = 1;
void main(void)
{
RMC_Pos=0;
SCON  = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1   = 0xFA; /* TH1: reload value for 4800 baud @ 11.0592 MHz */
TR1   = 1; /* TR1: timer 1 run */
ES    =1;  /* Serial interrupt Enable*/
EA    =1;  /* global interrupt enable*/

while(1)
{
if(RMC_Pos==7)
{
  for(Ctr=0;Ctr<GPSReceiveCtr;Ctr++)
  {
  while (!TIr);
  TIr = 0;
  SBUF=GPSArray[Ctr];
  }
}
RMC_Pos=0;
}
}
void serial (void) interrupt 4
{
if(RI)
{
      RI=0;
      GPSData = SBUF;
      if(RMC_Pos!=7)
      {
          if( GPSData== '$' && (RMC_Pos == 0) )
          RMC_Pos=1;
          else if( GPSData == 'G' && (RMC_Pos == 1) )
          RMC_Pos=2;
          else if( GPSData == 'P' && (RMC_Pos == 2) )
          RMC_Pos=3;
          else if( GPSData == 'R' && (RMC_Pos == 3) )
          RMC_Pos=4;
          else if( GPSData == 'M' && (RMC_Pos == 4) )
          RMC_Pos=5;
          else if( GPSData == 'C' && (RMC_Pos == 5) )
          {
            RMC_Pos=6;
            GPSReceiveCtr=0;
          }
          else if( GPSData != '*' && (RMC_Pos == 6) )
          GPSArray[GPSReceiveCtr++]=GPSData;
          else if( GPSData == '*' && (RMC_Pos == 6) )
          RMC_Pos=7;
          else
          RMC_Pos=0;
          if(GPSReceiveCtr > 100) GPSReceiveCtr=100;
        }
    }
if (TI)
{
  TI = 0;
  TIr = 1;
  }

}