目录
第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语言<br /><br />目录<br />第1章概述<br />1.1循环冗余校验简介<br />1.2循环冗余校验的基本过程<br />1.3使用循环冗余校验码的一个例子<br />1.3.1Modbus通信协议通信格式说明<br />1.3.2循环冗余码CRC16码的用法<br />第2章CRC8码的计算<br />2.1用手工计算CRC8码<br />2.2用程序计算CRC8码:生成多项式g(x)=x8 x5 x4 1(正序)<br />2.2.1C语言<br />2.2.2VB语言<br />2.2.3C51语言<br />2.2.4ASM51汇编语言<br />2.3用程序计算CRC8码:生成多项式g(x)=x8 x5 x4 1(反序)<br />2.3.1C语言<br />2.3.2VB语言<br />2.3.3C51语言<br />2.3.4ASM51汇编语言<br />2.4用程序计算CRC8码:生成多项式g(x)=x8 x2 x 1(正序)<br />2.4.1C语言<br />2.4.2VB语言<br />2.4.3C51语言<br />2.4.4ASM51汇编语言<br />2.5小结<br />第3章CRC16码的计算<br />3.1如何生成CRC16码<br />3.2用程序计算CRC16码:生成多项式g(x)=0A001H<br />3.2.1C语言<br />3.2.2VB语言<br />3.2.3C51语言<br />3.2.4ASM51汇编语言<br />3.3用程序计算CRC16码:生成多项式g(x)=11021H<br />3.3.1C语言<br />3.3.2VB语言<br />3.3.3C51语言<br />3.3.4ASM51汇编语言<br />3.4小结<br />第4章CRC32码的计算<br />4.1CRC32码简介<br />4.2如何��C语言计算CRC32码<br />4.2.1直接计算法(正序)<br />4.2.2直接查表法(正序)<br />4.2.3直接查表法(反序)<br />4.2.4表格逐渐生成查表法(正序)<br />4.2.5表格逐渐生成查表法(反序)<br />4.2.6表格的生成法(正序)<br />4.2.7表格的生成法(反序)<br />4.3如何用C51语言计算CRC32码<br />4.3.1直接查表法(反序)<br />4.3.2表格逐渐生成查表法(正序)<br />4.3.3表格的生成法(反序)<br />4.4小结<br />附录AVisual C 6.0的上机操作<br />A.1Visual C 的安装和启动<br />A.2输入和编辑源程序<br />A.3编译、连接和运行<br />A.4编译和运行C语言程序的另一种方法<br />附录B单片机开发软件Keil C51的使用方法<br />B.1Keil C51简介<br />B.2安装Keil C51<br />B.3如何建立一个工程<br />B.4单片机选型<br />B.5创建源程序<br />B.6把新创建源程序加入到工程文件中<br />B.7工程的设置<br />B.8编译<br />B.9调试<br />附录CVisual Basic 6.0的上机操作<br />C.1Visual Basic 6.0的安装、启动及退出<br />C.2如何编译和运行配套的VB语言程序<br />C.3如何运行一个VB语言程序<br />参考文献<br /><br />显示全部信息前 言前言自从人类进入信息社会后,有线的或无线的通信网络便遍布全球。在通信系统中,由于存在干扰或信道传输特性不好,容易对信道造成不良的影响。通过对所传输的数字信息进行特殊的处理(如差错控制编码),即可实现对传输信息中错误的自动检验,称为检错。检错对数字通信系统的有效传输起着重要的作用。检错的手段有三种,一是奇偶校验,二是累加和校验,三是循环冗余校验。循环冗余校验是这三种校验中*好的一种。同一组数据采用不同的生成多项式,将得出不同的循环冗余校验码。一般说来,一组数据的CRC值由四个因素决定,一是生成多项式,二是该生成多项式正序还是反序,三是余数初始值是什么(通常有00H和0FFH,0000H或0FFFFH,00000000H或0FFFFFFFFH的选择), 四是结果异或值是00000000H还是0FFFFFFFFH(结果异或值只在CRC32码中考虑)。当生成多项式固定,正反序固定,余数初始值固定,结果异或值也固定时,同一组数的CRC值便是**的。本书是一本用不同的计算机语言编程计算循环冗余校验码的程序集。常用的循环冗余校验码有8位的、16位的和32位的三种,每种之下又有不同的生成多项式、正序反序、余数初始值取值和结果异或值的区分。所用计算机语言有四种:分别是C语言、VB语言、C51语言和ASM51汇编语言,前两种在个人电脑或笔记本电脑上运行,后两种在51系列单片机上运行。本书共分4章,第1章是概述,介绍循环冗余校验码的概念。第2章是8位循环冗余校验码的计算程序,生成多项式①为x8 x5 x4 1, 包括正序和反序; 生成多项式②为x8 x2 x 1,包括正序。所用计算机语言包括C语言、VB语言、C51语言和ASM51汇编语言。第3章是16位循环冗余校验码的计算程序,生成多项式①为x15 x13 1 ; 生成多项式②为x16 x12 x5 1 。所用计算机语言包括C语言、VB语言、C51语言和ASM51汇编语言。第4章是32位循环冗余校验码的计算程序,生成多项式为x32 x26 x23 x22 x16 x12 x11 x10 x8 x7 x5 x4 x2 x 1,包括正序和反序,所用计算机语言包括C语言和C51语言。本书*后有三个附录,分别是介绍Visual C 6.0上机操作的附录A , 介绍单片机开发软件Keil C51使用方法的附录B 和介绍Visual Basic 6.0上机操作的附录C。电子资料包的内容,仍是以书中章节为单位。在每一章(指第2章~第4章)下,都有一个章文件夹,每章文件夹下面有节文件夹,节文件夹内有四个文件夹,分别是C语言程序夹、VB语言程序夹、C51语言程序夹和ASM51汇编语言程序夹。打开任意一个程序文件夹,里面是例子文件夹。如果是C语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.dsw的文件,在Visual C 6.0 软件已安装在电脑中的前提下,双击具有.dsw扩展名的文件就可进入Visual C 6.0 软件集成环境,也就是Visual C 6.0的编辑、编译、连接、调试、运行环境。如果是VB语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.vbp的文件,在Visual Basic 6.0 软件已安装在电脑中的前提下,双击具有.vbp扩展名的文件就可进入Visual Basic 6.0软件集成环境,也就是Visual Basic 6.0的编辑、编译、连接、调试、运行环境。如果是C51语言程序夹或ASM51汇编语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.Uv2的文件,在单片机开发软件Keil C51已安装在电脑中的前提下,双击具有.Uv2扩展名的文件,就可进入C51语言和ASM51汇编语言软件集成环境。本书适合以下人员阅读或参考。一是学习C语言、VB语言或51系列单片机课程的大、中专及高等职业学校、中等职业学校的在校学生; 二是使用这些语言的广大工程技术人员; 三是这些语言编程的初学者; 四是广大程序设计爱好者。通过这本CRC程序集的出版,希望达到如下目的: 当广大编程人员遇到CRC计算的应用问题时,能从本书中查到符合自己所需位数、所需生成多项式和合适程序语言的程序模块,从而加快编程的工作进度。由于编著者水平有限且时间仓促,书中难免存在缺点和错误,恳请读者批评指正。我的电子邮箱为dushuchun@263.net。本书电子资料包请扫描二维码下载。前言 <div>自从人类进入信息社会后,有线的或无线的通信网络便遍布全球。在通信系统中,由于存在干扰或信道传输特性不好,容易对信道造成不良的影响。通过对所传输的数字信息进行特殊的处理(如差错控制编码),即可实现对传输信息中错误的自动检验,称为检错。检错对数字通信系统的有效传输起着重要的作用。检错的手段有三种,一是奇偶校验,二是累加和校验,三是循环冗余校验。循环冗余校验是这三种校验中*好的一种。同一组数据采用不同的生成多项式,将得出不同的循环冗余校验码。一般说来,一组数据的CRC值由四个因素决定,一是生成多项式,二是该生成多项式正序还是反序,三是余数初始值是什么(通常有00H和0FFH,0000H或0FFFFH,00000000H或0FFFFFFFFH的选择), 四是结果异或值是00000000H还是0FFFFFFFFH(结果异或值只在CRC32码中考虑)。当生成多项式固定,正反序固定,余数初始值固定,结果异或值也固定时,同一组数的CRC值便是**的。本书是一本用不同的计算机语言编程计算循环冗余校验码的程序集。常用的循环冗余校验码有8位的、16位的和32位的三种,每种之下又有不同的生成多项式、正序反序、余数初始值取值和结果异或值的区分。所用计算机语言有四种:分别是C语言、VB语言、C51语言和ASM51汇编语言,前两种在个人电脑或笔记本电脑上运行,后两种在51系列单片机上运行。本书共分4章,第1章是概述,介绍循环冗余校验码的概念。第2章是8位循环冗余校验码的计算程序,生成多项式①为x8 x5 x4 1, 包括正序和反序; 生成多项式②为x8 x2 x 1,包括正序。所用计算机语言包括C语言、VB语言、C51语言和ASM51汇编语言。第3章是16位循环冗余校验码的计算程序,生成多项式①为x15 x13 1 ; 生成多项式②为x16 x12 x5 1 。所用计算机语言包括C语言、VB语言、C51语言和ASM51汇编语言。第4章是32位循环冗余校验码的计算程序,生成多项式为x32 x26 x23 x22 x16 x12 x11 x10 x8 x7 x5 x4 x2 x 1,包括正序和反序,所用计算机语言包括C语言和C51语言。本书*后有三个附录,分别是介绍Visual C 6.0上机操作的附录A , 介绍单片机开发软件Keil C51使用方法的附录B 和介绍Visual Basic 6.0上机操作的附录C。电子资料包的内容,仍是以书中章节为单位。在每一章(指第2章~第4章)下,都有一个章文件夹,每章文件夹下面有节文件夹,节文件夹内有四个文件夹,分别是C语言程序夹、VB语言程序夹、C51语言程序夹和ASM51汇编语言程序夹。打开任意一个程序文件夹,里面是例子文件夹。如果是C语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.dsw的文件,在Visual C 6.0 软件已安装在电脑中的前提下,双击具有.dsw扩展名的文件就可进入Visual C 6.0 软件集成环境,也就是Visual C 6.0的编辑、编译、连接、调试、运行环境。如果是VB语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.vbp的文件,在Visual Basic 6.0 软件已安装在电脑中的前提下,双击具有.vbp扩展名的文件就可进入Visual Basic 6.0软件集成环境,也就是Visual Basic 6.0的编辑、编译、连接、调试、运行环境。如果是C51语言程序夹或ASM51汇编语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.Uv2的文件,在单片机开发软件Keil C51已安装在电脑中的前提下,双击具有.Uv2扩展名的文件,就可进入C51语言和ASM51汇编语言软件集成环境。本书适合以下人员阅读或参考。一是学习C语言、VB语言或51系列单片机课程的大、中专及高等职业学校、中等职业学校的在校学生; 二是使用这些语言的广大工程技术人员; 三是这些语言编程的初学者; 四是广大程序设计爱好者。通过这本CRC程序集的出版,希望达到如下目的: 当广大编程人员遇到CRC计算的应用问题时,能从本书中查到符合自己所需位数、所需生成多项式和合适程序语言的程序模块,从而加快编程的工作进度。由于编著者水平有限且时间仓促,书中难免存在缺点和错误,恳请读者批评指正。我的电子邮箱为dushuchun@263.net。本书电子资料包请扫描二维码下载。<br /><br /><br />编著者2017年4月<br /><br /></div>显示全部信息媒体评论评论免费在线读第1章概述
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码生成多项式