Вверх ↑
Ответов: 8336
Рейтинг: 775
#1: 2019-02-12 12:31:33 ЛС | профиль | цитата
RT9U, а-а, вот оно что Ну тогда, полагаю, надо не отдельные байты проверять, но какие-то более крупные блоки, строку, например, или по 255 байт + 256-ой контрольный. Есть IC для подсчёта CRC-8 строк от Galkov-а, прилагаю, вдруг пригодится (делал обмен данными с температурными датчиками).
CRC-8


Add(InlineCode,7214762,420,273)
{
@Hint=#16:Вычисление CRC-8|
WorkPoints=#5:doCRC|
EventPoints=#5:onCRC|
DataPoints=#7:DataStr|3:Pol|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|4: |9: public|25: _data_Data:THI_Event;|18: Pol:THI_Event;|22: DataStr:THI_Event;|20: onCRC:THI_Event;|0:|49: procedure doCRC(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.doCRC;|23:var _Str:string; // Код|29: i,j,_Pol,CRC,_Len: dword;|5:begin|36: _Str := ReadString(_Data,DataStr);|23: _Len := Length(_Str);|62://-------Author Galkov-------------------------------------- |39: _Pol := ReadInteger(_Data,Pol) shl 8;|12: CRC := 0;|31: for i := 1 to _Len+1 do begin|31: CRC := CRC + byte(_Str[i]);|28: for j := 1 to 8 do begin|23: CRC := CRC shl 1;|55: if (CRC and $10000) > 0 then CRC := CRC xor _Pol;|8: end;|6: end;|32: _hi_onEvent(onCRC, CRC shr 8);|4:end;|0:|4:end.|
link(Pol,9182407:Value,[])
}
Add(Memory,9182407,427,224)
{
Default=Integer(305)
}

карма: 14

0