program CRC16Example;
type
TByteArr = array of Byte;
function CalCRC16(AData: TByteArr; AStart, AEnd: Integer): Word;
const
GENP = $A001;
var
crc: Word;
i: Integer;
tmp: Byte;
procedure CalOneByte(AByte: Byte);
var
j: Integer;
begin
crc := crc xor AByte;
for j := 0 to 7 do
begin
tmp := crc and 1;
crc := crc shr 1;
crc := crc and $7FFF;
if tmp = 1 then
crc := crc xor GENP;
crc := crc and $FFFF;
end;
end;
begin
crc := $FFFF;
for i := AStart to AEnd do
CalOneByte(AData[i]);
end;
begin
return crc;
end;
var
data: TByteArr = [FE,11,18,01,00,03,05,01,01];
begin
Writeln(CalCRC16(data, 0, High(data)));
end.