以上程序在Win98,VB6下调试通过。
unsigned char CRC16Lo,CRC16Hi;
unsigned char CL,CH ;
unsigned char SaveHi, SaveLo;
int Flag;
int i;
CRC16Lo=0xFF;;
CRC16Hi=0xFF;
CL=0x01;
CH=0xA0;
for (i=0 ; i CRC16Lo = CRC16Lo ^ sbuf[i]; //'每一个数据与CRC寄存器进行异或 for (Flag = 0; Flag<8; Flag++) { SaveHi = CRC16Hi; SaveLo = CRC16Lo ; CRC16Hi = CRC16Hi >> 1 ; //'高位右移一位 CRC16Lo = CRC16Lo >> 1 ; //'低位右移一位 if ((SaveHi & 0x01) == 0x01) //'如果高位字节最后一位为1 { CRC16Lo = CRC16Lo | 0x80 ; //'则低位字节右移后前面补1 } //'否则自动补0 if ((SaveLo & 0x01) == 0x01) //'如果LSB为1,则与多项式码进行异或 { CRC16Hi = CRC16Hi ^ CH ; CRC16Lo = CRC16Lo ^ CL ; } } } sbuf[0] = CRC16Hi; sbuf[1] = CRC16Lo; //'CRC高位 //'CRC低位 因篇幅问题不能全部显示,请点此查看更多更全内容