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