0.引言
复位是单片机的重要操作内容,复位功能是系统正常运行的先决条件。在简单的复位电路中,只要在微处理芯片的RESET引脚保持高电平达2个以上的机器周期,即可完成一次复位操作[1]。考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,一般只要在RESET引脚出现10ms以上的高电平,就能使单片机有效复位。但是在单片机应用系统中除单片机外,往往还有若干个外围器件,如果外围器件有复位要求,便形成了多个芯片的综合复位系统,这时,一般的复位电路就不能满足使用要求,本文以常用芯片80C552为例,提出了一种多芯片同步复位电路设计方法,供读者参考。
1.MSC-51系列的一般上电复位电路
图1 一般复位电路
一般上电复位电路是利用RC充电原理实现的,如图1(a)所示。初始上电,电容两端等电位,则RESET为高电平,随着对电容的充电,RESET端电位逐渐降低,直至低电平,复位过程结束。RC的选取应使RESET端保持10ms的高电平,才能实现可靠复位。
图1(a)虽然能实现上电复位功能,但对干扰没有抵抗作用,不能保证复位电路任何时候都能可靠地工作。单片机复位端口的干扰主要来自电源的噪声,尽管不会造成单片机的错误复位,但会引起某些内部寄存器错误复位。因此要采取必要措施,消除干扰低复位功能的影响。
图1(b)给出了一个改进的电路。电阻R与电容C构成一个低通滤波环节,然后通过74LS14施密特电路接入单片机复位端,可以提高对串入复位端噪声的抑制能力。电路中并联二极管D的目的是在电源断电后,电容能迅速放电。如果没有二极管,那么在断电窄脉冲的干扰下,由于电容C不能迅速将电荷放掉,待电源恢复时,由于电容C两端仍维持较高电压,单片机不能上电自动复位,导致程序运行失控。
2. 基于80C552的多芯片同步复位的硬件电路
2.1 80C552内部特殊的复位结构
图 2 80C552片内复位电路
80C552[4]芯片的内部复位电路和MSC-51系列的其他芯片不同,它已经将抑制噪声干扰的史密特电路集成到芯片内部,这样就减少了外部连接的不可靠因素的影响,而且将上电复位用的充电电阻也集成到芯片内部,简化了外部复位电路的硬件设计,提高了上电复位的可靠性。
另外,80C552内部有一个定时监视器T3,可以产生内部复位。如图2所示。80C552的内部复位过程是:将定时监视器T3置为有效,当程序运行出现异常时,定时器T3溢出,并输出宽度为3个机器周期的窄脉冲到复位电路,这样的脉冲足以完成一次复位操作,使系统尽快地从故障中恢复正常。80C552的外部复位与内部复位是相互独立的,当允许内部复位时,不管RST引脚是否为高电平,都能产生一次复位操作。
2.2 单独采用80C552芯片的复位电路
图 3 80C552外部复位电路
如果80C552的复位端不再连到其它芯片上,可以采取图3(a)的方案,外部元件少,而且外部复位、内部复位均可实现,系统设计简单,可靠性也高。
2.3 多芯片简单复位电路
当系统中有多个复位端连在一起时,不能采用图3(a)的方案。因为电容的放电作用,使得T3输出的窄脉冲无法在RST引脚出现,这样,当产生内部复位条件时,虽然80C552可以得到复位,但其它外围芯片无法得到复位。这时应采用图3(b)的方案,电容不直接与RST引脚相连,在RST引脚就可以取到T3输出的窄脉冲了。这样,当产生内部复位条件时,整个系统都可以实现复位了。
但由于不同厂家生产的芯片结构不同,对复位的要求也不同[5],况且多芯片的复位连接必然使复位线加长,这极易引起较大的分布电容,从而使外围电路的复位过程滞后于单片机,如果单片机复位结束后立即对外围电路进行初始化操作,往往会导致失败。解决的方法是在程序的初始处加一些延时软件,然后再对外围芯片进行初始化设置,可实现多个芯片的可靠同步。
2.4 基于80C552的多芯片同步复位电路设计图
图 4 多芯片综合复位电路举例
5 软件复位流程图
图4是我们设计的遥控数据采集器的接收和转发电路,红外接收器接收发射器发过来的现场数据信息,送到89C2051进行处理,然后通过I2C总线传送到80C552,经过80C552进一步处理后,采用CAN总线传送到数据处理中心.我们这里仅对它的复位电路进行讨论.
在这个系统中,除了80C552需要复位外,还有两个芯片需要复位操作,一个是CAN控制器SJA1000,一个是单片机89C2051。其复位要求是:既要有上电自动复位功能,又要能通过定时监视器T3实现“看门狗”复位功能;当80C552复位时,89C2051和SJA1000也同时复位;当89C2051或SJA1000出现问题时,通过80C552能够分别对其进行复位,而不影响80C552程序的正常运行。而且,89C2051和SJA1000两个芯片的复位电平信号不同,前者为高电平复位,后者为低电平复位。按照上述功能要求,简单的采用前面介绍的两种复位电路均不可行。于是我们采取了一种软件与硬件结合的方法,这种方法是,在硬件结构上,芯片80C552的外部复位电路仍采用图3(a)的结构,芯片89C2051和SJA1000的复位不直接与80C552的复位端相连,而是连到了80C552的两根I/O口线P1.1和P1.3;在软件设计上,通过在初始化程序中软件模拟上电复位过程,就可以满足系统的要求,其程序流程图如图5所示。
系统综合复位过程是:系统上电后,80C552首先复位,开始运行软件程序,在执行初始化部分时,首先通过P1.1和P1.3实现对89C2051和SJA1000的复位操作,然后再运行其他程序。当程序运行出现异常时,“看门狗”起作用,T3溢出产生内部复位操作,程序重新开始,初始化部分也重新运行,89C2051和SJA1000随之再复位一次。在程序正常运行过程中,如果与89C2051或SJA1000相关的模块出现错误时,可以通过软件判定是否出现异常,之后通过P1.1、P1.3端口分别对89C2051或SJA1000单独进行复位操作,此时80C552并不需要复位,程序正常运行。
3 结论:
参考文献[1]孙涵芳 徐爱卿.MCS-51、96系列单片机原理及应用[M],北京:北京航空航天大学出版社,1995,4
[2]王幸之 王雷 翟成 王闪.单片机应用系统抗干扰技术[M],北京:北京航天大学出版社,2000,9
[3]张有德.飞利浦80C51系列单片机原理与应用技术手册[M],北京:北京航空航天大学出版社,1999,1
[4]田景文,性能卓越的单片机80C552[J].石油仪器[J] 1998,3:32-34
[5]洪一池,袁一萍.微控制器实时系统监测复位电路的软件设计[J].微型计算机应用2003,3:44-45.
[6]乔维德.基于87LPC768微处理器相位计的设计[J].微计算机信息2006,3-2:43-44.