⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc16.pas

📁 台达PLC通信用
💻 PAS
字号:
unit crc16;

interface

function LRC(auchMsg:PByte;usDataLen:Word):byte;
function CRC16_1(puchMsg:PByte;usDataLen:Word):byte;

implementation

const

auchCRCHi : array [0..255] of byte =
  ( $00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,

$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,

$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0,

$80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40,

$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1,

$81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41,

$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1,

$81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41,

$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,

$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,

$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1,

$81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40, 

$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, 

$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40, 

$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, 

$80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40, 

$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0, 

$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, 

$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0, 

$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41, 

$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0, 

$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,

$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1, 

$81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41, 

$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,

$80, $41, $00, $C1, $81, $40 );

auchCRCLo:array[0..255]of byte=
(
$00, $C0, $C1, $01, $C3, $03, $02, $C2, $C6, $06,

$07, $C7, $05, $C5, $C4, $04, $CC, $0C, $0D, $CD,

$0F, $CF, $CE, $0E, $0A, $CA, $CB, $0B, $C9, $09,

$08, $C8, $D8, $18, $19, $D9, $1B, $DB, $DA, $1A,

$1E, $DE, $DF, $1F, $DD, $1D, $1C, $DC, $14, $D4,

$D5, $15, $D7, $17, $16, $D6, $D2, $12, $13, $D3,

$11, $D1, $D0, $10, $F0, $30, $31, $F1, $33, $F3,

$F2, $32, $36, $F6, $F7, $37, $F5, $35, $34, $F4,

$3C, $FC, $FD, $3D, $FF, $3F, $3E, $FE, $FA, $3A,

$3B, $FB, $39, $F9, $F8, $38, $28, $E8, $E9, $29,

$EB, $2B, $2A, $EA, $EE, $2E, $2F, $EF, $2D, $ED,

$EC, $2C, $E4, $24, $25, $E5, $27, $E7, $E6, $26,

$22, $E2, $E3, $23, $E1, $21, $20, $E0, $A0, $60,

$61, $A1, $63, $A3, $A2, $62, $66, $A6, $A7, $67,

$A5, $65, $64, $A4, $6C, $AC, $AD, $6D, $AF, $6F,

$6E, $AE, $AA, $6A, $6B, $AB, $69, $A9, $A8, $68,

$78, $B8, $B9, $79, $BB, $7B, $7A, $BA, $BE, $7E,

$7F, $BF, $7D, $BD, $BC, $7C, $B4, $74, $75, $B5,

$77, $B7, $B6, $76, $72, $B2, $B3, $73, $B1, $71,

$70, $B0, $50, $90, $91, $51, $93, $53, $52, $92,

$96, $56, $57, $97, $55, $95, $94, $54, $9C, $5C,

$5D, $9D, $5F, $9F, $9E, $5E, $5A, $9A, $9B, $5B,

$99, $59, $58, $98, $88, $48, $49, $89, $4B, $8B,

$8A, $4A, $4E, $8E, $8F, $4F, $8D, $4D, $4C, $8C,

$44, $84, $85, $45, $87, $47, $46, $86, $82, $42,

$43, $83, $41, $81, $80, $40 );

function LRC(auchMsg:PByte;usDataLen:Word):byte;
var
  uchLRC:byte;
begin
  uchLRC:=0;
  while usDataLen>0 do
    begin
      inc(uchLRC,auchMsg^);
      inc(auchMsg);
      dec(usDataLen);
    end;
  Result:=-uchLRC;  //可能有点问题,你的没有写清楚
end;

function CRC16_1(puchMsg:PByte;usDataLen:Word):byte;
var
  uchCRCHi:byte;
  uchCRCLo:byte;
  uIndex:Word;
begin   
  uchCRCHi:=$FF;
  uchCRCLo:=$FF; 
  while usDataLen>0 do
    begin
      uIndex:=uchCRCHi xor puchMsg^;
      uchCRCHi:=uchCRCLo xor auchCRCHi[uIndex];
      inc(puchMsg);
      uchCRCLo:=auchCRCLo[uIndex];
      dec(usDataLen); 
    end; 
  Result:= uchCRCHi shl 8 or uchCRCLo; 
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -