CRC-8 berechnen

#65483
Wenn es um die CRC des 1-Wire geht, hier ist was in C:

uchar crc8 (uchar crc, uchar n)
{
  n ^= crc;
  crc = 0;
  if( n & 0x01 ) crc  = 0x5E;
  if( n & 0x02 ) crc ^= 0xBC;
  if( n & 0x04 ) crc ^= 0x61;
  if( n & 0x08 ) crc ^= 0xC2;
  if( n & 0x10 ) crc ^= 0x9D;
  if( n & 0x20 ) crc ^= 0x23;
  if( n & 0x40 ) crc ^= 0x46;
  if( n & 0x80 ) crc ^= 0x8C;
  return crc;
}



Peter
Gast #65484
Hi,

ne ich hab ne Funkübertragung die etwa 8Bytes Datenüberträgt und möchte
dabei CRC8 nutzen um übertragunsfehler zu erkenne.
Bei C Beispielen kommt dazu dass ich zwar Pascal und Basic kann aber
leider C/ASM überhaupt nicht verstehe.

MfG Lars
Gast #65485
Hallo,
habe da mal was in Delphi geschieben.
Hier ein Ausschnitt, was du evt. gebrauchen kanst.
Gruß


function crc(h1:longint;var h2:longint):longint;
//Prüfbitkontrolle Colortronic
const poly=33800;
var i:integer;
begin
for i:=1 to 8 do begin
                 if ((h2 and 1) <>(h1  and 1)) then h2:=(h2 shr 1) xor
poly
                                               else h2:=(h2 shr 1) ;
                 h1:=h1 shr 1;
                 end;
crc:=h2;
end;

procedure erstelle_bbc_crc(suebergabe:string;var crc_L,crc_H:integer);
//Erstellen des Prüfbit für Colortronic
var         schleife:integer;
       laenge_string:integer;
           crc_value:longint;
begin
laenge_string:=length(suebergabe);
crc_value:=0;
for schleife:=1 to laenge_string do
            if ord(suebergabe[schleife])<>144
                 then crc(ord(suebergabe[schleife]),crc_value);

crc_h:=crc_value div 256;
crc_L:=trunc(((crc_value/256)-crc_h)*256);
end;
Gast #65486
http://www.mikrocontroller.net/forum/read-1-7592.html
nur der Link lautet jetzt:
http://www.sensirion.com/en/download/humiditysensor/SHT1x_SHT7x.htm
http://www.sensirion.com/en/pdf/CRC_Calculation_SHTxx_v1.03.pdf

Im Anhang noch 2 Programme, eines bitweise und das andere wie oben
beschrieben mit einer Lookup-Table.

Lies auch die AppliNote27 app27 von Dallas-Maxim.

Bitte antworte, ob Dir das was bringt.

Direx
Gast #65487
Hi,

ich denke schon dass es mir hilft, muss es nachher mal in Ruhe
durchschauen, vor allem das Bitweise wird für mich Interessant sein, da
das ganze auf einem at90s2313 realisiert werden soll und der
Arbeitsspeicher für eine Lookup-Table nicht ausreicht.

MfG Lars

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.