51单片机IO口扩展,P0口在什么情况下要加锁存器,在什么情况下不加呢?

最好讲详细点。。
用8255扩展IO,书上用了373锁存,但是我想可不可以这样:P0不锁存,而是用P2口的随便两个引脚直接连8255的地址引脚。这样P0口送出的数据就不需要锁存了,直接接8255的数据口了。小弟初学单片机,还望各位能不吝赐教。 这样可以的话,低八位地址(P0口)应该是?是不是随便给个0到255之间的数可以? DPTR包括了P0和P2的地址,既然8255地址可以由P2给出,那P0地址如何处理?

答:

阁下要搞清楚锁存器是干吗的,锁存的是什么。

同时要明白 片外的数据存储器、程序存储器读写的原理、过程、时序关系,才能彻底搞明白这个问题。
你看看单片机教科书里关于数据存储器、程序存储器扩展的部分,就知道p0口的作用是传送地址和数据,有时候还要做其它的IO口用。那么,这些复杂的数据传递岂不乱套?这些就要锁存器把它们隔离开了。

一般来说,P0口进行数据存储器、程序存储器扩展,必须加锁存器。

p0口做IO口时,如果各个IO口在时序上不发生冲突,可以不加锁存器。如果有冲突,就要加。

参考答案:http://z.baidu.com/question/89165972.html

用8255扩展IO,书上用了373锁存,但是我想可不可以这样:P0不锁存,而是用P2口的随便两个引脚直接连8255的地址引脚。这样P0口送出的数据就不需要锁存了,直接接8255的数据口了。小弟初学单片机,还望各位能不吝赐教。

完全可以。CS是片选,这个也要接在p2的一个引脚的,或者接地。看你电路设计了。

8255的D0--D7是数据线啊!这个接P0口。

这样可以的话,低八位地址(P0口)应该是?是不是随便给个0到255之间的数可以? DPTR包括了P0和P2的地址,既然8255地址可以由P2给出,那P0地址如何处理?
从你的这个问话来看,你对单片机的概念很模糊。片外的地址是16位,p2p0共同决定,缺一不可的。我刚才说的方法是把8255当做IO口扩展的,不是当片外数据存储器用的。p0口接8255的D0--D7。所以这个根本用不到DPTR。

假如你按照片外数据存储器扩展,就必须用74LS373了。8255的A1A0可以由74LS373接P0,在p0送地址第八位时选通A1A0.这时p2反而不重要了,因为不连在8255上也是可以的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-28
如果你想地址,数据总线复用的话需要加,如总线式访问某设备时。。
如果仅仅是做IO口就不用加了。。。

用8255扩展IO,书上用了373锁存,但是我想可不可以这样:P0不锁存,而是用P2口的随便两个引脚直接连8255的地址引脚。这样P0口送出的数据就不需要锁存了,直接接8255的数据口了。小弟初学单片机,还望各位能不吝赐教。 这样可以的话,低八位地址(P0口)应该是?是不是随便给个0到255之间的数可以? DPTR包括了P0和P2的地址,既然8255地址可以由P2给出,那P0地址如何处理?

这是可以的,把A1,A2,及CS都接到p2口
同时由于p0是分时复用的,也就是一个读写周期内,他竟做为数据线,又作为地址线,如果你不用锁存器,这样就会把数据和地址全送给825了吧..
但由于 p0可能不参与8255选址,因此你把数据和地址弄成一样,这样就算搞混了,也就无所谓了。。。
即DPTR的PO是不确定的,每次送什么数据都放是什么值;
第2个回答  2010-01-27
P0口在作为外部存储器的数据、地址总线时,需要加锁存器,以分离地址信号和数据信号;当P0口作为普通I/O口时,不需要加锁存器。
第3个回答  2010-01-27
你的思路是可以的。 只是不能使用 MOVX 指令对8255进行读写操作了。

使用你的操作方法,要慢得多。
相似回答