论文部分内容阅读
【摘要】MCS-51单片机为用户提供了一个全双工的串行接口,可以应用于各种情况的串行数据传送。尤以使用异步串行通讯更为普遍。异步串行通讯虽然速度较慢,但是经济实用,传送和接收又不需要严格保持同步,因此,异步串行通讯现已大量地应用于计算机接口技术之中。
【关键词】单片机; 串行通讯; 检验; 纠错
引言
在控制工程和其他应用电子系统中, 单片机得到了广泛应用, 它为用户提供了一个全双工的串行接口, 尤以异步串行通讯更占优势, 虽然异步串行通讯速度较慢, 由于在数据的发送和接收过程中不需要保持严格同步, 现已大量地应用于计算机接口技术之中。但是, 异步串行通讯由于距离长, 以及单片机在电气、结构、环境及干扰等方面的原因, 常会使传送的数码信息发生差错, 要保证单片机系统的正确、可靠, 必须对这些传送的数码信息进行自动的检错与纠错。
我们常用的通讯一般是串口,常用的串口通讯有三种,一种是TTL,一种是232,一种是485,这三个是用得最多的,其他的通讯五花八门,基本那些大公司,像飞利浦,三菱,都有自己的一套,而且还是不透明的,使用他们的还得交费用。TTL和232是电平编码,TTL的1就是5V,0就是0V,而232电平1是负电压,0是正电压。串口上每次只能发送一位数据,一个字节有八位,一般发送还有起始位和结束位,还可以选择校验位,我们只要把数据一位一位的送到总线上就可以了,一位的数据要在总线上保持多长时间,这个就是波特率控制了。接收方按相同的波特率,就可以收到相同数据了。这个就是一帧数据。
1海明校验原理
这是由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
海明校验则克服了前述单片机串行通讯中的缺点, 它不仅可以同时测量出一组信息中的两重错, 而且能够定位和自动纠正一重错, 既经济实用, 又具有高可靠性。海明校验原理为在一组代码中加人一定位数的校验位, 使每一位信息都参加几组不同码元的奇偶校验。如果有一位信息出错, 就会引起有关的几组奇偶校验结果出错, 这样就可以根据哪些组校错,来确定出错误信息的位置及出错性质, 从而自动进行纠正。
下面举例说明海明校验原理, 并讨论它为什么不仅能检错, 而且可以定位和自动纠正一重错。假设有一个四位的二进制数码需要传输:
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)是指用代码来表示各组数据资料,使其成为可利用计算机进行处理和分析的信息。代码是用来表示事物的记号,它可以用数字、字母、特殊的符号或它们之间的组合来表示将数据转换为代码或编码字符,并能译为原数据形式。是计算机书写指令的过程,程序设计中的一部分。在地图自动制图中,按一定规则用数字与字母表示地图内容的过程,通过编码,使计算机能识别地图的各地理要素。
仍以传送四位信息为例。首先, 将需要传送的信息取出, 并按海明校验要求完成编码工作。假设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-),女,四川达州人,西华师范大学本科,江西省科技师范大学在职研究生,助理讲师,单位:江西省电子信息技师学院,研究方向:信号与信息处理,关于单片机的通讯
【关键词】单片机; 串行通讯; 检验; 纠错
引言
在控制工程和其他应用电子系统中, 单片机得到了广泛应用, 它为用户提供了一个全双工的串行接口, 尤以异步串行通讯更占优势, 虽然异步串行通讯速度较慢, 由于在数据的发送和接收过程中不需要保持严格同步, 现已大量地应用于计算机接口技术之中。但是, 异步串行通讯由于距离长, 以及单片机在电气、结构、环境及干扰等方面的原因, 常会使传送的数码信息发生差错, 要保证单片机系统的正确、可靠, 必须对这些传送的数码信息进行自动的检错与纠错。
我们常用的通讯一般是串口,常用的串口通讯有三种,一种是TTL,一种是232,一种是485,这三个是用得最多的,其他的通讯五花八门,基本那些大公司,像飞利浦,三菱,都有自己的一套,而且还是不透明的,使用他们的还得交费用。TTL和232是电平编码,TTL的1就是5V,0就是0V,而232电平1是负电压,0是正电压。串口上每次只能发送一位数据,一个字节有八位,一般发送还有起始位和结束位,还可以选择校验位,我们只要把数据一位一位的送到总线上就可以了,一位的数据要在总线上保持多长时间,这个就是波特率控制了。接收方按相同的波特率,就可以收到相同数据了。这个就是一帧数据。
1海明校验原理
这是由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
海明校验则克服了前述单片机串行通讯中的缺点, 它不仅可以同时测量出一组信息中的两重错, 而且能够定位和自动纠正一重错, 既经济实用, 又具有高可靠性。海明校验原理为在一组代码中加人一定位数的校验位, 使每一位信息都参加几组不同码元的奇偶校验。如果有一位信息出错, 就会引起有关的几组奇偶校验结果出错, 这样就可以根据哪些组校错,来确定出错误信息的位置及出错性质, 从而自动进行纠正。
下面举例说明海明校验原理, 并讨论它为什么不仅能检错, 而且可以定位和自动纠正一重错。假设有一个四位的二进制数码需要传输:
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)是指用代码来表示各组数据资料,使其成为可利用计算机进行处理和分析的信息。代码是用来表示事物的记号,它可以用数字、字母、特殊的符号或它们之间的组合来表示将数据转换为代码或编码字符,并能译为原数据形式。是计算机书写指令的过程,程序设计中的一部分。在地图自动制图中,按一定规则用数字与字母表示地图内容的过程,通过编码,使计算机能识别地图的各地理要素。
仍以传送四位信息为例。首先, 将需要传送的信息取出, 并按海明校验要求完成编码工作。假设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-),女,四川达州人,西华师范大学本科,江西省科技师范大学在职研究生,助理讲师,单位:江西省电子信息技师学院,研究方向:信号与信息处理,关于单片机的通讯