The computation of the CRC is performed on the data response before parity is added. All operations are assumed to be on 16-bit unsigned integers. The least significant bit is on the right. Numbers preceded by 0x are in hexadecimal. All shifts shift in a zero. The algorithm is:
Initialize the CRC to zero. For each character beginning with the address, up to but not including the carriage return (<cr>), do as follows:
{
Set the CRC equal to the exclusive OR of the character and itself
for count =1 to 8
{
if the least significant bit of the CRC is one
{
right shift the CRC one bit set
CRC equal to the exclusive OR of 0xA001 and
itself
}
else
{
right shift the CRC one bit
}
}
}