20230201_1811_emb/1811Project_LPc/Src/Usr/Tool/ToolCheck.c

58 lines
1.3 KiB
C
Raw Permalink Normal View History

#include "ToolCheck.h"
#include <stdio.h>
/* 8位异或校验代码 */
void ToolCheckXor(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 ToolCheckSum(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 ToolCheckCrc8_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 ToolCheckCrc8_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;
}