Mam problem z kontrolą transmisji złożonej na układach radiowych i połączeniu z PC.
Transmisja nadajnik->odbiornik wysyła paczki danych zakończonych crc8 (Bascom'owe CRC8). Dane przekazywane są potem do PC z taką samą paczką zakończoną crc8 (również Bascomowe CRC8).
Po stronie PC odbieram dane ale mam problem z zaimplementowaniem w Delphi fumkcji crc8 z Bascoma.
Podany w helpie przykład:
przepisany do Delphi:
Zwraca mi inne wartości crc, przez co prosta kontrola transmisji mi pada.
Czy ktoś może podpowiedzieć, dlaczego obie funkcje liczą inne crc??
I jak w Delphi obliczyć crc 7 bajtów by wynik był taki jak funkcji Bascomowej?
Transmisja nadajnik->odbiornik wysyła paczki danych zakończonych crc8 (Bascom'owe CRC8). Dane przekazywane są potem do PC z taką samą paczką zakończoną crc8 (również Bascomowe CRC8).
Po stronie PC odbieram dane ale mam problem z zaimplementowaniem w Delphi fumkcji crc8 z Bascoma.
Podany w helpie przykład:
Function Docrc8(ar() As Byte, bts As Byte) As Byte
Dim J As Byte
Dim k As Byte
Dim crc8 As Byte
crc8 = 0
For m = 1 To bts
x = ar(m)
For k = 0 To 7
J = 1 And (x Xor crc8)
crc8 = Fix(crc8 / 2) And &HFF
x = Fix(x / 2) And &HFF
If J <> 0 Then
crc8 = crc8 Xor &H8C
End If
Next k
Next
Docrc8 = crc8
End Function
przepisany do Delphi:
Function TForm1.docrc8(ar:array of byte; bts:Byte):Byte;
var
J,k,crc8,m,x: Byte;
begin
crc8 := 0;
For m:=0 To bts-1 do
begin
x:= ar[m];
For k:=0 To 7 do
begin
J:=1 And (x Xor crc8);
crc8:= round(crc8 / 2) And 255;
x:= round(x / 2) And 255;
If J <> 0 Then
begin
crc8:= crc8 Xor 140;
End;
end;
end;
Docrc8:= crc8
End;
Zwraca mi inne wartości crc, przez co prosta kontrola transmisji mi pada.
Czy ktoś może podpowiedzieć, dlaczego obie funkcje liczą inne crc??
I jak w Delphi obliczyć crc 7 bajtów by wynik był taki jak funkcji Bascomowej?