CRC差错检验法在PC机与8031单片机串行通讯中的应用
- 格式:pdf
- 大小:106.02 KB
- 文档页数:2
crc应用场景CRC(Cyclic Redundancy Check)是一种常用的错误检测技术,它可以在数据传输过程中检测出数据是否出现了错误。
CRC应用广泛,下面将从不同的场景来介绍其应用。
一、网络通信在网络通信中,数据包传输过程中可能会发生丢包、损坏等情况,为了保证数据的可靠性,在发送端对数据进行CRC校验,接收端收到数据后也进行CRC校验,如果校验结果不一致,则说明数据发生了错误。
这样可以确保数据传输的正确性。
二、存储设备在存储设备中,比如硬盘、U盘等,也需要使用CRC来检测数据是否出现错误。
由于存储设备容量较大,可能会出现部分扇区损坏导致文件无法正常读取的情况。
通过对文件进行CRC校验,在读取文件时可以及时发现错误并进行修复。
三、数字电视数字电视信号中也使用了CRC技术来保证信号的可靠性。
由于数字电视信号需要经过传输和解码等多个环节,在每个环节都需要进行CRC校验以确保信号正确传递和解码。
四、无线通信在无线通信中,由于受到干扰和衰减等因素影响,数据传输很容易出现错误。
因此,在无线通信中也需要使用CRC技术来保证数据的可靠性。
五、自动控制系统在自动控制系统中,数据的准确性对于系统的正常运行至关重要。
因此,在自动控制系统中也需要使用CRC技术来检测数据是否出现错误,以确保系统的正常运行。
六、音视频传输在音视频传输中,由于其带宽较大,需要进行压缩和解压缩等多个环节。
在每个环节都需要进行CRC校验以确保音视频信号的正确传递和解码。
七、安全领域在安全领域中,CRC技术可以用来验证文件是否被篡改。
通过对文件进行CRC校验,在文件被篡改后可以及时发现并进行修复。
总结:以上就是CRC技术在不同场景下的应用介绍。
可以看出,CRC技术是一种非常实用的错误检测技术,在很多领域都有广泛应用,并且能够有效地提高数据传输和处理的可靠性。
两个8031单片机之间的数据通信电路及
程序
下图为采纳RS-232C标准接口实现两个8031单片机之间数据通信的连接电路
相应的通信程序可用串行口中断法或串行口查询法编制。
1、用串行口中断法编制程序。
约定如下:
(a)假定甲、乙双方既可发又可收。
(b)它们的通信波特率为300波特,对6MHz晶体振荡频率,THl预置为#CCH,,并设T1为定时方式2,SM0D设置为o。
(c)双方都采纳串行口方式3,即字符路式为l位起始位,8位数据位(低位在前),1位可编程设置的第9位(下面的程序将此位清零),以及1位停止位(即设置SM0,SM1都为
1),TB8清零。
(d)欲发送或接收的数据块首地址存放78H、77H中,其中78H为首地址高字节暂存单元,77H为苜地址低字节暂存单元;数据块长度存放在72H,71H中,其中72H为长度高字节暂存单元,71H为长度低字节暂存单元。
(c)甲,乙双方都采纳串行口中断发送和接收,因此,设置EA=1,ES=]。
依照上面的约定,用串行口中断法编制通信程序如下:
以上是甲、乙两机发送接收子程序,假如甲机向乙机发送,则甲机调用发送子程序.乙机调用接收子程序,反之亦然。
2、用串行口查询法编制程序。
第21卷 第4期1998年8月鞍山钢铁学院学报Journal of Anshan Institute of I.&S.TechnologyVol.21No.4Aug.1998软件差错控制在单片机通信中的应用梁 红 王英焕 张学东(鞍山钢铁学院) (铁法矿务局职工中专技术学校) (鞍山钢铁学院)摘 要 为降低单片机通信中的误码率,保障通信的准确无误,在单片机串行双工通信的基础上,提出了采用差错控制方式,配合灵活的软件进行纠错编码的技术,并在实际应用中取得了满意效果。
关键词 通信,误码率,差错控制,软件,纠错编码分类号 TN911122 目前,工业控制中单片机通信应用场合越来越广泛,但由于工业现场各种电器设备的运行,例如电机的启动、停机,电磁继电器的吸合、断开,都会给通信线路带来冲击噪声,幅度可能相当大。
这种情况会影响单片机传输数据中的相邻几位,造成所谓“突发错”,它和信道本身引起的随机错都会影响单片机的正常通信。
衡量现场通信信道的指标之一为误码率P0(P0=错误接收码元数/接收的总码元数)。
为保证单片机之间通信正常准确,降低信道误码率,通常采用两种方法:(1)提高信道质量,降低信道本身引起的误码;(2)在信道本身误码率不理想的情况下,采用差错控制技术,在发送端对信息码进行抗干扰编码,在接收端进行译码,从而发现错误码字或自动纠正错误码字,以提高准确度。
第二种方法通常在线路收发端加装编、解码控制电路,用硬件完成纠错编码功能,在现场实时性允许的情况下,我们利用单片机软件来完成此硬件功能,从而简化电路,降低成本,而且根据现场实际情况,灵活地采用适当的编码码制。
1 差错控制的基本理论 在数据传输过程中,将发送端要发送的数据按一定规律加入一些冗余码元,并将这些冗余码元作为监督元和信息一块儿发送,接收端根据信息元与监督元之间规律进行检验,一旦发现错误,通过反馈通道要求发端重发,也可由接收端把错误校正。
这种技术有三种工作方式。
单片机串行口应用实验_双机通信一.设计要求利用两个8031单片机实现甲乙两机间的信息串行通信。
二.设计作用和目的1、注重培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。
2、了解8031各脚的功能,工作方式,计数/定时,I/O口的相关原理,掌握双机通信的原理和方法,并巩固学习单片机的相关内容知识。
3、通过软硬件设计实现两片8031单片机间的信息串行通信,以及74LS373、62256和2764等芯片的应用。
4、掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
5、掌握双机通信的原理和方法,了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。
三.具体内容1、先在发送端1号机上显示班级号,然后送到接受端2号机上显示。
2、接下来在发送端1号机上输入学号显示,然后送到接受端2号机上显示。
如:某学生的班级号为050901,学号为0502030;则:3、先在发送端1号机上显示050901,然后送到接收端2号机上显示050901。
4、接下来在发送端1号机上输入学号0502030显示,然后送到接受端2号机上显示0502030。
四.硬件设计五.实验说明1、实验时需将1号机8031串行接收信号线(RXD)连到2号机8031串行发送信号线(TXD),1号机的(TXD)连到2号机的(RXD)。
2、两台实验机必须共地。
实验接线图P3.1 GND P3.0P3.0 GND P3.18031一号机8031二号机六、画出发送与接收程序流程图七、实验步骤1、用8芯排线将8279区JB51(a-h)连接到数码管显示区的CODE,JB53(BIT0-BIT7)连接到数码管显示区的BIT。
用4芯排线将8279区的JB52(RL0-RL3)连到键盘区的KH上;JB54(KBIT0-KBIT3)连到键盘区的KL上。
8279区8279CS2连到系统译码的Y6上,8279CLK连接到固定脉冲的1MHz。
Science and Technology & Innovation ┃科技与创新·93·文章编号:2095-6835(2015)20-0093-02计算机网络通信差错检测控制关于CRC 算法的应用陈欢欢(深圳市公安边防支队,广东 深圳 518000)摘 要:在计算机网络通信中,通常会出现误码率问题,对其通信安全造成一定的影响。
其中,基于环冗余码校验(Cyclic Redundancy Check ,CRC )算法是针对计算机网络通信差错检测控制的有效方式。
对CRC 算法在计算机网络通信差错检测控制中的应用策略进行了分析。
关键词:计算机;网络通信;差错检测;CRC 算法中图分类号:TP393.06 文献标识码:A DOI :10.15913/ki.kjycx.2015.20.093在网络中传输信息必须依靠计算机实体之间的通信线路,从而提高信息传输的速度和准确性。
在实际的计算机通信过程中,信息的传输过程难免会受到一定的干扰,使得接收端接收到的信息出现偏差,即接收端的信息发生了误码的现象,从而影响了计算机通信的准确性。
1 降低通信信号传输误码率的策略如果我们用Pc 表示信号传输过程中的误码率,那么衡量信息传输过程的准确度就可以表示为Pc=错误接受码元素/接收码元素。
降低误码率的方法主要有两种:①改善数据通信线路的传输质量;②差错控制。
第一种方法主要是从硬件的角度出发,改善现有的硬件设备,引入新的通信线路和信号交换设备等。
这种方法一方面受到硬件技术的限制,另一方面由于新设备和新技术的成本较高,因此通过硬件改善信号传输质量的效果一般。
而第二种方法是通过软件来解决的。
实际上,每一种计算机通信系统中都有差错检测系统控制,通过检测通信信号的质量,然后校验和修正信号,进而优化计算机通信的传输过程。
计算机通信过程中的差错检测控制方法非常多,这里只介绍CRC 算法。
2 CRC 算法的校验规则通过以上的叙述,我们知道了CRC 算法的差错检测的主要思想和原理,那么CRC 算法是怎样对一个数据进行编码和译码的呢?具体的校验规则是使接收端接收到的校验数据能够被一个多项式所除,如果能够被除尽,那么表示代码正确;如果除不尽,那么余数的值能够对应出错位的具体位数。
1CRC 算法在单片机通信系统中的实现秦建新 路林吉(上海交通大学自动化系,上海 200240)摘 要:主要论述了在单片机通信系统中CRC 算法的设计和在单片机硬件环下的编程实现。
为了实现单片机系统之间高效无差错的数据传输,必须对数据进行检错,当传输距离较远或采用无线传输时,这就更为重要了。
给出了3种对应于51单片机硬件环境的C 语言程序的算法,并从性能和成本上进行了比较,对按位计算CRC 码的方法给出了一种通用的算法。
关键词:CRC 算法 C 语言 线形编码 生成多项式 单片机0 引言在通信系统的众多检错手段中,CRC 是非常著名的一种。
CRC—全称循环冗余校验是对数据块校验的一种高效的差错控制方法。
在单片机通信系统设计过程中,当传输距离较远或是采用无线传输时,为了保证高效而无错地传输数据,必须对数据进行检错,从性能和成本上考虑,采用CRC 校验算法远优于奇偶校验和算术和校验等方法。
CRC 的计算有两种方法,一种是采用专门的硬件,另一种就是软件方法。
对于小型低成本的51单片机系统而言,常常需要在没有相关硬件的支持下实现CRC 校验,也即通过软件来完成CRC 计算(CRC 算法)。
这里给出了3种算法,从性能和成本上考虑,它们的适用范围也稍有不同:第一种适用于单片机程序存储空间较小但CRC 计算速度要求不高的情况;第二种适用于程序存储空间较大且CRC 计算速度要求较高的情况;最后一种适用于程序存储空间不太大,且CRC 计算速度要求适中的情况。
1 CRC 算法的原理CRC 校验主要是利用线形编码理论,基本思想是:在发送端,根据要传送的n 位二进制数据码,以一定的规则产生一个用来进行校验的r 位校验码,即CRC 码,把它附加在数据码后边,从而形成一个新的(n+r)位二进制码序列并发送出去;在接收端,根据数据码和CRC码之间所遵循的规则进行校验,这样就可以确定数据在传送过程中是否出错了。
假设n位二进制数据序列110[]n n D d d d d −=",r位二进制校验码110[]n n R r r r r −=",我们得到的n+r位序列110110[]n n n n M d d d d r r r r −−=""。
CRC校验及其软件实现姚七栋;张春玉【摘要】数据通信技术是计算机网络技术发展的基础,已经成为现代生活中必不可少的一部分.但通过通信信道传输的数据往往会有差错的产生,而且差错的产生是不可避免的,我们的任务是分析差错产生的原因与差错类型,研究检查是否出现差错及如何纠正差错.循环冗余码(CRC)是目前应用最广的检错纠错编码方法之一.论述了CRC的教学原理及其在数据通信中的作用,并提出了用8031汇编语言实现CRC校验的程序设计.【期刊名称】《现代电子技术》【年(卷),期】2006(029)013【总页数】3页(P67-68,71)【关键词】CRC校验;信道;误码;检错【作者】姚七栋;张春玉【作者单位】陕西财经职业技术学院,陕西,咸阳,712000;陕西财经职业技术学院,陕西,咸阳,712000【正文语种】中文【中图分类】TN911在计算机通信过程中,由于信道上存在的各种复杂因素(例如:冲击噪声和热噪声等)的影响,所传输的信号将受到不同程度的干扰,严重时会造成误码以致阻断通信。
所以应该在接收方检查所接收的数据是否正确,可采用多种检测方法。
其中循环冗余校验码(CRC校验)是目前在计算机网络通信及存储器等方面应用最为广泛的一种校验编码方法,是一种强有力的检测手段。
人们将该技术用于多处数据通信系统中,收到了令人满意的效果。
本文从CRC校验的教学原理及汇编语言实现两方面入手,详细介绍了CRC校验方法。
1 CRC校验的教学原理CRC检错方法的工作原理是:将要发送的数据比特序列当做一个多项式K(X)的系数,在发送端用收发双方预先约定的生成多项式G(x)去除,求得一个余数多项式R(x)。
将余数多项式加到数据多项式之后(称为T(X))发送到接收端。
在接收端用同样的生成多项式G(x)去除接收到的数据多项式T′(X),如果除得尽,表明无差错,即T(X)= T′(X);如果除不尽,表明有差错,即T(X)≠T′(X);余数将指明出错位所在位置。
CRC校验码在单片机中的程序实现的求取由单片机嵌入式系统与微机组成的工业检测和数据采集系统中,计算机与单片机之间经常需要进行数据通信。
在数字通信过程中,干扰有可能使接收到的二进制数和发送的不一致,造成'0'和'1'互变的差错。
一个实用的通信系统必需能发现这种差错,并加以纠正或给出重新发送信息。
CRC(CyclICRedundancy Code循环冗余码),也称多项式编码。
是一种检错效率高、原理简单、易于实现的通信编码,是目前在数字通信领域应用最为广泛的一种检验方式。
如16位的CRC-CCITT标准可以检测出所有的单位错、双位错、奇位数错及小于等于16位的突发错,大于17位的突发错检错率为99.9984%[1]。
可见,CRC码的检错率要大大高于一般的奇偶校验。
因此CRC校验可以应用于重要数据的通信场合,如下位机运行状态的检测、运行模式或参数的在线重设置等。
对于8位的单片机系统,要实现CRC通信就必须编写生成CRC码的指令程序,且由于单片机的程序存储器很少、运算速度也比较低,因此要求程序代码尽量少,算法必须简单。
下面将以CRC-CCITT标准为例来介绍CRC通信码的单片机实现过程。
1 CRC校验码的构成求得余式R(x),使等式左端的代数式恰为CRC校验式G(x)的整数倍。
则将其与待发送的数据多项式xr·M(x)相加得到的r+k次多项式的各个系数(mk-1,mk-2,…,m1,m0,rr-1,rr-2,…,r1,r0)作为编码一起发送,其中高k位是信息位,低r位是附加校验位。
在数据接收端,再对接收到的信息码进行校验,如能被同一个G(x)整除,则表明通信正确;若余数不为0,表示数据传输有误,从而达到检错的目的。
CRC校验虽然不能100%检测出错误,但它的漏检率相当低。
漏检概率和所选取的校验标准相关,国际上已有多种CRC校验式标准。
其中8位的CRC码标准有CDT约定,其校验式为G(x)=x8+x2+x+1;16位的标准有CCITT(国际电报电话咨询委员会推荐)标准G(x)=x16+x12+x5+1,和IBM公司提出的CRC-16标准G(x)=x16+x12+x2+1;校验错误效率最高的是具有32位CRC校验码的2 多字节信息序列CRC码的快速算法假设需要传送的一组信息码N为k个字节二进制序列:Nk=[n1 n2……nk]其中的ni为信息码中的各个字节。
CRC的校验原理及其软件实现随着数据采集系统的功能日益强大,以及微型计算机的普及,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。
特别是在大规模高精度数据采集系统中,对数据进行分析和计算将占用很大一部分单片机的资源,可以将采集到的数据通过串行通讯方式传送给PC机,由PC机来完成数据的处理工作。
但是由于传输距离、现场状况等诸多可能出现的因素的影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。
为了防止错误所带来的影响,在数据的接收端必须进行差错校验。
虽然差错校验也可以完全由硬件来承担,但由于单片机和PC都具有很强的软件编程能力,这就为实施软件的差错校验提供了前提条件,而软件的差错校验有经济实用并且不增加硬件开销的优点。
1 CRC法的原理传统的差错检验法有:奇偶校验法,校验和法,行列冗余校验法等。
这些方法都是在数据后面加一定数量的冗余位同时发送出去,例如在单片机的通讯方式2和3中,TB8就可以作为奇偶校验位同数据一起发送出去,在数据的接收端通过对数据信息进行比较、判别或简单的求和运算,然后将所得和接收到的冗余位进行比较,若相等就认为数据接收正确,否则就认为数据传送过程中出现错误。
但是冗余位只能反映数据行或列的奇偶情况,所以这类检验方法对数据行或列的偶数个错误不敏感,漏判的概率很高。
因此,此种方法的可靠性就差。
循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。
它是利用除法及余数的原理来作错误侦测(Error Detecting)的。
实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CR C值不同,则说明数据通讯出现错误。
由于这种方法取得校验码的方式具有很强的信息覆盖能力,所以它是一种效率极高的错误校验法。
错误的概率几乎为零。
在很多的仪器设备中都采用这种冗余校验的通讯规约。
哈尔滨理工大学荣成学院单片机原理课程设计题目:PC与单片机的串口通信班级:自动化11—3姓名:学号:题目简介80C51有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND.第2脚的RXD.第3脚的TXD。
系统结构图原理硬件介绍一AT89C52二MAX232芯片三9针串口软件设计一工作方式寄存器TMOD二串口控制寄存器SCON设置三LCD1602显示设置实验原理图流程图实验源程序课设总结参考文献串口通信的概念非常简单,串口按位发送和接收字节。
尽管比按字节的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成,分别是地线、发送、接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通信的端口,这些参数必须匹配。
a,波特率:这是一个衡量通信速度的参数。
它表示每秒钟传送的位的个数。
例如300波特表示每秒钟发送300个位。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。
CRC算法在计算机网络通信差错检测控制中的应用张岚【摘要】CRC算法在对数据包进行检测时候使用的是for循环语句,对每一个字节进行计算,因此计算相对来说比较简单,大大的节省了校验的速度,相对比的算法来说,CRC算法所占的储存空间虽然会有所增加,但是随着信息产业的不断发展,硬件储存容量的不断增加,这种牺牲空间换取计算时间和计算速度的方式是非常值得的.本文则对CRC算法在计算机网络通信差错检测控制中的应用策略分析.【期刊名称】《黑龙江科技信息》【年(卷),期】2015(000)018【总页数】1页(P37)【关键词】CRC算法;计算机;网络通信;误码率;差错检测控制【作者】张岚【作者单位】内蒙古电子信息职业技术学院计算机科学系,内蒙古呼和浩特010000【正文语种】中文计算机网络的目的就是通过数据通信线路将不同位置的计算机进行连接,在特定的计算机通信协议下实现网络连接和共享的过程。
在网络中进行信息传输,必须依靠计算机实体之间的通信线路,从而提高信息传输的快速和准确。
在实际的计算机通信过程中,信息的传输过程难免会受到一定的干扰,使得接收端接受到的信息发生偏差,即接收端的信息发生了误码的现象,从而影响了计算机通信的准确性。
计算机网络在完成信息通信的时候,首先会把较长的报文拆解成一个个更小的、等长的数据段,但是为了保证报文传输的完整和信息的内部顺序,需要在每个数据段加上一个特殊标志——首部(Head),而在数据段的末尾加上一个校验码,这个过程就把每一个独立的数据段变成了一个小的数据包。
所以说,数据包是计算机通信网络中最小的传输单位,接收端通过接受到数据包完成相关信息的控制和传输[1]。
数据包经过编译的过程以后如下图所示,其中SOH这个字节段包含了很多数据包的关键信息,如源站地址、目的站地址和同步信息等,而校验码是通过CRC 算法计算出来一个“识别码”,下文中将会详细的介绍这个校验码的计算过程。
具体的传输协议为,发送端的计算机根据算法计算出数据的校验码,然后把这个校验码加到数据的尾部。
浅析差错操纵技术在串行通信协议中的应用1、前言在自动化操纵系统(如单片机和DSP等嵌入式系统)中,串行通信是实现两端设备数据交换的一种非常重要且普遍使用的通信方式。
串行通信在数据量要求不是特别高的情况下,因其具有硬件设备简单、成本低廉、成熟度高和编码复杂程度低等优点,为过去和现在的自动化操纵系统作出了巨大的贡献,在未来一段时期仍将发挥不可低估的作用。
串行通信中,由于实际信道的传输特性不尽理想以及噪声干扰,使得通信接收端易产生误码。
为了保证通信可靠,实现两端设备数据正确交换,通信协议中需要采取差错操纵技术,实现差错检测和纠正,改善通信系统的传输可靠性。
本文介绍了差错操纵技术在串行通讯协议中的应用。
2、差错操纵概述2.1差错操纵差错就是在通信接收端收到的数据与发送端实际发出的数据出现不一致的现象。
差错出现的原因有多种,如信号在物理信道中传输时,线路本身电器特性造成的随机噪声、信号幅度的衰减、频率和相位的畸变、电器信号在线路上产生反射造成的回音效应、相邻线路间的串扰等造成的信号失真;如大气中的闪电、开关的跳火、外界强电流磁场的变化、电源的波动等各种外界因素造成的信号失真等。
在串行数据通信中,信号失真将会使接收端收到的二进制数位和发送端实际发送的二进制数位不一致,从而造成由“0”变成“1”或由“1”变成“0”的差错。
物理层传输链路受到干扰带来的数据差错无法被物理层识别,因而在数据链路层通信协议中采取差错操纵技术,实现差错检测、数据纠正是十分必要的。
差错操纵是指在数据通信过程中能发现或纠正差错,把差错限制在尽可能小的同意范围内。
差错检测是通过差错操纵编码来实现的;而差错纠正是通过差错操纵方法来实现的。
2.2差错操纵编码差错操纵编码是用以实现差错操纵的编码,可分为检错码和纠错码。
检错码是指能自动发现差错的编码,如奇偶校验码、循环冗余校验码(CRC)等。
纠错码是指不仅能发现差错而且能自动纠正差错的编码,如正反码、海明码等。
收稿日期:2002-02-14
CRC差错检验法在PC机与8031单片机串行通讯中的应用The Application on Series Communication Between PC and Microprocessor Using CRC Error Detecting Method
刘 涛 廉海涛 马积勋
Liu T ao Lian Haitao M a Jix un
(西安交通大学电气工程学院 西安 710049)
(Elec t ri cal Engineering Schoo l,Xi'an Jiaot ong Uni v ersit y,710049)
摘 要 通过对不同校验方法的分析,介绍了一种适合P C机与8031单片机通讯差错校验的CR C方法并给出了其实现的软件流程图。
关键词 数据传输 差错校验 CRC
随着数据采集系统的功能日益强大,以及微型计算机的普及,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。
特别是在大规模高精度数据采集系统中,对数据进行分析和计算将占用很大一部分单片机的资源,可以将采集到的数据通过串行通讯方式传送给PC机,由PC机来完成数据的处理工作。
但是由于传输距离、现场状况等诸多可能出现的因素的影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。
为了防止错误所带来的影响,在数据的接收端必须进行差错校验。
虽然差错校验也可以完全由硬件来承担,但由于单片机和PC都具有很强的软件编程能力,这就为实施软件的差错校验提供了前提条件,而软件的差错校验有经济实用并且不增加硬件开销的优点。
本文就是基于多功能应变测试系统而编写的主机和单片机之间的RS-485通讯系统,介绍了一种软件差错校验方案循环冗余差错校验法。
1 C RC法的原理
传统的差错检验法有:奇偶校验法,校验和法,行列冗余校验法等。
这些方法都是在数据后面加一定数量的冗余位同时发送出去,例如在单片机的通讯方式2和3中,TB8就可以作为奇偶校验位同数据一起发送出去,在数据的接收端通过对数据信息进行比较、判别或简单的求和运算,然后将所得和接收到的冗余位进行比较,若相等就认为数据接收正确,否则就认为数据传送过程中出现错误。
但是冗余位只能反映数据行或列的奇偶情况,所以这类检验方法对数据行或列的偶数个错误不敏感,漏判的概率很高。
因此,此种方法的可靠性就差。
循环冗余码校验英文名称为Cy clical Redundan-cy Check,简称CRC。
它是利用除法及余数的原理来作错误侦测(Erro r Detecting)的。
实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC 相比较,若两个CRC值不同,则说明数据通讯出现错误。
由于这种方法取得校验码的方式具有很强的信息覆盖能力,所以它是一种效率极高的错误校验法。
错误的概率几乎为零。
在很多的仪器设备中都采用这种冗余校验的通讯规约。
根据应用环境与习惯的不同,CRC又可分为以下几种标准:
CRC-12码; CRC-16码;
CRC-CCITT码;!CRC-32码。
CRC-12码通常用来传送6-bit字符串。
CRC-16及CRC-CCITT码则是用来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。
CRC-32码大都被采用在一种称为Po int-to-Point的同步传输中。
2 C RC校验码的生成过程
我们以最常用的CRC-16码作为例子进行说明。
冗余循环码包括2个字节,即16位二进制数。
先预置16位寄存器全部为1,再逐步把每8位的数据信息进行处理。
在进行CRC计算时只用8位数据位,起始位和停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC计算。
在计算CRC码时,8位数据与寄存器的数据相异或,得到的数据向低位移一位,用0填补最高位,再检查最低位。
如果最低位为1,把寄存器的内容与预置数相异或;若最低位为0,则不进行异或计算。
这个过程一直重复8次,第8次移位后,下一个8位数据再与现在寄存器中的内容相异或,这个过程
21
《现代电子技术》2002年第4期总第135期
单 片 机
和以上一样重复8次。
当所有的信息处理完后,最后寄存器中的内容即为CRC 码。
这个CRC 码将由发送设备跟在数据的最后一起发送。
计算CRC 的步骤为:
(1)预置16位寄存器位十六进制数FFFF (即全为1)。
称此寄存器位CRC 寄存器。
(2)把第一个8位数据与16位寄存器的低位相异或,将结果放于CRC 寄存器中;
(3)把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
(4)如果最低位为0,重复第三步(再次移位);如果最低位为1,CRC 寄存器与多项式码进行异或;(5)重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6)重复步骤2到5,进行下一个8位数据的处理;
(7)最后得到的CRC 寄存器即为CRC
码。
图1 单片机接收CRC 流程图
3 C RC 法在收发双方的软件实现
根据前面给出的CRC 码的生成过程,我们可以编制CRC 校验程序,根据通讯协议通过RS232-RS485电平转换接口和M AX 485,PC 机的串口与单片机的串行口进行串行异步通讯,需要发送的数据信息位8位,选取异或多项式为A 001(Hex )。
8031单片机CRC 算法的程序流程图如图1所示。
同时给出汇编语言的源程序。
CRC 源代码:
CRCH,CRCL,CRCD 分别代表CRC 校验码的高8位,低8位和要处理的数据。
CRCPR O: NO P
CRCIN 1: M O V M OT IM ES,#00H
;设置寄存器,右移8次结束
M O V A ,CRCL
XRL A ,CR CD ;与处理数异或M O V CR CL ,A
CRCRU :CLR C ;右移一位
M O V A ,CRCH RRC A
M O V CR CH,A M O V A ,CRCL RRC A
M O V CR CL ,A
M O V A ,M O T IM ES ;判断循环次数CJN E A ,#08H,CR CR U N 1RET
CRCRU N 1:M O V A ,CRCL
CL R C RR C A
JN C CR CR U N E M O V A ,CRCL XR L A ,#01H M O V CRCL ,A M O V A ,CRCH XR L A ,#0A O H M O V CRCH,A
CRCRU N E:SJM P CRCRU
PC 机的CRC 程序思路与单片机完全相同,信息的处理、发送和接收可以用任何一种高级设计语言来实现。
本文主要讨论了用CRC 法进行差错校验的问题,接收方如果发现接收错误,则返回信息,要求主机重发数据;如果没有发现错误,则不反馈信息。
由此可以提高收发效率。
实践证明CRC 法在PC 机与8031
单片机异步通讯的差错检验中应用是十分有效的,可以在实际中得到广泛应用。
参 考 文 献
1 薛钧义,张彦斌.M CS -51系列单片微型计算机
及其应用.西安:西安交通大学出版社,19902 姚燕南,薛钧义.微型计算机原理.西安:西安电
子科技大学出版社,1995
Abstract T hr o ug h analy zing different er r or detecting metho ds ,a new CRC method is intr oduced w hich is fitted in the err or
det ect ing o f the communicatio n bet ween PC and micro pro cessor ,t hen the so ftwa re flow chart is giv en .
Keywords D ata T r anmissio n,Err or Detecting ,CRC
作者简介 刘 涛 西安交通大学电气学院电子学教研室研究生,主要从事电子测量技术领域的应用研究。
马积勋 西安交通大学电气工程学院电子学教研室,教授,主要从事电子测量技术及电子技术应用,侧重于模拟信号的处理及电子测量技术在各领域的应用。
22
CRC 差错检验法在PC 机与8031单片机串行通讯中的应用。