请问大家CRC算法还是用以前网上流传的那种吗?

[复制链接]
2103|4
 楼主| mbutterfly 发表于 2010-4-15 11:13 | 显示全部楼层 |阅读模式
typedef   
unsigned char   
uchar;
typedef   
unsigned int     
uint;


code uchar crcbuff [] = { 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3}; //
待发送数据
uint crc;                  
// CRC 码
void main(void)
{

uchar *ptr;

crc = 0;               
// CRC
初值

ptr = crcbuff;              
//
指向待发送数据

crc = crc16l(ptr,8);            


while(1);
}
uint crc16l(uchar *ptr,uchar len)      
// ptr
为数据指针,len 为数据长度
{

uchar i;

while(len--)

{
      
for(i=0x80; i!=0; i>>=1)
   
{
        
if((crc&0x8000)!=0)

{


crc<<=1;

crc^=0x1021;

}        
//1-1  

         
else

{

crc<<=1;                  
   
//1-2

}


     
if((*ptr&i)!=0)


{

crc^=0x1021;      
//1-3  


}   


}
   
ptr++;

}

return(crc);
}



还是用除法来做呢?
zc3909 发表于 2010-4-16 09:17 | 显示全部楼层
我一般是查表
 楼主| mbutterfly 发表于 2010-4-16 16:05 | 显示全部楼层
谢谢,我也打算用查表的方式来做了,好像除了移位异或和查表之外没有其他途径的了
chunyang 发表于 2010-4-16 17:49 | 显示全部楼层
去看本栏目的相关老帖以及侃单片机栏目的相关老帖。
 楼主| mbutterfly 发表于 2010-4-20 08:29 | 显示全部楼层
恩,谢谢chunyang老师。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:想接点活,本人熟练使用各种型号单片机,熟悉各种频率RFID协议。

75

主题

5441

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部