unsigned char CRCLo, CRCHi;

void CRCNib(unsigned char b)
{
    CRCLo ^= b;
    b      = CRCHi;
    CRCHi  = CRCLo ^ (CRCLo << 4);
    CRCLo  = b;
    CRCLo ^= (b = CRCHi >> 4);
    b      = CRCHi ^ (b >> 1);
    CRCLo ^= CRCHi << 3;
    CRCHi  = b;
}