首页程序设计C51程序CRC16算法实现--移位法

CRC16算法实现--移位法

时间2015-06-06 23:15:46发布caterwang分类C51程序浏览3061

 这个代码是我在实际产品上应用的程序,前面那部分注释讲得是CRC16校验码生成的算法,其他部分看注解应该是比较清楚了!

//=================================CRC16发生器=================================

/*

1.置16位寄存器为全1,作为CRC寄存器。

2.把一个8位数据与16位CRC寄存器的低字节相异或,把结果放于CRC寄存器中。

3.把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位(移出位)。

4.如果最低位为0,重复③(再移位);如果最低位为1,CRC寄存器与多项式A001H(1010 0000 0000 0001)进行异或。

5.重复③、④,直到右移8次,这样整个8位数据全部进行了处理。

6.重复②-⑤,进行下一个8位数据的处理。

7.将一帧的所有数据字节处理完后得到CRC-16寄存器。

8.将CRC-16寄存器的低字节和高字节交换,得到的值即为CRC-16码。

*/

//输入:CRCArray表示要对这个数组序列进行CRC16验验,nCount则表示要对这个数组序列的前nCount个成员进行CRC16校验

void CRCParity(unsigned char *CRCArray,char nCount)

{

   union CRC{

           unsigned short CRCWord;

           struct {

                   unsigned char  Hi;

                   unsigned char  Lo;

                   } CRCByte;

           }CRC16;

   unsigned char i,j;

   CRC16.CRCWord=0xffff;

   for (j=0;j<nCount;j++)

     {

       CRC16.CRCByte.Lo^=CRCArray[j];

       for (i=0;i<8;i++)

        {

         if (CRC16.CRCWord & 0x0001)

            {

              CRC16.CRCWord =CRC16.CRCWord >>1;

              CRC16.CRCWord =CRC16.CRCWord ^ 0xA001;

            }

         else

              CRC16.CRCWord =CRC16.CRCWord >>1;

         }

     }

CRC16H=CRC16.CRCByte.Hi;

CRC16L=CRC16.CRCByte.Lo;

}

凯特网版权声明:以上内容允许转载,但请注明出处,谢谢!

展开全文READ MORE
单片机CRC16
CRC16算法实现--查表法 C++builder常用函数

游客 回复需填写必要信息