新書推薦:
![大哲学家](http://103.6.6.66/upload/mall/productImages/24/27/9787522528809.jpg)
《
大哲学家
》
售價:HK$
89.7
![乌程汉简萃编](http://103.6.6.66/upload/mall/productImages/24/26/9787547933510.jpg)
《
乌程汉简萃编
》
售價:HK$
112.7
![资治通鉴:帝王的镜子](http://103.6.6.66/upload/mall/productImages/24/26/9787559486417.jpg)
《
资治通鉴:帝王的镜子
》
售價:HK$
66.7
![从中亚古道到新大陆:哈佛汉学史话(在哈佛见证百年学术史的风云变迁)](http://103.6.6.66/upload/mall/productImages/24/27/9787532189960.jpg)
《
从中亚古道到新大陆:哈佛汉学史话(在哈佛见证百年学术史的风云变迁)
》
售價:HK$
78.2
![贞观政要:天可汗的时代](http://103.6.6.66/upload/mall/productImages/24/26/9787559486424.jpg)
《
贞观政要:天可汗的时代
》
售價:HK$
66.7
![左传:诸侯争盟记](http://103.6.6.66/upload/mall/productImages/24/26/9787559486448.jpg)
《
左传:诸侯争盟记
》
售價:HK$
55.2
![财之道丛书·特许公司600年:从冒险公司到东印度公司](http://103.6.6.66/upload/mall/productImages/24/28/9787213114960.jpg)
《
财之道丛书·特许公司600年:从冒险公司到东印度公司
》
售價:HK$
89.7
![看见不同](http://103.6.6.66/upload/mall/productImages/24/27/9787521762921.jpg)
《
看见不同
》
售價:HK$
67.9
|
編輯推薦: |
(1)本书内容丰富,涉及不同CRC位数、生成多项式和程序语言,方便读者各取所需。(2)通俗易懂,实例典型,既适合初学者,也适合有一定编程基础的爱好者和技术人员。(3)实践性强,所有实例均已通过验证,并提供完整的电子资料包,读者可以直接运行程序。
|
內容簡介: |
本书是一本用多种不同计算机语言编程计算循环冗余校验码的程序集,全书共分4章。第1章是概述,介绍循环冗余校验码的概念。第2章是8位循环冗余校验码的计算程序,所用计算机语言包括C语言、VB语言、C51语言和ASM51汇编语言。第3章是16位循环冗余校验码的计算程序,所用计算机语言同第2章。第4章是32位循环冗余校验码的计算程序,所用计算机语言包括C语言和C51语言。 通过本CRC程序集的出版,希望达到如下目的:当广大编程人员遇到CRC计算的问题时,能从本书中查到符合自己所需CRC位数、生成多项式和程序语言的程序模块,从而加快编程进度。
|
關於作者: |
作者简介:杜树春,男,高级工程师。1977年吉林大学物理系毕业,现已退休。曾先后供职于(西安)兵器工业部205研究所和(太原)山西省自动化研究所。曾编著《单片机C语言和汇编语言混合编程实例详解》《单片机应用系统开发实例详解》《单片机C语言和汇编语言混合编程实践》《单片机与外围器件接口实例详解》《基于Proteus和Keil C51的单片机设计与仿真》《基于Proteus的数字集成电路快速上手》《基于Proteus的模拟电路分析与仿真》《基于Proteus的电路基础知识快速上手》《51单片机开发快速上手》《集成运算放大器应用经典实例》《常用电子元器件使用指南》《51单片机很简单--Proteus及汇编语言入门与实例》《实用有趣的C语言程序》等多部图书。
|
目錄:
|
目录
第1章概述
1.1循环冗余校验简介
1.2循环冗余校验的基本过程
1.3使用循环冗余校验码的一个例子
1.3.1Modbus通信协议通信格式说明
1.3.2循环冗余码CRC16码的用法
第2章CRC8码的计算
2.1用手工计算CRC8码
2.2用程序计算CRC8码:生成多项式gx=x8 x5 x4 1正序
2.2.1C语言
2.2.2VB语言
2.2.3C51语言
2.2.4ASM51汇编语言
2.3用程序计算CRC8码:生成多项式gx=x8 x5 x4 1反序
2.3.1C语言
2.3.2VB语言
2.3.3C51语言
2.3.4ASM51汇编语言
2.4用程序计算CRC8码:生成多项式gx=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码:生成多项式gx=0A001H
3.2.1C语言
3.2.2VB语言
3.2.3C51语言
3.2.4ASM51汇编语言
3.3用程序计算CRC16码:生成多项式gx=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 C6.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语言程序
参考文献
|
內容試閱:
|
前言自从人类进入信息社会后,有线的或无线的通信网络便遍布全球。在通信系统中,由于存在干扰或信道传输特性不好,容易对信道造成不良的影响。通过对所传输的数字信息进行特殊的处理(如差错控制编码),即可实现对传输信息中错误的自动检验,称为检错。检错对数字通信系统的有效传输起着重要的作用。检错的手段有三种,一是奇偶校验,二是累加和校验,三是循环冗余校验。循环冗余校验是这三种校验中最好的一种。同一组数据采用不同的生成多项式,将得出不同的循环冗余校验码。一般说来,一组数据的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 C6.0上机操作的附录A , 介绍单片机开发软件Keil C51使用方法的附录B 和介绍Visual Basic 6.0上机操作的附录C。电子资料包的内容,仍是以书中章节为单位。在每一章(指第2章~第4章)下,都有一个章文件夹,每章文件夹下面有节文件夹,节文件夹内有四个文件夹,分别是C语言程序夹、VB语言程序夹、C51语言程序夹和ASM51汇编语言程序夹。打开任意一个程序文件夹,里面是例子文件夹。如果是C语言程序夹下的例子文件夹,打开后,多个文件中必有扩展名是.dsw的文件,在Visual C6.0 软件已安装在电脑中的前提下,双击具有.dsw扩展名的文件就可进入Visual C6.0 软件集成环境,也就是Visual C6.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。本书电子资料包请扫描二维码下载。
编著者2017年4月
第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码的多项式gx又叫生成多项式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校验时,通信的发送方和接收方用同一个生成多项式gx,多项式正序反序,初始值也相同,并且gx的首位和最后一位的系数必须为1。CRC检验的处理方法是: 发送方用发送数据的二进制多项式tx除以gx ,得到余数yx作为CRC校验码。校验时,以计算的校正结果是否为0为依据,判断数据帧是否出错。设生成多项式是r阶的最高位是x^r ,具体步骤描述如下。发送方:1 在发送的m位数据的二进制多项式tx后添加r个0 ,扩展到m r位,以容纳r位的校验码,追加0后的二进制多项式为Tx。2 用Tx除以生成多项式gx,得到r位的余数yx,它就是CRC校验码。3 把yx追加到tx后面,此时的数据sx就是包含了CRC校验码的待发送字符串; 由于sx=txyx,因此sx肯定能被gx除尽。接收方:1 接收数据nx,这个nx就是包含了CRC校验码的m r位数据;2 计算nx除以gx,如果余数为0则表示传输过程没有错误,否则表示有错误。从nx去掉尾部的r位数据,得到的就是原始数据。1.3使用循环冗余校验码的一个例子Modbus通信协议是工业控制领域实现单个电子控制器互联的通信协议,实际上它已成为一种通用的工业标准。硬件采用RS232串行口或RS485串行口,通信方式为主从式半双工通信,主机呼叫从机地址,从机应答通信。数据帧共10位,1个起始位,8个数据位,1个停止位,无校验。波特率: 9600或19200。图11是采用Modbus通信协议的总站、分站通信系统结构示意图。以下介绍Modbus通信协议的通信格式。
图11采用Modbus通信协议的总站、分站通信系统结构示意图
|
|