EasyManua.ls Logo

Alpha Omega Instruments 800 Series - Page 114

Default Icon
117 pages
Print Icon
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);
}
ALPHA OMEGA INSTRUMENTS CORP. Instruction Manual
Series 800/850 Thermoelectric Cooler Controller Page 109