Erzeugung und Auswertung von Pruefsummen bei NMEA-Strings
Erzeugung :

Alle Zeichen zwischen dem Startzeichen "$" und dem "*" werden exclusiv oderiert (XOR). Das Ergebnis wird hinter dem "*" als ASCII-HEX-Wert angehaengt. ( Die erste XOR-Prozedur erfolgt mit dem Ausgangswert: 00h )

Pruefung :

Hierbei laeuft zwischen den Zeichen "$" und "*" im Prinzip das gleiche Verfahren ab. Anschliessend wird die laufende Pruefsumme vor dem "*" mit dem ASCII-HEX-Wert hinter dem "*" noch einmal XORed.
Bei korrekter Uebertragung muss das Ergebnis 00h sein.


Hier noch ein einfaches Basic-Programm zur Demonstration der CRC-Berechnung von NMEA-Strings.
Dabei wird die Pruefsumme des Originalstrings "t$" ( Wert hier : 2D ) entfernt, der Stringinhalt der Zeichen nach dem "$" bis vor dem "*" exclusiv oderiert ( XOR ) und das Ergebnis wieder angehaengt.
Wenn alles stimmt, so ist die Pruefsumme des Ergebnisstrings identisch mit dem Ausgangswert.


CLS
PRINT "ORIGINALSTRING"
PRINT "--------------"
t$ = "$GPRMC,051544.00,A,5434.730,N,00553.140,W,,,030497,,*2D"
PRINT t$
PRINT
t$ = MID$(t$, 1, LEN(t$) - 2)         'entfernt Originalpruefsumme
chk% = 0
FOR i% = 2 TO LEN(t$) - 1           'kalkuliert Pruefsumme nach $ und vor *
chk% = chk% XOR ASC(MID$(t$, i%, 1))
NEXT i%
chksum$ = HEX$(chk%)
t$ = t$ + chksum$                            'addiert neue Pruefsumme
PRINT:PRINT
PRINT "STRING MIT NEU-KALKULIERTER PRUEFSUMME"
PRINT "-------------------------------------"
PRINT t$