ist zwar nicht bascom, aber vielleicht hilft dir das was

Code:
Process ReadGPS(20,20:iData);
  Begin
    WaitPipe(RXBuffer);                         // Warte auf Daten im Puffer
    Read(SerInp, Temp);                         // Puffer lesen

    If Temp='$'                                 // Wenn Puffer='$' (Datensatzanfang)
      then
        Read(SerInp, Temp6);
        If Temp6 = 'GPRMC,'
          then
            Read(SerInp, NMEA.Time_UTC, ',');   // GSP Time in UTC
            Read(SerInp, NMEA.Status, ',');     // A=data valid or V=data not valid
            Read(SerInp, NMEA.Latitude, ',');   // ddmm.mmmm
            Read(SerInp, NMEA.Lat_Ind, ',');    // N=north or S=south
            Read(SerInp, NMEA.Longitude, ',');  // dddmm.mmmm
            Read(SerInp, NMEA.Log_Ind, ',');    // E=east or W=west
            Read(SerInp, NMEA.Speed, ',');      // variable speed in knots
            Read(SerInp, NMEA.Angle, ',');      // variable lenght in degrees
            Read(SerInp, NMEA.Date, ',');       // GPS Date ddmmyy
            //Read(SerInp, NMEA.Magnetic, ',');   // Magnetic declinason
            //Read(SerInp, NMEA.Checksum, ',');
          EndIf;

        If Temp6 = 'GPGGA,'
          then
            Read(SerInp, NMEA.Time_UTC, ',');   // GSP Time in UTC hhmmss.sss
            Read(SerInp, NMEA.Latitude, ',');   // ddmm.mmmm
            Read(SerInp, NMEA.Lat_Ind, ',');    // N=north or S=south
            Read(SerInp, NMEA.Longitude, ',');  // dddmm.mmmm
            Read(SerInp, NMEA.Log_Ind, ',');    // E=east or W=west
            Read(SerInp, NMEA.Status, ',');     // 0=Invalid, 1=Valid SPS, 2=Valid DGPS, 3=Valid PPS
            Read(SerInp, NMEA.Sat_Track, ',');  // Number of sat in view and used in solution
            Read(SerInp, NMEA.H_Dilution, ','); // dilution error
            Read(SerInp, NMEA.Height, ',');     // height over see
            //Read(SerInp, NMEA.Height_Unit, ',');
            //Read(SerInp, NMEA.DGPS_Time, ',');
            //Read(SerInp, NMEA.DGPS_ID, ',');
            //Read(SerInp, NMEA.Checksum, ',');
          EndIf;
      EndIf;
  End ReadGPS;

die variablen sind so deklariert:
Code:
Temp                 : String[1];
Temp6                : String[6];
NMEA                 : Record
         Message_ID    : String[6];  // RMC protocol header
         Time_UTC      : String[9];  // hhmmss.sss
         Status        : String[1];  // A=data valid or V=data not valid
         Latitude      : String[9];  // ddmm.mmmm
         Lat_Ind       : String[1];  // N=north or S=south
         Longitude     : String[10]; // dddmm.mmmm
         Log_Ind       : String[1];  // E=east or W=west
         Speed         : String[6];  // variable lenght in knots
         Angle         : String[6];  // variable lenght in degrees
         Date          : String[6];  // ddmmyy
         Magnetic      : String[5];  // trash this one ..... not suported on SiRF GPS
         Sat_Track     : String[2];  // Number of sat in view and used in solution
         H_Dilution    : String[6];  // dilution error
         Height        : String[7];  // height over see
         //Height_Unit   : String[1];  // height-unit
         //DGPS_time     : String[6];  // trash this one
         //DGPS_ID       : String[6];  // trash this one
         //Checksum      : String[2];  // *10
         End;
die RS232 hat einen eingangspuffer von 128 Byte. das prog läuft auf einem mega32 @ 16MHz