Например TDA7294

Форум РадиоКот :: Просмотр темы - проблема вычисления crc8 под delphi
Форум РадиоКот
https://radiokot.ru/forum/

проблема вычисления crc8 под delphi
https://radiokot.ru/forum/viewtopic.php?f=24&t=38160
Страница 1 из 1

Автор:  mikbur [ Вт ноя 23, 2010 04:21:51 ]
Заголовок сообщения:  проблема вычисления crc8 под delphi

Здравствуйте, уважаемые.
возникла необходимость управления железом (С2000 фирмы БОЛИД). Ситуация следущая: с СОМ порта идут посылки вида :

7F 06 01 0D 00 00 BF
7F 06 01 53 00 00 30
02 06 01 01 00 00 D6
03 06 01 01 00 00 E1
04 06 01 01 00 00 64
05 06 01 01 00 00 53
....
где BF для первого случая и 30 для второго... являются CRC-8

перерыл весь инет не один из предложенных вариантов под delpi для вычисления crc не подходят.
Подскажите, люди добрые как посчитать crc :(

отталкивался от такого варианта :http://www.programmersforum.ru/showthread.php?t=110937

Код:
function GetCRC(S:String):String;
var i, j:integer;
    c:byte;
begin
   c := 0;
   for i := 1 to length(S) do begin
      c := c xor ord(S[i]);
      for j := 0 to 7 do begin
         if c and $80 = $80
         then c := (c shl 1) xor 1
         else c := (c shl 1);
      end;
   end;
   result := IntToHex(c, 4);
end;

edit1.text:=(GetCRC(chr($7F)+chr($06)+chr($01)+chr($0D)+chr($00)+chr($00)); 


в итоге получаю 7C вместо BF

Автор:  Liv [ Вт ноя 23, 2010 12:56:40 ]
Заголовок сообщения:  Re: проблема вычисления crc8 под delphi

Вот этот код считает CRC правильно:

Код:
CRC: byte;

procedure DowCRC(b:Byte);
var i:Integer;
begin
 for i:=1 to 8 do
  begin
   if Odd(b xor CRC)
    then CRC:=((CRC xor $18) shr 1) or $80
    else CRC:=CRC shr 1;
   b:=b shr 1;
  end;
end;


Еще высылаю утилиту расчета CRC, только вводить строку нужно справа налево: 00000D01067F -> BF

Вложения:
DS1990A.zip [155.67 KiB]
Скачиваний: 530

Автор:  mikbur [ Вт ноя 23, 2010 18:38:48 ]
Заголовок сообщения:  Re: проблема вычисления crc8 под delphi

опять тупик не могу разобрвться куда вставлять в код свои значения для вычисления

Автор:  Liv [ Вт ноя 23, 2010 21:37:32 ]
Заголовок сообщения:  Re: проблема вычисления crc8 под delphi

Как куда? Обнуляете переменную CRC, затем для каждого байта данных вызываете DowCRC():

СRC := 0;
DowCRC($7F);
DowCRC($06);
DowCRC($01);
DowCRC($0D);
DowCRC($00);
DowCRC($00);

Получаете CRC = $BF

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/