sea_sky_ocean 发表于 2008-6-2 22:30:45

马老师教材之5.5.2外部扩展并行I/O接口设计

马老师的教材《高档8位单片机ATmega128原理与开发应用指南(上)》之5.5.2节外部扩展并行I/O接口设计中使用的扩展方法(利用74HC373扩展输入口,同理也可以扩展输出口)我在使用51单片机时就使用过,现在使用ATmega128也扩展过,是一种有效、快速、低成本的扩展方法,我非常喜欢使用这种方式!
不过今天对这种扩展时序又深入思考了一下,突有以前不曾想过的疑问,提出与大家探讨!

    先简要说明扩展方法:充分利用总线时序,地址线进行译码选择373(译码线接373之OC引脚PIN1),然后利用ALE的高电平使能LE(即教材中的C引脚PIN11),使输入数据出现在373的Q端口,在ALE的低电平时数据锁存在Q端口,总线进行数据读取。

    现在我突然想到存在的问题是在总线时序的T2周期(参考教材或者128的PDF的外部扩展存储器操作时序图),地址已经输出,373被选通,ALE处于高电平状态,此时373已经完全处于工作状态,即外部输入信号已经能够直接反映在Q端口即当前数据总线上,而在T2周期MCU的PA口是输出状态,即输出低8位地址数据,此时就存在的问题是在当前总线上有两个输出(373的Q端口和MCU的PA端口)同时有效,势必会有冲突或者说短路(CMOS输出,如果一个端口输出高电平,另一个相连端口输出低电平,相当于上下两个MOS同时导通,这种情况是不合适的),虽然时间比较短暂(8M晶振,约125ns),但此种状态是存在的,如果这种操作很频繁,不知长期工作对MCU有什么影响?或者有没有更好的改进方式,使其更加完善一些?我也在思考改进,但不知道是不是画蛇添足!

sea_sky_ocean 发表于 2008-6-3 20:20:43

今天将新做的PCB中这种扩展做了改进,在373的Q端口和PA端口之间串了一个电阻,具体阻值调试再定吧,我想这样可以解决上面出现的问题,保护芯片端口!
    另外将373的选通信号增加了使用MCU的RD信号触发的电路,如果调试成功以后就不使用ALE了,因为使用RD的地址选择性更好,抗干扰更好(个人认为),而且同一个片选地址可以同时扩展输入和输出IO口(两种373的处理不一样)!

machao 发表于 2008-6-3 23:00:52

这是一个非常好的问题.而且在这个电路中确实存在你说的现象.

书中的电路是一个"简单"的扩展.所谓简单,就是希望少用外围的器件.但的确存在PA的输出和373的输出冲突的问题,尽管此时两面输出的数据是不使用的,可是存在将PA口或373的口烧毁的隐患.

改善的办法是在PA口上串入8个1K-2K的电阻.

使用RD控制373的选通信号不妥,因为ALE锁存先于RD,如果373未被选通,那么锁存的数据没有意义.

实际上,正规方式的扩展输入输出并口是使用373(输出)和244/245(输入),地址译码输出是需要经过RD和WR的控制,分别与373的锁存(373的片选接地)和244的片选连接,这样需要多使用一个或门器件.

谢谢你的问题.

zhifeng 发表于 2008-6-3 23:04:21

165+595不是很简单

machao 发表于 2008-6-3 23:17:12

不同的方法,要根据实际情况选择的.

在我以M16为主的书中,介绍的就是165+595.因为M16外部没有并行总线接口.

而M128外部有并行总线接口,利用该接口扩展,软件编写方便,速度快,至少对于学习过51的人比较习惯.缺点是,PCB上的布线多.

两种方法的对比,在我的教程中有讨论的.两种方法都应该掌握的.

sea_sky_ocean 发表于 2008-6-4 22:02:07

谢谢马老师!

    “使用RD控制373的选通信号不妥,因为ALE锁存先于RD,如果373未被选通,那么锁存的数据没有意义”
当前前提是373片选是通过地址译码(我使用的是138低电平信号使能)选通的,否则输出为高阻态的,我的意思是说在373片选有效的情况下使用RD进行信号选通应该更好些!这样抗干扰性更强些!因为ALE的信号在MCU访问 内外 部RAM时包括读写时都是有效的,而RD在指定的外部扩展空间读时序才有效!
    另外马老师的正规扩展输入输出方式更加有效!我的输出采取的是373,其中片选时钟接地,选通使用的是138产生的片选(低电平有效)和WR信号 或非 后的信号!输入如果按照马老师所说我想就应该是采用138产生的CS(低电平有效)和RD信号相 或 后进行选通244,这样就可以避免前面的总线输出冲突的问题了,是吗?

machao 发表于 2008-6-4 22:53:33

1.你是指使用RD取反作为373的锁存信号吗?这样T1,T2期间还是存在冲突的问题,还要增加一个器件.最好你有个图.

2.正规输入输出的扩展方法不是我的,很多书上都有,看看8086的微机原理书.
输出采用373,其中片选始终接地,选通(正确叫锁存)使用的是138产生的片选(低电平有效)和WR信号 或非 后的信号!输入采用138产生的CS(低电平有效)和RD信号相 或 后进行选通244,这样就肯定避免总线输出冲突的问题了.
页: [1]
查看完整版本: 马老师教材之5.5.2外部扩展并行I/O接口设计