Ich hab den Code irgendwo im Internet gefunden und angepasst. Es wird einmal auf ein "$" gewartet, erst wenn das empfangen wird, wird der Header und dann die einzelnen Daten ausgelesen. Dabei wird im Getgps immer bis zu einem bestimmten Symbol ein String zusammengebaut, zB sind die meisten Daten zwischen "," zu finden. Teilweise Suche ich mir auch nur die Vor- oder Nachkommastellen raus weil ich den Rest nicht brauche.


Hier ein Auszug aus meinem Programm:
( GPS() muss regelmäßig, bzw wenn etwas im USART Buffer ist, aufgerufen werden)

Code:
/************************* 
#define maxline	40

char line[maxline]; // global


GPS++++++++++++++++++++++++++++++++++++++*/	
static inline void GPS()
{
char x_gps;

x_gps=0;
		
	x_gps=USART_Receive(); 
		if (x_gps=='$')
		{
  			Getgps(','); //Hole den Header
		  	if(strcmp(line,"GPGGA")==0) Gps_gga();
			if(strcmp(line,"GPZDA")==0) Gps_zda();
		}
	
}

/***************Position/Wert vom GPS***********************/
unsigned char Getgps(unsigned char end)
{
unsigned char c,i;
char komma, stern;

komma = ',';
stern = '*';

 	line[0]=0; 
 	i=0;
	c=0;

 do
  {
 	  c=USART_Receive(); 
 	  if(c==stern) return 0; //Checksumme erreicht
 	  if(c==komma) return i; //Ende eines Wertes erreicht
	
 	  if(c!=end) //Buchstaben sammeln
 	   {
  	   line[i]=(char)c;
  	   i++;if (i>=maxline-1) {line[0]=0;}
   	   line[i]=0; //End of String updaten
	   }

  }while(c!=end);

 return i;

}


void Gps_gga()  //$GPGGA Meldung -----------------------------------------
{
char num, hdop,empfang;
char komma,stn, min;
short x,y;
char buffer[10];
short temp;

komma = ',';
x=0;y=0;



	satcount=0; //Anzahl benutzter Satelliten
	num=0;
	

	// Uhrzeit
 	Getgps('.'); strcpy(zeit,line); zeit[4]=0;// Sekunden raus
	Getgps(komma); //Rest
	//Breitengrad
 	Getgps('.'); // Grad und Minuten werden nicht gebraucht
	num=Getgps(komma); //Nachkommastellen 
	if(num!=0) {line[4]=0;y=atoi(line);} // nur die ersten 4 Stellen
 	Getgps(komma); // N/S ignorieren
	//Längengrad
 	Getgps('.'); // Grad und Minuten werden nicht gebraucht
	num=Getgps(komma); //Nachkommastellen 
	if(num!=0) {line[4]=0;x=atoi(line);}
 	Getgps(komma); // O/W ignorieren

//	//0=kein Empfang, 1=GPS, 2=DGPS
   num=Getgps(komma);
 //Anzahl benutzter Satelliten
   num=Getgps(komma);
   if(num!=0) { satcount=(unsigned char)atoi(line);}

	//HDOP  Horizontal Dilution of Position
 //	Getgps(',');
 	hdop=9;
	Getgps('.');
	hdop=(char)atoi(line);

	


}
LG!