您当前的位置: 首页 > 贸易知识

探讨采用单片机通讯时信息差错的自检与校正

2019-03-01 13:42:17

【摘要】MCS-51单片机为用户提供了一个全双工的串行接口,可以应用于各种情况的串行数据传送。尤以使用异步串行通讯更加普遍野生红茶
。异步串行通讯虽然速度较慢,但是经济实用,传送和接收又不需要严格保持同步,因此,异步串行通讯现已大量地应用于计算机接口技术当中。

【关键词】单片机; 串行通讯; 检验; 纠错

引言

在控制工程和其他运用电子系统中, 单片机得到了广泛应用, 它为用户提供了一个全双工的串行接口, 尤以异步串行通讯更占优势, 虽然异步串行通讯速度较慢, 由于在数据的发送和接收过程中不需要保持严格同步, 现已大量地应用于计算机接口技术当中。但是, 异步串行通讯由于距离长, 以及单片机在电气、结构、环境及干扰等方面的原因, 常会使传送的数码信息产生过失, 要保证单片机系统的正确、可靠, 必须对这些传送的数码信息进行自动的检错与纠错。

我们经常使用的通讯一般是串口,经常使用的串口通讯有三种,一种是TTL,一种是232,一种是485,这三个是用得最多的,其他的通讯五花八门,基本那些大公司,像飞利浦,三菱,都有自己的一套,而且还是不透明的,使用他们的还得交费用。TTL和232是电平编码,TTL的1就是5V,0就是0V,而232电平1是负电压,0是正电压。串口上每次只能发送一名数据,一个字节有八位,一般发送还有起始位和结束位,还可以选择校验位,我们只要把数据一位一位的送到总线上就可以了,一位的数据要在总线上保持多长时间,这个就是波特率控制了。接收方按相同的波特率,就可以收到相同数据了。这个就是一帧数据。

1海明校验原理

这是由Richard Hamming于1950年提出、目前还被广泛采取的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一名出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相干的几个校验位的值产生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

海明校验则克服了前述单片机串行通讯中的缺点, 它不仅可以同时测量出一组信息中的两重错, 而且能够定位和自动纠正一重错, 既经济实用, 又具有高可靠性。海明校验原理为在一组代码中加人一定位数的校验位, 使每一位信息都参加几组不同码元的奇偶校验。如果有一名信息出错, 就会引起有关的几组奇偶校验结果出错, 这样就可以根据哪些组校错,来肯定出错误信息的位置及出错性质, 从而自动进行纠正。

下面举例说明海明校验原理, 并讨论它为什么不仅能检错, 而且可以定位和自动纠正一重错。假定有一个4位的二进制数码需要传输:

M=A4A3A2A1为了实现海明校验, 增加了三位奇偶校验位Bl ,B2,B3 , 于是构成新的代码有七位, 其中三位海明校验位的排列位置有一定规则。海明校验位所处的位置归纳起来在2i 处( i=0,1,2, … ), 即B1 置于20=1处,B2置于21=2处,B3置于22=4处,这样一来, 需传输的数码就变成表1 中所示的海明码, 由于采取了三位奇偶校验位, 所以这些编码要编组进行奇偶校验。

如果采用奇性校验, 则编码方法如表2 所示, 其中,B1,B2, B3的取值根据各组中“1” 的个数而定。例如: A 组中A1,A2,A3 的“l”的个数是偶数时,Bl 取“1” , 否则取“0” 。也就是说, 海明奇偶校验位B1,B2 ,B3 必须保证各组中“l”的个数均为奇数。在正确无误的通讯传送情况下,A、B、C 三次校验的结果都应该是奇性的。如果三次校验中有一次或几次出现偶性蒸汽洗车机
, 则说明传送中有错码, 现在以一名错的情况进行分析, 由于两个以上码位同时出错的几率极低。假定A、B 两组校验结果为偶性,C 组校验结果为奇性, 即A、B 两组中有错码, 而C 组中没有错码, 那末由表2 可判定, 必然是A! 码位错了, 因为只有A, 是C 组中没有而A、B 两组中共有的。再假定C 组校验结果为偶性,A、B 两组校验结果为奇性, 由表2 可知, 一定是B3 码位错了, 因为, 只有B3码才是C 组所独有的, 信息没有错, 仅是校验位B3 在传送过程中出了错。通过三组奇性校验, 只考虑一位出错情况, 可以唯一地判定是哪一个码产生了错码, 如果校验的结果为奇性( 没有错码)用“0’ 表示, 校验的结果为偶性( 有错码)用“1” 表示, 那么, 用三次校验的结果, 就可以自动判断7 位海明码中任一错码位。例如,校验结果为CB A=011, 则C 组中无错码,A、B 两组中有错, 则说明是AI 码错了, 而AI 码恰好位于海明码的第三位, 与CB A 的结果“0 11” 相吻合, 又如C BA=010, 即C、A 两组中没有错码筑志红中麻将
, 只有B 组中有错码, , 则说明是B2 码错了, 而B2码在海明码中的位置与校验结果一致, 这样, 就可以实现毛病的自动定位并予以纠正。只有当校验结果CBA=000, 才表示传输没有毛病。

2软件实现

在单片机系统中实现海明校验, 就必须完成编码、译码、检测和纠错这样几个功能, 在传送的一方只需完成编码任务, 而接收一方需要完成译码、检错和纠错三个步骤, 现分述如下。

2.1编码阶段

在计算机硬件中,编码(coding)是指用代码来表示各组数据资料,使其成为可利用计算机进行处理和分析的信息。代码是用来表示事物的记号,它可以用数字、字母、特殊的符号或它们之间的组合来表示将数据转换为代码或编码字符,并能译为原数据情势。是计算机书写指令的进程,程序设计中的一部分。在地图自动制图中,按一定规则用数字与字母表示地图内容的过程,通过编码,使计算机能识别地图的各地理要素。

仍以传送4位信息为例。首先, 将需要传送的信息取出, 并按海明校验要求完成编码工作。假设N UM I 是需要传送的信息寄存地址, 编码则可以有程序PROGI 来完成:

PROGI;MOV,DPTR,NUMI

MOVX,A,@,DPTR

ANL,A,#OFH

......

RL,A

MOV B,A

2.2 译码

检错和纠错单片机从串行口接到一个海明码后, 首先对其进行译码, 再进行检错和纠错, 程序如下:

PROG2: MOV,DPTR,NUM2

MOVX,A,@,DPTR

MOV,B,#00H

ANL,A#55H

JB,0D0H,NEXTI

SETB,OF1H

....手机打鱼平台
..

RLC,A

ANL,A,#OFH,RET

结论

目前, 在单片机串行通讯中, 检验的方式大多采用奇偶检验的方法, 这种方法只能判断错误的产生, 然后要求重新发送( ARQ), 它不能指出错误所在, 更不能纠正错误, 一旦在通讯中发生错误信息, 极易使通讯系统处于死机状态, 这就极大地阻碍了单片机串行通讯的广泛运用。在单片机通讯中若以该方式为主,再结合其他的检验方式, 则能取得更满意的效果, 同时, 还可以提高系统的可靠性和稳定性。

参考文献

【1】何为民.低功耗单片微机系统设计IM] J匕京:北京航空航天大学出版社,19 9 3.

【2】通讯的安全一理论与技术[M] 西安: 西安电子科技大学出版社,1999

作者简介;唐宇(1983.8-),女,四川达州人,西华师范大学本科,江西省科技师范大学在职研究生,助理讲师乙型流感症状吃什么药
,单位:江西省电子信息技师学院,研究方向:信号与信息处理,关于单片机的通讯

推荐阅读
图文聚焦