Crc-16 calculation example in c – Yaskawa G7 Modbus Communication User Manual

Page 31

Advertising
background image

31



CRC-16 Calculation Example in C

void

getMBCRC(char

*,

int,

char

*)

//

function

prototype

void getMBCRC(char *buf, int bufLen, char *crc) {

// Function name and parameter list returning a void

// *buf

pointer to character array used to calculate CRC

//

bufLen

number

of

characters

to

calculate

CRC

for

//

*crc

pointer

to

the

array

that

contains

the

calculated

CRC

unsigned long crc_0 = 0xffff;

//

Declare

and

initialize

variables

unsigned long crc_1 = 0x0000;

// Declare and initialize variables

int

i,j;

//

Declare

and

initialize

variables

for (i=0; i<bufLen; i++) {

// Loop through characters of input array

crc_0 ^= ((unsigned long)buf[i] & 0x00ff);

// XOR current character with 0x00ff

for

(j=0;j<8;j++)

{

//

Loop

through

characters

bits

crc_1 = (crc_0 >> 1) & 0x7fff;

// shift result right one place and store

if (crc_0 & 0x0001)

// if pre-shifted value bit 0 is set

crc_0 = (crc_1 ^ 0xa001);

// XOR the shifted value with 0xa001

else

// if pre-shifted value bit 0 is not set

crc_0 = crc_1;

// set the pre-shifted value equal to the shifted value

}

// End for loop - Loop through characters bits

}

// End for loop - Loop through characters of input array

crc[0] = (unsigned char)((crc_0/256) & 0x00ff);

// Hi byte

crc[1] = (unsigned char)(crc_0 & 0x00ff);

// Lo byte

return;

//

Return

to

calling

function

}

//

End

of

CRC

calculation

function

Advertising