倩女安装正在crc16校验码在线计算crc是啥意思

嵌入式开发(10)
转载自:/bbs/dpj-51955-1.html &查表法
/question/.html &计算法
两种CRC校验方法:查表法和计算法。
16位CRC的多项式0x8005
查表法:即将256种可能全部列出,从表中查找
& 特点:速度快,语句少,但表格占用一定的程序空间。
*pucFrame 为待校验数据首地址,usLen为待校验数据长度。返回值为校验结果。
USHORT usMBCRC16( UCHAR * pucFrame, USHORT usLen )
& & UCHAR ucCRCHi = 0xFF;
& & UCHAR ucCRCLo = 0xFF;
& & int iI
& & while( usLen-- )
& && &&&iIndex = ucCRCLo ^ *( pucFrame++ );
& && &&&ucCRCLo = ( UCHAR )( ucCRCHi ^ aucCRCHi[iIndex] );
& && &&&ucCRCHi = aucCRCLo[iIndex];
& & return ( USHORT )( ucCRCHi && 8 | ucCRCLo );
static const UCHAR aucCRCHi[] = {
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
& & 0x00, 0xC1, 0x81, 0x40
static const UCHAR aucCRCLo[] = {
& & 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
& & 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9,
& & 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,
& & 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
& & 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
& & 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
& & 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,
& & 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF,
& & 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
& & 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
& & 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,
& & 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,
& & 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
& & 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
& & 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
& & 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
& & 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,
& & 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
& & 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
& & 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
& & 0x41, 0x81, 0x80, 0x40
bit Crc_Check(ubyt *RSdata)
/***********功能说明*********************************************发送时,首先将要发送的三个数据放在一个数组中*然后调用crc_check(数组名),则crc会自动放入指定数组的后两个单元中*接收时,将收到的5个数据放在一个数组中*然后调用crc_check(数组名),若返回1表示校验成功,数据可用***************************************************************/{
//定义16位的CRC
for( i=0; i&3; i++ )
//数组前三个元素是真实数据
crc ^= *(RSdata+i);
for(j=8;j&0;j--)
if(crc & 0x0001) crc = (crc&&1) ^ 0xA001;
else crc &&= 1;
i=crc&&8;j=
if((i==*(RSdata+3))&&(j==*(RSdata+4)))
//成功,返回1
//失败,将CRC存入数组
*(RSdata+3) =
//存放CRC的高八位;
*(RSdata+4) =
//CRC低八位
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3588次
排名:千里之外
转载:11篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'每日登录:+1西币&+1积分
&下次自动登录
绑定第三方账号登录 & & &
扫描二维码登录支持中心移动端
获取动态密码
售前文档售后文档热门视频系列热门版区售后服务概述自助服务帮助信息
You are here:
CRC校验检查
热点活动:
置评已完成,谢谢!
您现在可以为该问题添加标签。
CRC校验检查 - 已解决问题
最近用CP340MODBUS通讯已经成功,后来优化CRC校验程序时,把部分梯形图转化为STL语言后校验就不对了。哪位帮忙分下?&&&&&L&&&&&W#16#FFFF&&&&&&&T&&&&&#TEMP2&&&&&&&&&&&&&&&&&&&&&&//校验寄存器&&&&&&&L&&&&&#Start_add&&&&&&&&&&&&&&&&&&//起始地址&&&&&&&SLD&&&3&&&&&&&LAR1&&&&&&&&&L&&&&&#Count&&&&&&&&&&&&&&&&&&&&&&//字节数&&&&&&&T&&&&&#TEMP3&&&&&&&L&&&&&1&&&&&&&&&&&&&&&&&&&&&&&&&&&//初始化&&&&&&&T&&&&&#TEMP8&&&&&&&L&&&&&#DBNO&&&&&&&&&&&&&&&&&&&&&&&//数据块编号&&&&&&&T&&&&&#TEMP4&&&&&&&OPN&&&DB&[#TEMP4]&&&&&&&&&&&&&&&&&//打开数据块&x001:&A(&&&&&&&&&&&L&&&&&#TEMP8&&&&&&&&&&&&&&&&&&&&&&//已校验字节数&&&&&&&L&&&&&#TEMP3&&&&&&&&&&&&&&&&&&&&&&//设定字节数&&&&&&&&=I&&&&&&&&&&)&&&&&&&&&&&&JNB&&&x005&&&&&&&L&&&&&0&&&&&&&&&&&&&&&&&&&&&&&&&&&//移位计数清零&&&&&&&T&&&&&#TEMP5&x005:&NOP&&&0&&&&&&&L&&&&&DBB&[AR1,P#0.0]&&&&&&&T&&&&&LB&&&&&9&&&&&&&L&&&&&#TEMP5&&&&&&&&&&&&&&&&&&&&&&//TEMP5&INT&8.0&&&&&&&L&&&&&#TEMP2&&&&&&&XOW&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//异或处理&&&&&&&T&&&&&#TEMP2&&&&&&&+AR1&&P#1.0&&&&&&&&&&&&&&&&&&&&&&&//地址递增&&&&&&&L&&&&&0&&&&&&&T&&&&&#TEMP6&&&&&&&&&&&&&&&&&&&&&&//移位计数清零&x002:&L&&&&&#TEMP2&&&&&&&&&&&&&&&&&&&&&&//移位&&&&&&&SRW&&&1&&&&&&&JP&&&&x003&&&&&&&&&&&&&&&&&&&&&&&&//若移出位数为1跳转X003&&&&&&&JU&&&&x004&&&&&&&&&&&&&&&&&&&&&&&&//否则无条件跳转XOO4&x003:&L&&&&&#TEMP2&&&&&&&&&&&&&&&&&&&&&&//与16A001异或&&&&&&&L&&&&&W#16#A001&&&&&&&XOW&&&&&&&&&&T&&&&&#TEMP2&&&&&&&JU&&&&x004&&&&&&&&&&&&&&&&&&&&&&&&//跳转X004&x004:&A(&&&&&&&&&&&L&&&&&#TEMP6&&&&&&&&&&&&&&&&&&&&&&//移位计数&&&&&&&L&&&&&1&&&&&&&+I&&&&&&&&&&&T&&&&&#TEMP6&&&&&&&)&&&&&&&&&&&&A(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//移位数与8比较&&&&&&&L&&&&&#TEMP6&&&&&&&L&&&&&8&&&&&&&&I&&&&&&&&&&&)&&&&&&&&&&&&JC&&&&x002&&&&&&&&&&&&&&&&&&&&&&&&//若小于8跳转X002&&&&&&&A(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//校验字节数计数&&&&&&&L&&&&&#TEMP8&&&&&&&L&&&&&1&&&&&&&+I&&&&&&&&&&&T&&&&&#TEMP8&&&&&&&)&&&&&&&&&&&&A(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//校验字节数和设定字节数比较&&&&&&&L&&&&&#TEMP8&&&&&&&L&&&&&#TEMP3&&&&&&&&I&&&&&&&&&&&)&&&&&&&&&&&&JC&&&&x001&&&&&&&&&&&&&&&&&&&&&&&&//跳转到X001继续校验下一字节&&&&&&&L&&&&&LB&&&&&2&&&&&&&T&&&&&#CRC_H&&&&&&&L&&&&&LB&&&&&3&&&&&&&T&&&&&#CRC_L&&问题补充:注明:TEMP2,INT,2.0&
产品版区:
悬赏分:10 | 解决时间: 13:12:43 | 提问者:& - 学长&nbsp&nbsp第2级
问题ID:28632
晕,循环用LOOP指令多好啊,被你搞这么费劲,哈哈&有两处错误:&1、移位之后没有赋值给#TEMP2&&&&&&L&&&&&#TEMP2&&&&&&&&&&&&&&&&&&&&&&//移位&&&&&&&SRW&&&1&&&&&&T&&&&#TEMP2&2、校验字节数少了一个,&该为&=&&&&A(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//校验字节数和设定字节数比较&&&&&L&&&&&#TEMP8&&&&&&&&&L&&&&&#TEMP3&&&&&&&&&=I&&&&&&&&&&&&)&&&&&&&&&&&&JC&&&&x001&&&&&&&&&&&&&&&&&&&&&&&&//跳转到X001继续校验下一字节
顶级工程师&nbsp&nbsp第12级&
以下网友赞了您的问题:
填写您的评论...
提问者对于答案的评价:谢谢!&确实是这2个问题导致的!&现在已经成功啦!
看了这个问题的网友还看了
本版相关问题
本版精华问答
等您来回答
作者/最新回复
最后回复时间
是自己编的吗?不错.
- 中级技术员&nbsp&nbsp第6级
& 22:37:00
上一页1下一页&
扫描打开手机版
支持中心新发布“关注”功能了!实时查看彼此动态,更方便地进行技术交流。
不管是“关注”与“被关注”,相信都是一个美好的开始!
还有多重奖励派送,快快行动起来吧!
20秒帮我们优化支持中心!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
欢迎您来到找答案
在“找答案”,已有超过7万个被解决的技术问题供您参考!
西门子技术专家亲自把关!常规的,简单的问题,在这里您都可以找到答案!
遇到了问题,就来“找答案”提问。
点击搜索框右侧的提问按钮,只需2步就能成功提交问题!分分钟就有无数大侠前来帮你。
在“找答案”每天都有大量的新问题。
别犹豫,只需要点击问题下方的“我要回答”就能参与。答题不光有积分相送,也会给您积攒大侠人气。
“找答案”定期开展各种有奖活动期待您的参与。
更有机会参加西门子高端用户峰会。领略西门子的博大精深!

我要回帖

更多关于 java crc16校验算法 的文章

 

随机推荐