|
|
@@ -324,5 +324,37 @@ unsigned int Count_Read_date_number(int Function_code, unsigned int Operations_N |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
* 功能 : 计算CRC校验 |
|
|
|
* 描述 : 获取Modbus—CRC-16的校验数据 |
|
|
|
* 输入 : *Data 计算校验数据 CRC_Len 数据长度 |
|
|
|
* 返回值 : Ret_CRC_date CRC校验结果 |
|
|
|
**********************************************************************************************/ |
|
|
|
UINT16 CRC_16(UINT8 *Data, unsigned int CRC_Len) |
|
|
|
{ |
|
|
|
UINT16 CRC_date = 0XFFFF;//16位crc寄存器预置 |
|
|
|
UINT16 temp; |
|
|
|
unsigned int i = 0, j = 0; |
|
|
|
for (i = 0; i < CRC_Len; i++) |
|
|
|
{ |
|
|
|
temp = *Data & 0X00FF;//将八位数据与CRC寄存器亦或 |
|
|
|
Data++; |
|
|
|
CRC_date ^= temp; |
|
|
|
for (j = 0; j < 8; j++) |
|
|
|
{ |
|
|
|
if (CRC_date & 0X0001)//判断右移出的是不是1,如果是1则与多项式进行异或。 |
|
|
|
{ |
|
|
|
CRC_date >>= 1; |
|
|
|
CRC_date ^= 0XA001; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
CRC_date >>= 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
UINT16 Ret_CRC_date = CRC_date >> 8; |
|
|
|
Ret_CRC_date = Ret_CRC_date | CRC_date << 8; |
|
|
|
return Ret_CRC_date; |
|
|
|
} |
|
|
|
|