关键词:单片机,运行参数,数据校验,取值范围
1 引 言
在单片机构成的控制系统中,系统控制时需要使用和保存已经设置或优化的参数。如果将运行参数仅仅存储于单片机的RAM区中,则系统在掉电或重启时将会丢失这些重要参数,不能正常运行。为了解决上述问题,保证控制系统正常、可靠地运行,需要将这些运行参数保存在足够容量的电可擦除存储器(EEPROM)中。在写入或读出EEPROM中的数据时,为保证数据操作的正确性,则需要进行数据校验。在系统运行这些参数之前,为检查运行参数的取值是否在许可范围之内,则需要进行参数取值范围的检验。本文结合作者开发的电梯轿厢门机控制系统,来详细讨论参数保存和校验的设计及实现。
2 系统运行参数的存储
在单片机组成的控制系统中,系统设置的运行参数是系统正常运行所必须使用的,既要保证运行参数的可修改性,又要保证运行参数在系统停机或掉电的情况下能够正确保存,因而运行参数应保存在电可擦除存储器(EEPROM)中。根据参数个数的多少,决定所使用EEPROM的存储容量。例如,在本文的单片机系统中,电梯轿厢门机控制运行所需要的参数有:门宽参数、有无光电检测、输出保持力矩、开门加速步频、关门加速步频、开门减速步频、关
门减速步频、工作计数器等,设计中要求存储的参数共需28个字节,再加上一个字节校验和,所以选用32字节容量的EEPROM。Xicro公司的X24C44能满足上述可修改性和容量的要求。
2.1 EPROM芯片简介及硬件组成
电可擦除存储芯片X24C44是一个八引脚的芯片,其内部有存储矩阵和RAM两个存储区,外部引脚的功能如图1所示。芯片各引脚的功能为:CE为芯片使能引脚;Vcc及Vss为电源引脚;电压为+5V;SK是读写X24C44数据时所用到的外部时钟同步信号;DI为命令或数据串行输入X24C44的信号引脚;DO为X24C44数据串行输出的信号引脚;STORE为低电平时,允许将EEPROM中RAM的内容保存到存储矩阵;RECALL为低电平时,允许将EEPROM的存储矩阵的内容传送到EEPROM的RAM中。
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-87-68374.jpg)
对X24C44的读写操作是串行数据操作,其读时序如图2所示。结合图2中的读时序,读出 X24C44中某两字节的数据操作为:芯片的使能引脚CE为高电平,在时钟SK信号的同步下,先向X24C44的数据串行输入引脚DI送读出两字节的命令1AAAA11X(其中AAAA为要读出的起始地址,X表示X24C44对该值忽略),数据串行输出引脚在第9个时钟由高阻态转为数据串行输出,16个比特为一个读出内容,通过将CE信号置为低电平,先关闭芯片的读出数据操作。
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-69-68374.jpg)
按照向X24C44写入两字节内容的时序,写入两字节数据的操作类似于读出操作过程。
X24C44采用串行读写数据,其与单片机的接线简单,除了片选信号CE外,只要与单片机的三根I/O引脚相连即可,作用为时钟CLK,数据输入DI,数据输出DO,其中DO引脚要接一个10kΩ的上拉
电阻。硬件电路接线如图3所示。
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-65-68374.jpg)
2.2 EEPROM读写的实现
控制系统中所采用的是51系列单片机,其中读写子程序设计用汇编也较容易 实现结构化编程。根据X24C44的时序和操作过程,下面给出读出EEPROM中数据的汇编子程序。单片机将数据写入EEPROM的过程与读出过程相类似。读出EEPROM中数据的汇编子程序如下:
read:push psw;读数据子程序入口
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-39-68374.jpg)
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-83-68374.jpg)
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-24-68374.jpg)
3 运行参数的数据校验
系统运行参数是单片机控制系统正确运行的关键数值,能确保系统按设置的特性运行。在许多单片机组成的控制系统中,系统在运行过程中需读出EEPROM中的数据,为了确定所读出的数据与原先写入的数据一致,就要用到数据校验。在一般的校验中,一是采用数据字节值进行异或运算;二是字节值作相加运算并忽略进位的方法。本文介绍了采用一种16位循环冗余法(CRC)思想的自定义数据校验法。
3.1 循环冗余法的简介
循环冗余法是基于将位串看成是系数为0或1的多项式,一个k位的帧可以看成是从xk-1到x0的k次多项式的系数序列,这个多项式的阶数为k-1。高位(最左边)是xk-1项的系数,下一位是xk-2项的系数,依此类推。例如11001001有8位,表示成多项式是x7+x6+x3+x0,多项式的系数分别是1,1,0,0,1,0,0和1。
如果采用循环冗余法进行校验,在产生校验和时及检验数据时,运算必须用相同的生成多项式G(x),生成多项式的高位和低位必须是1。以2为模 展开运算。运算法则是:加法不进位,减法不借位;加法和减法两者都异或运算相同。如果分计算m位的数据序列M(x)的校验和,生成多项式G(x)必须比多项式M(x)短,即m>k。校验的基本思想是:将校验和加在数据序列M(x)的末尾,使这个带校验和的多项式能被G(x)除尽。当检验数据时,用G(x)去除这个带校验和的多项式,如果余数不等于零,则所检验的数据有错。
计算检验和的算法如下:
(1)设G(x)为r阶,在数据序列的末尾附加r个零,使数据序列为m+r位,则相应的多项式是xrM(x)。
(2)按模2除法,用对应于G(x)的位串去除对应于xrM(x)的位串,得余数。
(3)按模2减法,从对应于xrM(x)的位串中减去余数。结果就是带校验和的数据序列,叫多项式T(x)。
该方法是经过严密数学推导的,有三项多项式已成为国际标准,即12位的CRC-12:x12+x11+x3+x2+x1+1;16位的CRC-16:x16+x15+x2+1和CRC-CCITT:x16+x12+x5+1。
3.2 自定义数据校验的软件实现
循环冗余法在通讯中的实现一般是用一种简单的移位寄存器电路来进行运算,并用硬件来完成对校验和的校验。实际应用中几乎都在使用此硬件。在单片机控制系统中,参考这一产生数据序列校验和的思想,由于单片机的运算速度已相当高,用软件实现这一校验也是可行的。在检错要求较高的情况下,并考虑到单片机的运算是基于字节(8位数据)的,数据校验采用以下自定义数据校验算法。自定义算法的生成多项式取G(x)=x7+x5+1,可以检出1位错和2位错,显然比字节和或者异或和的检错能力大。
自定义数据序列校验的软件实现流程如图4所示。根据流程图,校验用到异或和移位操作运算,软件编程用相应的单片机汇编语言较易实现,程序简捷,实时性好。
单片机控制系统在保存运行参数过程中,首先在RAM区中连续存储运行参数,并用自定义数据校验算法计算运行参数的校验和。系统向X24C44写入运行参数值时,也将校验和写入。在读出X24C44中的运行参数时,再用同一算法计算检验和,与X24C44中原有的校验和比较,判别数据是否合法,如果校验和相同,则对运行参数的读写是正确的。这一检验算法可有效保证程序所使用的运行参
数的有效性。
在读出X24C44的运行参数时,如果所读出的数据按同一方法计算校验和与X24C44中原有的校验和不一致,则表明读出的是错误的数据。这时可不用这些数据,在程序中调用默认的运行参数值,从而
保证了门机控制系统的安全运行,提高了可靠性。
![](http://www.ck365.cn/file/upload/201208/09/16-43-32-90-68374.jpg)
4 参数的取值范围检验
在单片机控制系统中,所使用的参数数值如果超过了系统的允许范围,则有可能使系统运行出现不可预见的工作状况。为了保证控制系统按所要求的功能运行,系统在使用运行参数之前要进行取值范围检验。
在单片机组成的系统中,系统的运行参数绝大多数是正数。如果运行参数1的取值范围为N11≤参数1≤N12,则在运行参数的取值范围检验子程序中,系统进行条件处理为:当参数1<N11时,令参数1取值为N11;当参数1>N12时,令参数1取值为N12;当参数1在许可范围之内时,参数1取值不变。运行参数的取值范围检验子程序处理流程如图5所示。
5 结束语
本文所讨论的运行参数的保存及参数有效性判别的实现方法,在作者所开发的电梯门机单片机控
制系统中使用,实际应用表明:可以保证运行参数在设计的许可范围内,保证系统有较强的容错能力,提高控制系统的运行可靠性。这一方法也可应用于需要保存参数的单片机组成系统中,如智能仪表、运动控制等领域的系统。
1 何立民编著.MCS-51系列单片机应用系统的设计—系统配置与接口技术.北京:北京航空航天大学出版社,1999
2 Andrew S.Tanenbaum著,熊桂喜,王小虎等译.计算机网络(第三版).北京:清华大学出版社,1999
3 郑人杰,殷人昆,陶永雷.实用软件工程(第二版).北京:清华大学出版社,1998