58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
#include "ZthyToolCheck.h"
|
|
#include <stdio.h>
|
|
|
|
|
|
/* 8位异或校验代码 */
|
|
void ZthyToolCheckXor(unsigned char *Buf, unsigned int BufLen , unsigned char *Xor)
|
|
{
|
|
unsigned int i;
|
|
*Xor = 0;
|
|
for (i = 0; i < BufLen; i++) {
|
|
*Xor = (*Xor) ^ Buf[i];
|
|
}
|
|
}
|
|
|
|
/* 8位校验和 */
|
|
void ZthyToolCheckSum(unsigned char *Buf, unsigned int BufLen , unsigned char *Sum)
|
|
{
|
|
unsigned int i;
|
|
*Sum = 0;
|
|
for (i = 0; i < BufLen; i++) {
|
|
*Sum = (*Sum) + Buf[i];
|
|
}
|
|
}
|
|
|
|
/* CRC 0x31校验 */
|
|
void ZthyToolCheckCrc8_0x31(unsigned char *Buf, unsigned int BufLen , unsigned char *Crc)
|
|
{
|
|
unsigned char i = 0;
|
|
while (BufLen--) {
|
|
(*Crc) ^= *Buf++;
|
|
for (i = 0; i < 8; i++) {
|
|
if ((*Crc) & 0x01) {
|
|
(*Crc) = ((*Crc) >> 1) ^ 0x8c;
|
|
} else {
|
|
(*Crc) = ((*Crc) >> 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* CRC16 modbus */
|
|
void ZthyToolCheckCrc8_0x8005(unsigned char *Buf, unsigned int BufLen , unsigned short *Crc)
|
|
{
|
|
unsigned short i, j, tmp, CRC16;
|
|
CRC16 = 0xffff;
|
|
for (i = 0; i < BufLen; i++) {
|
|
CRC16 ^= Buf[i];
|
|
for (j = 0; j < 8; j++) {
|
|
tmp = (unsigned short)(CRC16 & 0x0001);
|
|
CRC16 >>= 1;
|
|
if (tmp == 1) {
|
|
CRC16 ^= 0xA001; //异或多项式
|
|
}
|
|
}
|
|
}
|
|
*Crc = CRC16;
|
|
}
|