Appendix C. CRC-16
Computa
tion
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. Number
s 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
}
}
}
C.1 Encoding the CRC as ASCII
Characters
The 16-bit CRC is encoded to three ASCII characters by using the following algorithm:
1st char
acter = 0x40 OR (CRC shifted right 12 bits)
2nd character = 0x40 OR ((CRC shifted right 6 bits) AND 0x3F)
3rd character = 0x40 OR (CRC AND 0x3F)
The three ASCII characters are placed between the data and <cr><lf>. Parity is applied to all
three characters, if selected for the character frame.
The CRC computation code is added to the end of the response, if the first letter of the
c
ommand is sen
t by using lower case.
Appendix C – CRC-16 Computation
179
sales@streamlinemeasurement.co.uk
www.streamlinemeasurement.co.uk