中易网

C51modbusrtucrc下面这段代码校验结果总是不对,请高手指教,不胜感激!

答案:2  悬赏:10  
解决时间 2021-11-13 01:49
uint CRC16(uint address) //计算校验码
{
uint CRC;
uchar i;
CRC=0xFFFF;
for(i=0;i<8;i++)
{
CRC=CRC^address; //异域
if((CRC&1)!=0) //检测最低位是否为1
{CRC=(CRC>>1)^0xA001;} //如果为1右移一位后须异域0xA001
else
{CRC=CRC>>1;} //如果移出位为0,只须右移一位
}
TX_com[0]=(CRC&0x00FF); //校验结果低8位
TX_com[1]=(CRC&0xFF00)>>8; //检验结果高8位

return CRC;
}
最佳答案
这个函数的问题在于:
1、每次只能计算1个字节数据的CRC值,若有多个字节,须调用多次;
2、字节数据,应把(uint address)改为(uchar address)
3、应计算完全部字节数据的CRC值之后,再把CRC值高、低字节对调,所以代码中提前处理了低8位、高8位,导致结果错误。
全部回答
看看 CRC 的原理 然后再读解这个程序 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
听说胎儿双顶径-股骨长>2就是男孩吗?
孩子右脚内八肌张力低脚没力
altiumdesigner里的bts7960的库
怎么做板栗炖鸡才能发挥板栗炖鸡的好处
梦见同学没有说话是什么意思?好不好呢?
一般手机怎么连接小米蓝牙
侶伴的意思是什么?侶伴的释义是什么啊?
武汉市汉阳区德邦物流公司现在是否在面向社会
骨软筋酥的意思?成语怎么解释?
有了解普乐浴缸龙头质量的吗?
宝宝生下来鼻子上有好多小白点是什么?要紧吗?
安徽合肥我想在网上招聘会计怎么找
冰砂冰垫vs凝胶冰垫哪个更好用
筑障的意思是什么?筑障的释义是什么啊?
永恒印记的钻戒和普通的钻戒有什么区别?
推荐资讯
一般怀孕多久后可以使用试纸检测出来?
陕西邮电职业技术学院的学校代码、在定边发布
移天换日的意思?成语怎么解释?
芜湖步行街花店有哪些? 离步行街越近越好~~在
胆略兼人的意思?成语怎么解释?
宝宝不爱上幼儿园怎么办好呢?
怎样在PowerPoint2010中显示幻灯片编辑区的标
日照肯德基外卖
进超市雨伞要寄放在寄放物品柜吗
江苏南通有没有买衣服便宜好看的地方?
我想在石河子拜一位符咒,阴阳风水师傅不知哪
中通快递(施甸由旺镇营业部)地址在什么地方,
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?