张明远
(中山职业技术学院,广东 中山 528400)
摘要:高阻态状态是数字电路接口器件中的一个关键特性,在接口电路的硬件设计过程中,这一状态往往容易被忽视。本文深入探讨了在某型号机床控制系统中,74LS373接口芯片在单片机总线技术进行I/O口扩展时出现的总线冲突问题,并通过时序仿真分析,展示了如何利用接口芯片的高阻态特性来有效解决多芯片I/O扩展过程中的总线冲突现象。
0引言
在以单片机为核心的工业产品控制电路设计领域,输入输出通道电路的设计通常更加关注信号传输中的高电平和低电平状态,而对高阻态状态的重视程度相对较低。然而,如果在硬件设计过程中未能充分考虑到芯片的高阻态特性,可能会导致控制电路中的接口芯片发生短路,进而造成损坏。本文将重点分析基于AT89S51单片机[1]总线技术进行I/O扩展时,接口芯片74LS373的高阻态时序特性,并通过仿真研究来揭示其作用机制。
1基于单片机I/O扩展接口电路的硬件设计
1.1基本扩展电路
74LS373芯片是一种具有三态功能的8D锁存器,广泛应用于单片机的输入输出接口设计中。其元件原理图和功能表如图1所示。
图174LS373原理图与功能表根据图1中的功能表可知,当OE端为低电平,而控制端LE为高电平时,输入端D的数据会被传输到输出端Q;当OE和LE同时为低电平时,输出端Q的状态会保持不变(与输入端D的状态无关);而当OE端为高电平时,无论LE和D的状态如何,输出端Q都会呈现高阻态。
图2展示了一种基于单片机AT89S51总线技术和两片74LS373接口芯片进行I/O口扩展的电路设计[2]。其中,U2用于扩展输出接口,U3用于扩展输入接口。U2和U3的接口地址分别为7FFFH和FEFFH。
在对图2电路进行PROTEUS[3]仿真时,我们设置了输入开关的数据为01110110(76H),并执行了以下指令:
MOV DPTR,#0FEFFH
MOVX A,@DPTR ;读入U3开关数据
NOP
MOV DPTR,#7FFFH
MOV A,#55H
MOVX @DPTR,A ;向U2输出01010101
通过PROTEUS软件对基本电路图2进行仿真,得到了仿真时序图,如图3所示。从时序图中可以看出,在RD信号有效(低电平)之前,AD(0..7)(P0)的数据呈现高阻态,这表明在读U3时数据出现了错误(正确值应为FFH);在WR信号(低电平)前后,P0上的数据也呈现高阻态(正确值应分别为FFH和55H),这说明在U2输出时数据也出现了错误;同时,在对图2的电路进行仿真时,P0口的数据信号出现了短路现象。图2基于单片机AT89S51总线技术和接口芯片74LS373进行I/O口扩展的电路
分别对U2和U3执行输出和输入指令,通过时序分析发现,U2的输出数据是正确的,而U3的数据出现了错误。
图5展示了重新设计后的电路的仿真时序图(下转第48页)1.2输入接口的扩展电路错误原因分析
根据74LS373的功能表可以看出,当OE端保持低电平,而LE同时为低时,其输出端会保持原态,这说明74LS373具有锁存功能。在图2电路中,U3的OE端常接地,导致总线始终被U3占据:当U3的LE为高时,芯片外部的输入开关信号会被传输到芯片的输出端;当U3的LE为低时,其U2输出的数据状态会被保持锁存,这意味着数据总线P0口被U3保持在输入开关决定的数据状态。
实际上,AT89S51单片机通过MOVX指令访问U2和U3时,会先将U2和U3的口地址分别输出到P2口(高8位地址)和P0口(低8位地址),输出到P0的低8位地址数据可能与U3输入并保持的数据不同,从而造成P0口的数据冲突。
1.3解决数据冲突的方法
通过上述分析可以得出,造成数据冲突的原因是输入芯片U3的OE端常接地,使得单片机的数据总线始终被U3芯片占据。因此,在硬件设计过程中,应该避免单片机的总线始终被某一个芯片占据的现象。
事实上,从74LS373的功能表可以看出,它还具有高阻态特性。只要保证当单片机不访问U3时,或者U3被访问而在寻址阶段时,使U3的输出端始终保持高阻态,就能有效避免数据冲突。
如图4所示,为修改后的U3控制电路,OE信号由U4A或非门输出信号取反得到。仿真结果如图5所示。在执行读入U3的指令后,数据总线(P0)上的数据为76H;在执行输出U2指令后,数据总线(P0)上的数据为55H,输入输出结果正确。
2结论
通过以上分析和仿真研究,我们可以得出以下结论:在基于单片机控制的电子电路设计中,时序的仿真分析是查找硬件电路错误的一种有效方法。
防止总线上数据冲突是硬件工程师在硬件电路设计过程中需要认真考虑的问题。高阻态特性虽然重要,但也是硬件电路设计中容易被忽视的地方。
在使用单片机总线扩展I/O口时,如果需要使用多个输入输出芯片,正确运用接口芯片的高阻态特性是解决总线数据冲突的有效方法。
如果接口芯片输出端没有高阻态控制功能,那么该芯片不适合用于输入接口扩展。在使用单片机总线技术扩展I/O口时,硬件设计必须确保总线被单片机访问的接口芯片占据,同时不被访问的接口芯片与总线保持隔离。硬件设计时应该避免单片机的总线始终被某一个芯片占据。
参考文献
[1] 余永权.Atmel89 系列单片机应用技术[M].北京:北京航空航天大学出版社,2002.
[2] 高玉琴.单片机原理与应用及C51编程技术[M].北京:机械工业出版社,2011.
[3] 张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.