- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简单实用的单片机crc快速算法-硬件、射频
简单实用的单片机CRC快速算法
煤炭科学研究总院太原分院 (030006) 韩 炬
摘 要 提供两个实用的、能够在单片机上通过软件来实现的CRC 快速算法,其中一个适用于
51 系列等单片机,另一个适用于PIC 单片机,这两种算法十分简单快捷。
关键词 CRC 算法 单片机
1 引言
CRC (循环冗余码)检验技术广泛应用于测控及通信领域。在很多情况下,CRC 计算是靠
专用的硬件来实现的,但是对于小型低成本的单片机系统来说,若要在没有这些硬件的支持下
实现CRC 检验,首先要解决的就是如何通过软件高效快速地完成CRC 计算的问题,也就是
CRC 算法的问题。
这里将提供两种算法,它们稍有不同,一种适用于程序空间大一些的51 系列等单片机,
另一种适用于程序空间的使用条件十分苛刻的PIC 单片机。这些算法按字节进行计算,仅使
用查表和简单的异或运算等操作,所以,计算过程相当简捷,而计算速度却很快。
下面先简述一下CRC 原理,然后再以CRC-CCITT 标准生成多项式为例对算法进行说明,
并给出一个51 系列单片机子程序和一个PIC 单片机子程序。
2 CRC 原理
CRC 检验原理实际上就是在一个p 位二进制数据序列之后附加一个r 位二进制检验码(序
列),从而构成一个总长为n =p+r 位的二进制序列,例如,p 位二进制数据序列D=
[d d d d ],r 位二进制检验码R=[r r r r ],所得到的这个n 位二进制序
p-1 p-2 1 0 r-1 r-2 1 0
列就是M=[d d d d r r r r ]; 附加在数据序列之后的这个检验码与数据
p-1 p-2 1 0 r-1 r-2 1 0
序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发
生错误,这种特定关系就会被破坏,因此,通过检查这一关系, 就可以实现对数据正确性的检
验。
校验码R 是通过对数据序列D 进行二进制除法取余式运算得到的,它被一个称为生成多
项式的 (r+1)位二进制序列G=[g g g g ]来除,用多项式形式表示为
r r-1 1 0
(1)
r
其中,x D(x )表示将数据序列D 左移r 位 (即在D 的末尾再增加r 个0 位),Q(x )代表
这一除法所得的商,R(x)就是所需的余式。这一运算关系还可以用式 (2)来表达
(2)
其中,Re[ ]表示对括号内的式子进行取余式运算。
检验码的编码计算如上所述,而检验过程则是对M 序列直接进行除法取余式运算,即
(3)
或表示为
(4 )
所得到的余式R(x)若为零则表示数据正确,否则认为发生错误。
3 快速算法的基本思路
这里仅以CRC-CCITT 标准生成多项式为例进行说明。CRC-CCITT 是一个17 位生成多
16 12 5
项式G=[1 0001 0000 0010 0001],用多项式形式表示为G(x)=x +x +x +1,由
它产生的检验码R 的二进制位数是16 位 (2 字节)。
单片机的操作是以字节形式进行的,所以,算法应以字节为单位进行运算。这里将把用字
节构成的二进制序列称为 “字节序列”,显然,单片机的数据序列、检验码以及它俩组成的序
列M 都是字节序列,或者说是 “多字节序列”。
实际上,这种算法所要解决的问题就是如何对多字节序列进行除法取余式运算的问题。
3.1 多字节序列运算规律
首先设一个由i 个字节 m 、m 、、m 、m 构成的8×i 位二进制序列,并用字节
文档评论(0)