描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302476504
通过本CRC程序集的出版,希望达到如下目的:当广大编程人员遇到CRC计算的问题时,能从本书中查到符合自己所需CRC位数、生成多项式和程序语言的程序模块,从而加快编程进度。
目录
第1章概述
1.1循环冗余校验简介
1.2循环冗余校验的基本过程
1.3使用循环冗余校验码的一个例子
1.3.1Modbus通信协议通信格式说明
1.3.2循环冗余码CRC16码的用法
第2章CRC8码的计算
2.1用手工计算CRC8码
2.2用程序计算CRC8码:生成多项式g(x)=x8 x5 x4 1(正序)
2.2.1C语言
2.2.2VB语言
2.2.3C51语言
2.2.4ASM51汇编语言
2.3用程序计算CRC8码:生成多项式g(x)=x8 x5 x4 1(反序)
2.3.1C语言
2.3.2VB语言
2.3.3C51语言
2.3.4ASM51汇编语言
2.4用程序计算CRC8码:生成多项式g(x)=x8 x2 x 1(正序)
2.4.1C语言
2.4.2VB语言
2.4.3C51语言
2.4.4ASM51汇编语言
2.5小结
第3章CRC16码的计算
3.1如何生成CRC16码
3.2用程序计算CRC16码:生成多项式g(x)=0A001H
3.2.1C语言
3.2.2VB语言
3.2.3C51语言
3.2.4ASM51汇编语言
3.3用程序计算CRC16码:生成多项式g(x)=11021H
3.3.1C语言
3.3.2VB语言
3.3.3C51语言
3.3.4ASM51汇编语言
3.4小结
第4章CRC32码的计算
4.1CRC32码简介
4.2如何用C语言计算CRC32码
4.2.1直接计算法(正序)
4.2.2直接查表法(正序)
4.2.3直接查表法(反序)
4.2.4表格逐渐生成查表法(正序)
4.2.5表格逐渐生成查表法(反序)
4.2.6表格的生成法(正序)
4.2.7表格的生成法(反序)
4.3如何用C51语言计算CRC32码
4.3.1直接查表法(反序)
4.3.2表格逐渐生成查表法(正序)
4.3.3表格的生成法(反序)
4.4小结
附录AVisual C 6.0的上机操作
A.1Visual C 的安装和启动
A.2输入和编辑源程序
A.3编译、连接和运行
A.4编译和运行C语言程序的另一种方法
附录B单片机开发软件Keil C51的使用方法
B.1Keil C51简介
B.2安装Keil C51
B.3如何建立一个工程
B.4单片机选型
B.5创建源程序
B.6把新创建源程序加入到工程文件中
B.7工程的设置
B.8编译
B.9调试
附录CVisual Basic 6.0的上机操作
C.1Visual Basic 6.0的安装、启动及退出
C.2如何编译和运行配套的VB语言程序
C.3如何运行一个VB语言程序
参考文献
编著者2017年4月
1.1循环冗余校验简介在远距离数据通信中,为确保高效而无差错地传输数据,必须对数据检错,即差错控制。有多种检错的方法,如奇偶校验、算术累加和校验及循环冗余校验。而循环冗余校验是其中好的一种。循环冗余校验(Cyclic Redundancy Check,CRC)是目前运用非常广泛的一种数据校验方式。其特点是: 检错能力极强,开销小,易于用编码器及检测电路实现。从检错能力来看,其不能发现错误的几率在0.0047%以下; 从性能和开销上考虑,其远远优于奇偶校验及算术累加和校验等方式。因而,在计算机网络、磁盘存储和数据通信等领域,CRC无处不在。Modbus通信协议下有两种通信模式: 一种是ASCII(美国标准信息交换代码)通信模式,另一种是RTU(远程终端单元)通信模式,后者就采用了CRC校验方法。著名的通信协议X.25的FCS(帧检错序列)采用的是CRCCCITT; 磁盘驱动器的读写采用的是CRC16; ARJ、LHA等压缩工具软件采用的是CRC32; 一些半导体厂商生产的单总线芯片用CRC8校验其芯片固有编号,如芯片DS18B20的8字节的序列号,后1个字节是前面7个字节的CRC码,这是为了保证序列号的性与正确性; 此外通用的图像存储格式GIF、TIFF等都用CRC作为检错手段。CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(即CRC码),并附在信息后面,构成一个新的二进制码序列数,共(k r)位,后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。CRC校验可以简单地描述为: 例如我们要发送一些数据(信息字段),为了避免一些干扰并在接收端判断接收的是否是真实的数据,这时就要加上校验数据(即CRC校验码),以判断接收的数据是否正确。在发送端,根据要传送的k位二进制码序列,以一定的规则(CRC校验有不同的规则,规则一词,在差错控制理论中称为“生成多项式”)产生一个校验用的r位校验码(CRC码),附在原始信息后边,构成一个新的二进制码序列数,共k r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则(即与发送时生成CRC校验码相同的规则)进行检验,校验采用计算机的模2除法,即除数和被除数(即生成多项式)做异或运算,进行异或运算时除数和被除数位对齐,进行按位异或运算,若终的数据能被除尽,则传输正确; 否则,传输错误。生成CRC码的多项式g(x)又叫生成多项式(Generation Polynomial),生成多项式有多种(见表11)。生成多项式不同,产生的CRC码也不同。这就类似作除法时被除数相同,除数不同,所求得商和余数不同。生成多项式如果是(4 1)位的,则产生4位的CRC4码; 如果是(8 1)位的,则产生8位的CRC8码; 如果是(12 1)位的,则产生12位的CRC12码; 如果是(16 1)位的,则产生16位的CRC16码; 如果是(32 1)位的,则产生32位的CRC32码。
表11标准CRC码生成多项式
名称生成多项式简记式标 准 引 用CRC8x8 x5 x3 10x129CRC8x8 x2 x 10x107CRC8x8 x6 x4 x3 x2 x0x15ECRC12x12 x11 x3 x2 x 10x180FCRC16x16 x15 x2 10x18005IBM SDLCCRC16CCITTx16 x12 x5 10x11021ISO HDLC, ITU X.25
续表
名称生成多项式简记式标 准 引 用
CRC16REVx15 x13 10xA001CRC32x32 x26 x23 x22 x16 x12 x11 x10 x8 x7 x5 x4 x2 x 10x04C11DB7ZIP, RAR, IEEE 802
CRC校验码的产生的大致步骤是: 把要发送数据(通常是由多个字节组成的数组)以二进制的格式排列起来,拿生成多项式所对应的二进制数去做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。
从表11可以看出CRC码有8位到32位的,常用的是8位(一个字节)的CRC8码、16位(两个字节)的CRC16码和32位(四个字节)的CRC32码。以下主要介绍CRC8码、CRC16码和CRC32码的生成方法。1.2循环冗余校验的基本过程CRC校验的基本过程: 采用CRC校验时,通信的发送方和接收方用同一个生成多项式g(x),多项式正序反序,初始值也相同,并且g(x)的首位和后一位的系数必须为1。CRC检验的处理方法是: 发送方用发送数据的二进制多项式t(x)除以g(x) ,得到余数y(x)作为CRC校验码。校验时,以计算的校正结果是否为0为依据,判断数据帧是否出错。设生成多项式是r阶的(位是x^r ),具体步骤描述如下。发送方: (1) 在发送的m位数据的二进制多项式t(x)后添加r个0 ,扩展到m r位,以容纳r位的校验码,追加0后的二进制多项式为T(x)。(2) 用T(x)除以生成多项式g(x),得到r位的余数y(x),它就是CRC校验码。(3) 把y(x)追加到t(x)后面,此时的数据s(x)就是包含了CRC校验码的待发送字符串; 由于s(x)=t(x)y(x),因此s(x)肯定能被g(x)除尽。接收方: (1) 接收数据n(x),这个n(x)就是包含了CRC校验码的m r位数据; (2) 计算n(x)除以g(x),如果余数为0则表示传输过程没有错误,否则表示有错误。从n(x)去掉尾部的r位数据,得到的就是原始数据。1.3使用循环冗余校验码的一个例子Modbus通信协议是工业控制领域实现单个电子控制器互联的通信协议,实际上它已成为一种通用的工业标准。硬件采用RS232串行口或RS485串行口,通信方式为主从式半双工通信,主机呼叫从机地址,从机应答通信。数据帧共10位,1个起始位,8个数据位,1个停止位,无校验。波特率: 9600或19200。图11是采用Modbus通信协议的总站、分站通信系统结构示意图。以下介绍Modbus通信协议的通信格式。
图11采用Modbus通信协议的总站、分站通信系统结构示意图
评论
还没有评论。