K keven Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-15 #1 我在编写一个485的通讯程序,需在单片机上实现CRC-CCITT16检验(X^16+X^12+X^5+1), 查过一些有关资料(先查一个512个字节的表,再做异或运算),但校验出错,请各位高手 指点。
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-15 #2 PASCAL码:(我是8005,你照你的种子改就行) function CRC(var Data: array of byte; ds, dNumber: integer): word; var uCRC: word; d0, d1: byte; i: integer; begin uCRC := 0; d0 := 0; for i := ds to dNumber - 1 do begin d1 := d0; d0 := Data; if uCRC and $8000 = 0 then uCRC := uCRC shl 1 else uCRC := uCRC and $7fff shl 1 xor $8005; uCRC := uCRC xor (d1 shl 8 + d0); end; CRC := uCRC; end;
PASCAL码:(我是8005,你照你的种子改就行) function CRC(var Data: array of byte; ds, dNumber: integer): word; var uCRC: word; d0, d1: byte; i: integer; begin uCRC := 0; d0 := 0; for i := ds to dNumber - 1 do begin d1 := d0; d0 := Data; if uCRC and $8000 = 0 then uCRC := uCRC shl 1 else uCRC := uCRC and $7fff shl 1 xor $8005; uCRC := uCRC xor (d1 shl 8 + d0); end; CRC := uCRC; end;
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-15 #4 别开玩笑了,那段PASCAL码你硬是翻不过来? 51的程序我这里也有,不过你要是自己先做一做吧。
K keven Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-15 #5 我用C做了没问题,但是翻成51还是不行。种子是3字节(X^16+X^12+X^5+1)。