返回
{***************************************************************}
{***               FVision Unit Version1.0                   ***}
{***                    蓝蚂蚁工作室                         ***}
{***************************************************************}
{***                    CRC检错单元                          ***}
{***************************************************************}
Unit FCrc;
Interface

Function CRCCheck(var TXBuf;Length:Word) : Word;

Implementation
Type
  TXType=array [1..$FFFF] of Byte;

Const
  CRCTABLE : Array[0..255] of Word = (
             $00000, $0C0C1, $0C181, $00140, $0C301, $003C0, $00280, $0C241,
             $0C601, $006C0, $00780, $0C741, $00500, $0C5C1, $0C481, $00440,
             $0CC01, $00CC0, $00D80, $0CD41, $00F00, $0CFC1, $0CE81, $00E40,
             $00A00, $0CAC1, $0CB81, $00B40, $0C901, $009C0, $00880, $0C841,
             $0D801, $018C0, $01980, $0D941, $01B00, $0DBC1, $0DA81, $01A40,
             $01E00, $0DEC1, $0DF81, $01F40, $0DD01, $01DC0, $01C80, $0DC41,
             $01400, $0D4C1, $0D581, $01540, $0D701, $017C0, $01680, $0D641,
             $0D201, $012C0, $01380, $0D341, $01100, $0D1C1, $0D081, $01040,
             $0F001, $030C0, $03180, $0F141, $03300, $0F3C1, $0F281, $03240,
             $03600, $0F6C1, $0F781, $03740, $0F501, $035C0, $03480, $0F441,
             $03C00, $0FCC1, $0FD81, $03D40, $0FF01, $03FC0, $03E80, $0FE41,
             $0FA01, $03AC0, $03B80, $0FB41, $03900, $0F9C1, $0F881, $03840,
             $02800, $0E8C1, $0E981, $02940, $0EB01, $02BC0, $02A80, $0EA41,
             $0EE01, $02EC0, $02F80, $0EF41, $02D00, $0EDC1, $0EC81, $02C40,
             $0E401, $024C0, $02580, $0E541, $02700, $0E7C1, $0E681, $02640,
             $02200, $0E2C1, $0E381, $02340, $0E101, $021C0, $02080, $0E041,
             $0A001, $060C0, $06180, $0A141, $06300, $0A3C1, $0A281, $06240,
             $06600, $0A6C1, $0A781, $06740, $0A501, $065C0, $06480, $0A441,
             $06C00, $0ACC1, $0AD81, $06D40, $0AF01, $06FC0, $06E80, $0AE41,
             $0AA01, $06AC0, $06B80, $0AB41, $06900, $0A9C1, $0A881, $06840,
             $07800, $0B8C1, $0B981, $07940, $0BB01, $07BC0, $07A80, $0BA41,
             $0BE01, $07EC0, $07F80, $0BF41, $07D00, $0BDC1, $0BC81, $07C40,
             $0B401, $074C0, $07580, $0B541, $07700, $0B7C1, $0B681, $07640,
             $07200, $0B2C1, $0B381, $07340, $0B101, $071C0, $07080, $0B041,
             $05000, $090C1, $09181, $05140, $09301, $053C0, $05280, $09241,
             $09601, $056C0, $05780, $09741, $05500, $095C1, $09481, $05440,
             $09C01, $05CC0, $05D80, $09D41, $05F00, $09FC1, $09E81, $05E40,
             $05A00, $09AC1, $09B81, $05B40, $09901, $059C0, $05880, $09841,
             $08801, $048C0, $04980, $08941, $04B00, $08BC1, $08A81, $04A40,
             $04E00, $08EC1, $08F81, $04F40, $08D01, $04DC0, $04C80, $08C41,
             $04400, $084C1, $08581, $04540, $08701, $047C0, $04680, $08641,
             $08201, $042C0, $04380, $08341, $04100, $081C1, $08081, $04040);


Function CRCCheck(var TXBuf;Length:Word) : Word;
Var
  CRC : Word;
  I   : Word;
  Temp,Temp1,Temp2 : Byte;
Begin
  CRC:=0;
  for I:=1 to Length do
  Begin
    Temp:=Lo(CRC) xor TXType(TXBuf)[I];
    Temp1:=Lo(CRC);
    Temp2:=Hi(CRC);
    CRC:=Temp1*$100+Temp2;
    CRC:=CRC xor CRCTABLE[Temp];
  End ;
  CRCCheck := CRC;
End;


end.