
78
13. MODBUS communication ■
CRC Generation (continued):
Pseudo code for generating a CRC-16:
CONST ARRAY BUFFER /* data,ex: 11h, 03h, 00h,6bh,00h,02h */
CONST WORD POLYNOMIAL = 0a001h /* X16 = X15 + X2 + X1 */
/* SUBROTINUE OF CRC CACULATE START */
CRC_CAL(LENGTH)
VAR INTEGER LENGTH;
{
VAR WORD CRC16 = 0FFFFH ; /* CRC16 initialize */
VAR INTEGER = I,j; /* LOOP COUNTER */
VAR BYTE DATA; /* DATA BUFFER */
FOR (I=1;I=LENGTH;I++) /* BYTE LOOP */
{
DATA == BUFFER[I];
CRC16 == CRC16 XOR DATA;
FOR (J=1;J=8;J++) /* BIT LOOP */
{
IF ((DATA XOR CRC16) AND 0001H) = 1 THEN
CRC16 = (CRC16 SHR 1) XOR POLYNOMIAL;
ELSE
CRC16 == CRC16 SHR 1;
DATA == DATA SHR 1;
};
};
};