首要,看51单片机4类IO口,P0~P3,做一个结构上直观的比较
之所以把P0口和P2口放在一同,是由于其硬件结构上都包括一个多路开关,用于挑选是做为一般I/O口运用仍是作为‘数据/地址’总线运用。关于没有内部ROM的单片机(8031)或单片机内部存储器无法满意程序巨细需求,多路开关就与上面接通,作为单片机与扩展存储器通讯的地址/数据总线运用。
它们之间的不同也清楚明了,P0口引脚前2个mosfet(金属氧化物半导体场效应管)构成了一个推挽结构,而P2口前mosfet则为一般开关效果,且包括上拉电阻。
推挽结构:在输出“地址/数据”信息时,V1、V2管是替换导通的,负载才能很强,能够直接与外设存储器相连,无须添加总线驱动器。
从结构上决议了它们的用处:假定扩展了存储器,则P0口作为地址/数据总线口,P2口作为高8位地址线。P0口作为IO输出口时,漏极开路输出,类似于OC门,当驱动上接电流负载时,需求外接上拉电阻。,所以不引荐运用。而PP2端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址。因而P2端口是动态的I/O端口,不能输出静态的数据,也不引荐作为IO口运用。引荐P0,P2保存作为扩展存储器,而非IO口运用。
别的,什么时候是IO口,什么时候是地址/数据口并非取决于硬件,而取决于当时的状况。
这才叫IO口,具有输出锁存的静态口,不用细说。
P3端口和Pl端口的结构类似,差异仅在于P3端口的各端口线有两种功用挑选.
使P3端品各线处于第二功用的条件是:
1、串行I/O处于运转状况(RXD,TXD);
2、打开了处部中止(INT0,INT1);
3、定时器/计数器处于外部计数状况(T0,T1)
4、履行读写外部RAM的指令(RD,WR)
而作为IO口运用时与P1完全相同。
在更多的场合是依据使用的需求,把几条端口线设置为第二功用,而别的几条端口线处于榜首功用运转状况。在这种情况下,不宜对P3端口作字节操作,需选用位操作的方式。
至于读引脚和读端口,一般教科书都会着重,读端口的指令为端口内容取反这样的“读-修正-写”指令。而读引脚之前,先置1,然后用Mov A,Px之类的指令即可。没有只读端口的指令,由于端口内容是不会由于引脚的改变而改变,始终保持为为前次输出值。只读不改没有意义。
那么可能会有疑问,在P0作为地址/数据总线运用时,并没有使其置1?
以拜访外部程序存储器为例,P0口输出低8位地址信息后,将变为数据总线,以便读指令码(输入)。在取指令期间,“操控”信号为“0”,V1管截止,多路开关也跟着转向锁存器反向输出端Q非;CPU主动将0FFH写入P0口锁存器,使V2管截止,在读引脚信号操控下,经过读引脚三态门电路将指令码读到内部总线,这个进程和I/O读引脚进程是相同的。