基于MC68HC11单片机实现垂直奇偶校验
导读:
关键字:
基于MC68HC11单片机实现垂直奇偶校验 北方交通大学杨欣李晓光 摘要垂直奇偶校验是一种常用的二维奇偶校验码。本文以MC68HC11E9单片机为例,探讨软件实现垂直奇偶校验的方法及其须要注意的一些问题,并给出相应的源代码。 关键词单片机垂直奇偶校验HART协议 引论 垂直奇偶校验是一种常用的二维奇偶校验码,包括纵向和横向两种校验,查错率高于普通的一维奇偶校验码,并有一定的纠错能力。垂直奇偶校验码多见于各类通信协议中,特别是在工业智能控制网络领域广泛应用的HART协议中,垂直奇偶校验是其数据传输必不可少的一环。垂直奇偶校验可以硬件实现,也可以软件实现。MC68HC11单片机中没有实现奇偶校验的硬件电路,必须采用软件来实现奇偶校验。本文以MC68HC11E9单片机为例,探讨软件实现垂直奇偶校验的方法及其需要注意的一些问题,并给出相应的源代码。该代码可在MC68HC11系列单片机中兼容。 一、 垂直奇偶校验码的编码及其特点 垂直奇偶校验是一种二维的奇偶校验,它既对单个字节中的每一位进行校验,又对帧传输中每一位的位置进行校验。垂直奇偶校验的每个码字(codeword)由9位组成,其中8位是数据,1位是字节奇偶校验位,对该字节内的8位数据进行校验。在每一段帧的最后,是一个码字的垂直奇偶校验位,如图1所示。所传输消息中的字节按列排序,第一字节在第一列,以此类推。粗横线下的部分是每个字节的字节奇偶校验位。在有的器件中,这一位可以由硬件自动产生及校验;但在MC68HC11中,只能由软件产生及校验。这一位构成了纵向奇偶校验(longitudinal)。在传输时,对帧中各字节进行异或运算,最后结果即为垂直(vertical)奇偶校验码,放在帧的最后一个字节传输。这一字节也包含字节奇偶校验位。 图1垂直奇偶校验码不但可以根据纵向校验码检测出误码的字节,还可以根据垂直校验码的误码位置检测出误码所在的位。由于所有的位只有0、1两种状态,所以只要检测出误码的准确位置就可以纠正误码。这种校验码可以纠正(correct)所有的1位误码,纠正所有不在同一行、同一列发生的两位误码;但很难纠正突发(burst)模式的误码。在垂直奇偶校验的典型应用HART协议中,由于常常用于工业现场,通信环境相当恶劣,突发错误较多,因此在实际应用中,通常只使用它来检测(detect)误码,然后要求主机重发(retransmission)。 二、 垂直奇偶校验码 在MC68HC11E9单片机上的实现首先约定:第一,使用MC68HC11E9单片机的SCI作为通信接口;第二,字节奇偶校验码采用奇校验,即字节各位相加之和为奇数。 68HC11系列单片机的SCI通信有两种格式:一种是8位,所有的数据都在串行通信数据寄存器(SCDR)中;另一种是9位,第9位是字节奇偶校验位,接收时该位存储在串行通信控制寄存器(SCCR1)的第8位中,发送时存储在第7位中。我们采用9位格式。这需要在初始的程序中进行设置。 主程序主要是进行寄存器的初始化,然后进入循环等待程序以降低功耗,直到产生SCI中断后进入中断处理子程序。鉴于不同用户所需要做的初始化工作不尽相同,本文不给出通用的主程序,只给出中断处理子程序和校验子程序。 中断处理子程序包括两项功能:一是按照协议约定的帧长度接收数据放入数据缓存区,当然,帧长度也可以不固定,只需增加一个控制帧长度的控制字节和变量即可;二是按照奇偶校验对每个字节和整个帧进行垂直和水平的奇偶检测,其中,垂直奇偶检测放在中断处理程序内执行,水平奇偶校验位的检测和产生则通过子程序实现。 中断处理子程序(接收): intserv〖〗ldy〖〗#$1000〖〗;设置控制寄存器地址指针〖2〗ldx〖〗#$00c0〖〗;设置数据缓存地址指针〖2〗ldaa〖〗#$00〖2〗staa〖〗eorbyte〖〗;给垂直奇偶校验字节置初值0〖2〗staa〖〗parit〖〗;给水平奇偶校验位置初值0〖1〗data〖〗brclr〖〗$2e,y,$20,data ;检测SCSR对应位是否 ;产生中断〖2〗ldab〖〗scdr〖〗;将接收到的数据放入B寄存器〖2〗stab〖〗$00,x〖〗;将数据放入X指针所指的数据缓 ;存区〖2〗tba〖4〗;数据放入A寄存器〖2〗eora〖〗eorbyte〖〗;与已接收到的数据进行异或〖2〗staa〖〗eorbyte〖〗;将异或值放入垂直奇偶校验字节〖2〗ldaa〖〗sccr1[];读状态寄存器SCCR1至A寄存器〖2〗anda〖〗#$80〖〗;除水平奇偶检测位外均置0 〖2〗jsr〖〗parity〖〗;跳转至水平奇偶校验子程序〖2〗inx〖4〗;数据缓存地址指针加1〖2〗dec〖〗length〖〗;每接收1个字节,帧长度变量减1〖2〗bne〖〗data〖〗;不为零表示还有数据没有收到, ;则继续接收〖1〗dataend〖〗brclr〖〗$2e,y,$20,dataend ;为零则接收垂直奇 ;偶校验码〖2〗ldab〖〗scdr〖2〗cmpb〖〗eorbyt〖〗;与数据异或值进行比较〖2〗bne〖〗error〖〗;不同则奇偶校验出错,转去出错 ;处理程序〖2〗rti〖〗;相同说明数据接收正确,中断返回水平奇偶校验子程序:该子程序输入的是8位数据和1位奇校验位,格式是B寄存器存放8位数据,A寄存器最高位存放校验位,其余位为0。校验正确的话,子程序返回,校验出错则跳转至出错处理程序。 parity〖〗cmpb〖〗#$00〖〗;判断数据是否为0〖2〗beq〖〗testa;数据为0则转去处理校验位即A寄存器〖2〗aslb〖〗 ;数据不为0则循环左移至进位标志位C〖2〗bcc〖〗parity〖〗;C为0则转回去判断下一位〖2〗inc〖〗parit〖〗;C为1则水平奇偶校验位加1〖2〗bra〖〗parity〖〗;跳转回去判断下一位〖1〗testa〖〗asla〖4〗;将A寄存器的最高位送入C〖2〗bcc〖〗a70;C为0则跳转判断校验和是否正确(为奇)〖2〗inc〖〗parit〖〗;C为1则水平奇偶校验位加1〖1〗a70〖〗brclr〖〗parit,$01,error;若水平奇偶校验为偶,则进 ;出错处理程序〖2〗clra〖2〗staa〖〗one〖〗;清除水平奇偶校验位〖2〗rts〖4〗;子程序返回以上给出了接收子程序,发送时同样需要软件产生校验和,由于篇幅所限,此处不再赘述,其基本原理类同。 结束语 以上叙述了基于MC68HC11单片机的垂直奇偶校验码的实现。垂直奇偶校验作为一种二维奇偶校验码,在HART协议等工控、通信领域得到了较为广泛的应用。通过对其单片机实现的研究,提高了软件处理的速度和灵活性,为通信协议的进一步实现打下了基础。MES 参考文献 1阳宪惠.现场总线技术及其应用.北京:清华大学出版社,1999 2李哲英,等.MCS96 MC68单片机原理与应用.北京:清华大学出版社,1995 3张宁,R代克曼.M68HC11单片机开发与应用.北京:北京航空航天大学出版社,1994
来源:单片机与嵌入式系统应用 作者:北方交通大学 杨欣 李晓光 2006/2/12 0:00:00