5207|13

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C51单片机总线模式问题 [复制链接]

问一个比较基础的问题,也是经常有人问的。如果我在P0口上面挂了地址锁存器(如74HC573),但我突然想要把P0口当作普通I/O口来用,即直接对其输出与读入,这样可以吗?不考虑WR和RD信号。
第一种分析:可以的。因为P0口虽然可以当作地址数据复用口,但单纯的输出或读入数据时,它就相当于一个普通IO口,跟地址没关系了。
第二种分析:不可以。因为P0口上面已经挂了地址锁存器,这时写数据没问题,但是读数据时会受到地址锁存器的影响。
我一直认为第一种分析是对的,可是今天问一个人,他说第二种才对,各位高手,你们怎么认为?

最新回复

好,我要学习!!!顶!!!  详情 回复 发表于 2009-3-30 14:49
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该关闭地址锁存器.
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用楼主 jiyiche 的帖子:
问一个比较基础的问题,也是经常有人问的。如果我在P0口上面挂了地址锁存器(如74HC573),但我突然想要把P0口当作普通I/O口来用,即直接对其输出与读入,这样可以吗?不考虑WR和RD信号。
第一种分析:可以的。因为P0口虽然可以当作地址数据复用口,但单纯的输出或读入数据时,它就相当于一个普通IO口,跟地址没关系了。
第二种分析:不可以。因为P0口上面已经挂了地址锁存器,这时写数据没问题,但是读数据时会受到地址锁存器…

对于你的第一种理解:P0当然可以随便操作了,在你没有使用总线的时候,可以控制P0口的任意高低,但是,现在有锁存器,也就是说,你向外的数据是通过锁存器发出的,你读入的数据是从锁存器读入的;锁存器在什么时候锁存呢?在总线周期中锁存,通过什么锁存呢?通过ALE引脚锁存,也就是说锁存的信号是总线信号,是CPU默认自动生成的。就算你可以对P0读写,没有什么意义,写,写道锁存器上,没有锁存信号,等于没有写到外设,读,读锁存器的引脚,什么也读不到,没有意义,除非你自己模拟总线时序,自己控制锁存信号,更没什么意义。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 friendfish 的回复:
引用楼主 jiyiche 的帖子:
问一个比较基础的问题,也是经常有人问的。如果我在P0口上面挂了地址锁存器(如74HC573),但我突然想要把P0口当作普通I/O口来用,即直接对其输出与读入,这样可以吗?不考虑WR和RD信号。
第一种分析:可以的。因为P0口虽然可以当作地址数据复用口,但单纯的输出或读入数据时,它就相当于一个普通IO口,跟地址没关系了。
第二种分析:不可以。因为P0口上面已经挂了地址锁存器,这时写数据没问题,但…
我觉得你说的有错误。锁存器锁存的是地址而不是数据,也就是说锁存器在总线周期的前半段把地址锁存,再锁存数据;而我直接把P0当作IO口用的话,被锁存的也是数据(因为根本不存在地址)。所以不管从锁存器送出去还是直接从P0口送出去,都是送数据。
    你说"写道锁存器上,没有锁存信号,等于没有写到外设",为什么没有锁存信号呢?你不是说ALE一直都存在吗?
    呵呵,一点个人见解,欢迎指教。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
恩,对的,ALE信号是一直都有的。锁存的是地址信号,不是数据;
写外设等于没写是因为,外设的片选没有选中,除非你把地址信号也模拟了;

 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
当然可以,跟ALE信号扯不上关系。573的方向是单向的,只能从单片机到573,不能从573到单片机。做通用IO的时候可以把573关闭了,如果P0口做输出的话还要加上拉。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
同意楼上,确实跟ALE没什么关系;
个人有点纠结到读取上来,因为数据线即连接设备也连接锁存器,573是单向的那就可以了。

但是没有地址选通的话,写数据是无效的吧。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
在这里争来争去 也不会 有什么结果,LZ 何不 去试验一下呢?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
第一种说法是对的, 第二种说法从某种意义上说也是对的。因为即要做地址锁存
又要做IO, 同时是做不到的,分时,你要很好的去设计硬件,很好的控制好ale 及573
芯片,使它们不工作或不能工作,让你的io去访问外设。 而做地址锁存时,又要很好
的控制外设(例如关闭)防止互相干扰,与其这么复杂,还不如外扩一个io端口。
所以,并没有见过p0口即做IO,又做地址的例子。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用楼主 jiyiche 的帖子:
问一个比较基础的问题,也是经常有人问的。如果我在P0口上面挂了地址锁存器(如74HC573),但我突然想要把P0口当作普通I/O口来用,即直接对其输出与读入,这样可以吗?不考虑WR和RD信号。
第一种分析:可以的。因为P0口虽然可以当作地址数据复用口,但单纯的输出或读入数据时,它就相当于一个普通IO口,跟地址没关系了。
第二种分析:不可以。因为P0口上面已经挂了地址锁存器,这时写数据没问题,但是读数据时会受到地址锁存…




个人建议(如果又不对的地方请指出),仅供参考:
分析:
1、p0一般在单片机运用中常常把地址低8位地址线和4位数据线复用,常常加上了地址所存器;
2、如果系统不用储存器,P0口常用作普通的IO口;
3、无论作什么用,强烈建议加上拉电阻;
4、如果想作地址低8位用,又想做普通io口用,建议采用如下办法:(当然编程比较麻烦些)
  一种方法:利用多余的io控制系统储存器的片选,当使用储存器时,选择存储器,同时禁止P0口作为普通的io口使用;当使用P0口作为IO口时,禁止储存器操作(这种方法操作复查);
  另一种方法:直接利用高地址线来区分,这样操作简单,当然外扩储存器空间减少;
  这两者方法根据时间情况使用;

  以上是个人想法,如有不妥之处请指出。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
5楼说得很好。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用楼主 jiyiche 的帖子:
问一个比较基础的问题,也是经常有人问的。如果我在P0口上面挂了地址锁存器(如74HC573),但我突然想要把P0口当作普通I/O口来用,即直接对其输出与读入,这样可以吗?不考虑WR和RD信号。
第一种分析:可以的。因为P0口虽然可以当作地址数据复用口,但单纯的输出或读入数据时,它就相当于一个普通IO口,跟地址没关系了。
第二种分析:不可以。因为P0口上面已经挂了地址锁存器,这时写数据没问题,但是读数据时会受到地址锁存…

支持第一种分析,地址锁存器只是在以总线方式访问存储器时才起作用,平时P0口即为普通I/O口。
假定平时P0口的状态为S1,此时如果有总线读或者写操作,则P0口会有S1--S2--S3--S1的状态变化,其中,S2为锁存地址时的状态,S3为读进或者写出数据的状态,执行完后,CPU自动将总线恢复到之前状态。
因为总线方式读写的从片(器件单元)的使能脚是被统一编址了的,而且数据的锁存受读/写信号控制。在无WR和RD动作时,P0口数据属无效数据,所以单独对P0口直接读写,是可以的,如果在操作前对P0口数据备份,操作后恢复即可,不影响其他从片的数据。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

13
 
我觉得可以,就像是你分析第一种那样,但如果不行的话,还可以用一位来区分地址锁存和IO就行了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
好,我要学习!!!顶!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表