简单的I/O口扩展通常是采用TTL或CMOS电路锁存器、三态门等作为扩展芯片,通过P0口来实现扩展的一种方案。它具有电路简单、成本低、配置灵活的特点。
51系列单片机内部有4个双向的并行I/O端口:P0~P3,共占32个引脚。P0口的每一位可以驱动8个TTL负载,Pl~P3口的负载能力为3个TTL负载。
在无片外存储器扩展的系统中,这4个端口都可以作为准双向通用I/O口使用。在具有片外扩展存储器的系统中,P0口分时地作为低8位地址线和数据线,P2口作为高8位地址线。这时,P0口和部分或全部的P2口无法再作通用I/O口。P3口具有第二功能,在应用系统中也常被使用。因此在大多数的应用系统中,真正能够提供给用户使用的只有P1和部分P2、P3口。
在51单片机中扩展的I/O口采用与片外数据存储器相同的寻址方法,所有扩展的I/O口,以及通过扩展I/O口连接的外设都与片外RAM统一编址,因此,对片外I/O口的输入/输出指令就是访问片外RAM的指令,即:
MCS-51串行口的方式0可用于I/O扩展。如果在应用系统中,串行口未被使用,那么将它用来扩展并行I/O口既不占用片外的RAM地址,又节省硬件开销,是一种经济、实用的方法。
在方式0时,串行口作同步移位寄存器,其波特率是固定的,为fosc/12(fosc为系统振荡器频率)。数据由RXD端(P3.0)出入,同步移位时钟由TXD端(P3.1)输出。发送、接收的是8位数据,低位在先。
1.用74LSl65扩展并行输入口
图6-53是利用两片74LS156扩展二个8位并行输入口的接口电路。
图6-53 利用74LS165扩展并行输入口
74LS165是8位并行置入移位寄存器。当移位/置入(S/L)由高到低跳变时,并行输入端的数据被置入寄存器;当S/=1,且时钟禁止端(引脚15)为低电平时,允许时钟输入,这时在时钟脉冲的作用下,数据将由SIN到QH方向移位。
图6-53中,TXD(P3.1)作为移位脉冲输出端与所有74LS165的移位脉冲输入端CP相连;RXD(P3.0)作为串行输入端作74LS165的串行输出端QH相连;P1.0用来控制74LS165的移位与置入而同S/相连;74LS165的时钟禁止端(15脚)接地,表示允许时钟输入。当扩展多个8位输入口时,两芯片的首尾(QH与SIN)相连。(www.daowen.com)
【例6-12】 下面的程序是从16位扩展口读入5组数据(每组二个字节),并把它们转存到内部RAM 20H开始的单元中。
解 程序如下:
上面的程序对串行接收过程采用的是查询等待的控制方式,如有必要,也可改用中断方式。从理论上讲,按图6-53方法扩展的输入口几乎是无限的,但扩展的越多,口的操作速度也就越慢。
2.用74LS164扩展并行输出口
74LS164是8位串入并出移位寄存器。图6-54是利用74LS164扩展两个8位并行输出口的接口电路。
图6-54 利用74LS164扩展并行输出口
当MCS-51单片机串行口工作在方式0的发送状态时,串行数据由P3.0(RXD)送出,移位时钟由P3.1(TXD)送出。在移位时钟的作用下,串行口发送缓冲器的数据一位一位地移入74LS164中。需要指出的是,由于74LS164无并行输出控制端,因而在串行输入过程中,其输出端的状态会不断变化,故在某些应用场合,在74LS164的输出端应该接输出三态门控制,以便保证串行输入结束后再输出数据。
【例6-13】 下面是将RAM缓冲区30H、31H的内容经串行口由74LSl64并行输出子程序。
解 程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。