找回密码
 新注册用户
搜索
查看: 9614|回复: 2

[求助]哪位高手能提供CRC-CCITT的C语言程序么

[复制链接]
发表于 2005-5-19 10:34:01 | 显示全部楼层 |阅读模式
计算CRC-CCITT的函数都要自己编么,难道没有专用C函数么
还有,当用422串行传输数据时,怎么用软件实现在连续的5个1后插入1个0?我知道好象硬件上比较容易实现,网络芯片已经提供了此功能,但怎么用软件实现呢,串口传输不都是以字节为单位的么,如果在1byte里插如1bit,那多出来的bit放在哪里呢,有专用的C函数么
回复

使用道具 举报

发表于 2005-5-22 19:20:41 | 显示全部楼层
参见帖子:http://www.equn.com/forum/viewthread.php?tid=5470


1) 求CRC码的运算采用模2运算, 所谓模2运算就是不带进位和借位, 因此加法和减法等价,实际上就是逻辑上的异或运算, 除法可以用多次模2减法实现.

2) 所谓CRC码, 就是把数据块左移16位, 然后除以0x11021所得到的余数(由CCITT推荐).

3) 据此写出以下的CRC的C程序. *ptr指向发送数据块的首地址, len是数据块以字节为单位的长度.

uint cal_crc(uchar *ptr, uchar len) {
uint crc;
uchar i;

crc=0;
while(len--!=0) {
for(i=0x80; i!=0; i/=2) {
if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;}
else crc*=2;
if((*ptr&i)!=0) crc^=0x1021;
}
ptr++;
}
return(crc);
}
回复

使用道具 举报

 楼主| 发表于 2005-5-25 14:12:29 | 显示全部楼层
太谢谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-4-29 08:13

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表