您现在所在的是:

串口通信

回帖:4个,阅读:9893 [上一页] [1] [下一页]
919
liuweipeng
文章数:2
年度积分:50
历史总积分:919
注册时间:2003/5/4
发站内信
发表于:2003/8/11 16:13:00
#0楼
我做了一个协议,要求计算7E 00 00 45 02 00 00 0A 50 这个命令的CRC的校验(最后两个0A 50为CRC的校验码),请问该如何计算呢?谢谢!!
1379
deyun
文章数:257
年度积分:50
历史总积分:1379
注册时间:2002/5/27
发站内信
发表于:2003/8/11 16:59:00
#1楼
把前面的7个数按16进制相加,得到的结果就是校验和

7E+00+00+45+02+00+00=xxnn
xx nn就是校验和,通常先传送nn,后传送xx

7E 00 00 45 02 00 00 C8 00
我不是天才,也不是蠢才。我有一颗上进的心,所以我不怕困难!
欢迎到我的论坛做客:http://www.deyunme.com/bbs/index.asp
1173
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:1173
注册时间:2002/8/7
发站内信
发表于:2003/8/11 17:43:00
#2楼
楼上这位先学学CRC原理:
循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
根据应用环境与习惯的不同,CRC又可分为以下几种标准:
  ①CRC-12码;
  ②CRC-16码;
  ③CRC-CCITT码;
  ④CRC-32码

CRC使用手册下载: http://www.fpga.com.cn/freeip/crc_xilinx.pdf
CRC在线运行: http://www.easics.be/webtools/crctool
999
逐日子石
文章数:25
年度积分:50
历史总积分:999
注册时间:2006/2/22
发站内信
发表于:2006/4/13 2:25:00
#3楼
在巧合的时间里,场合下,看到您的心血。

俩字--感激!
善良人的空话\无能实在。。。!! 熟读论语吧!为了让自己的人生更完美 更幸福!
1004
工业控制组员
文章数:45
年度积分:50
历史总积分:1004
注册时间:2008/6/16
发站内信
发表于:2008/6/17 10:27:00
#4楼
void crc16(byte d[], int len)
{
       byte b = 0;
       ushort crc = 0xffff;
       int i, j;

       for(i=0; i<len; i++)
       {        
               for(j=0; j<8; j++)
               {
                       b = ((d[i]<<j)&0x80) ^ ((crc&0x8000)>>8);
                       
                       crc<<=1;

                       if(b!=0)        crc^=0x1021;
               }
       }
       crc = ~crc;

       printf("crc: 0x%.4X ", crc);
}

再微小的需求,我们也全力支持您!
努力,生活更美好!!!!!!!!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005