EasyManua.ls Logo

Watlow 97 series - Page 71

Watlow 97 series
89 pages
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
Cyclical Redundancy Checksum (CRC) Algorithm
This C routine, calc_crc(), calculates the cyclical redundancy checksum, CRC,
for a string of characters. The CRC is the result of dividing the string by
0xA001. Modbus applications calculate the packet’s CRC then append it to the
packet.
#define POLYNOMIAL 0xA001;
unsigned int calc_crc(unsigned char *start_of_packet, unsigned char
*end_of_packet)
{
unsigned int crc;
unsigned char bit_count;
unsigned char *char_ptr;
/* Start at the beginning of the packet */
char_ptr = start_of_packet;
/* Initialize CRC */
crc = 0xffff;
/* Loop through the entire packet */
do{
/* Exclusive-OR the byte with the CRC */
crc ^= (unsigned int)*char_ptr;
/* Loop through all 8 data bits */
bit_count = 0;
do{
/* If the LSB is 1, shift the CRC and XOR the polynomial mask with the CRC */
if(crc & 0x0001){
crc >>= 1;
crc ^= POLYNOMIAL;
}
/* If the LSB is 0, shift the CRC only */
else{
crc >>= 1;
}
} while(bit_count++ < 7);
} while(char_ptr++ < end_of_packet);
return(crc);
}
Watlow Series 97 Appendix A.9

Related product manuals