Browse Source

完成CRC-16校验计算模块

Modbus_RTU
zcn1123 4 years ago
parent
commit
1bb9ad8936
1 changed files with 33 additions and 1 deletions
  1. +33
    -1
      Modbus_communication/Modbus_RTU_Salve/common.cpp

+ 33
- 1
Modbus_communication/Modbus_RTU_Salve/common.cpp View File

@@ -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;
}


||||||
x
 
000:0
Loading…
Cancel
Save