MSC—51是70年代末的产品,目前出现了很多功能更强大的 单片机 ,但在目前市场上的产品中MSC—51仍占单片机的多半产品,且MCS—51是其他单片机的基础。本文将详细讨论MSC—51的并行接口,目的是为单片机的使用者提供更好的理论依据。
2 MSC—51的并行I/O端口
2.1 I/O端口简介
I/O端口又称为I/O接口或I/O通路,是MSC—51 单片机 对外部实现控制和信息交换的必经之路,是一个过渡的大规模集成电路,用于信息传递过程中的速度匹配和增强单片机的负载能力。I/O端口可以实现和不同外设的速度匹配,以提高CPU的工作效率,可以改变数据的传送方式,如:内部并行总线与外部设备串行数据传送的转换。
2.2 MSC—51各并行I/O的组成
I/O端口分为串行口和并行口。串行I/O端口一次只能传送一位二进制信息;并行I/O端口一次可传送一个字节的数据。MSC—51 单片机 有四个并行端口,分别命名为P0、P1、P2、P3,每个端口都有八条端口线,用于传送数据或地址信息。由于每个端口的结构各不相同,因此它们在功能和用途上差别颇大。
每个I/O端口都由一个八位数据锁存器和一个八位数据缓冲器组成,其中八位数据锁存器的端口与P0、P1、P2、P3同名,属于21个特殊功能寄存器中的4个,对应内部RAM地址分别为80H、90H、A0H、B0H。需要输出数据时,8个数据锁存器用于对端口引脚上输入数据进行锁存。需要输入数据时,8个数据缓冲器用于对端口引脚上输入数据进行缓冲。另外访问并行I/O端口除了可以用字节地址访问外,还可以进行按位寻址。
3 P0综述
3.1 P0口功能
P0.7—P0.0为P0所用。P0口的访问地址是80H,位地址范围是80H—87H。由于P0口具有较大的负载能力,最多可推动8个TTL门,因此是真正的双向I/O口。
一般来说,P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。
3.2 P0口的结构 P0是由一个输出锁存器(D型触发器),两个三态门缓冲22(控制读引脚或读锁存器),与门和多路开关MUX组成的输出控制电路,一对场效应晶体管FET构成的输出电路所组成。
P0口的多路开关的输入有两个:地址/数据输出和锁存器输出/Q,多路开关的切换由内部控制信号控制。
3.3 P0口的工作原理
3.3.1 P0口的I/O操作(通用I/O端口)
在P0口作为通用I/O端口时,控制电路中“控制”端输入为0电平。此时,多路开关MUX接入下方的锁存器的/Q端。由于“控制”输入为0,上端的FET截止。
输出操作
当内部总线信号置0时,锁存器输出/Q输出高电平,下端FET导通,由于上端FET截止,因此P0引脚输出低电平。当内部总线置1时,锁存器输出低电平,下端FET截止,由于上拉电阻的作用,P0口引脚输出高电平。
注意:由于两个场效应管均截止,使输出处于“悬浮”状态,因此当MOS负载连接时需要加上一上拉电阻,以保证端口能够正确的输出高电平。如图1所示。
输入操作
输入操作比较复杂,实际上有两种输入方式:
a.读引脚
在响应CPU的读引脚操作时,引脚的电平值通过缓冲器BUF1进入内部总线。注意,再执行这种类型的指令时,执行之前必须将端口锁存器置1.执行程序为:
MOV P0,#0FFH;端口锁存器置1
MOV A,P0; 读引脚
此时,下端FET截止,外部数据通过读引脚操作,把数据正确传给数据总线,若不执行 MOV P0,#OFFH,则A点可能为高电平,此时下端FET导通,即P0引脚接地,无法正确输入外部电平数据。
b.读锁存器
在执行读锁存器的操作时,CPU首先完成将锁存器的输出值Q通过缓冲器BUF2读入,然后进行修改,再重新写到锁存器中去,即读锁存器一般完成的是“读—修改—写”的操作。这种类型的操作指令只有算术(INC,DEC,ADD),逻辑(ORC,XRL,ANL),位(JBC,CPL,CLR)操作指令等。采用读锁存器而不是读引脚操作可以避免一些错误,例如:(如图2)如果使用一个晶体管驱动继电器,当端口输出高电平驱动晶体管导通时,P0.x引脚的输出电平只有0.7V。如果将引脚信号读回来,就会得到一个低电平的错误结果;而采用读锁存器则会保证数据的准确。 P0口的两种数据操作
P0口的操作分两类:字节操作和位操作。
CPU对于P0口不仅可以作为一个八位口来操作,也可以按位来操作。有关字节操作指令以 MOV 为例:
输出 MOV P0,A ;P0←A
MOV P0,#data ;P0←data
MOV P0,direct ;P0←direct
输入 MOV A,P0 ;A←P0
MOV direct,P0 ;direct←P0
有关位操作指令,例如:
置位、清除 SETB P0.i ;P0.i←1
CLR P0.i ;P0.i←0
输入,输出: MOV P0.i,C ;P0.i←Cy
MOV C,P0.i ;Cy←P0.i
判 跳:JB P0.i,rel ;P0.i=1跳转
JB P0.i,rel ;P0.i=0跳转
且清P0.i=0
逻辑运算:ANL C,P0.i ;Cy←(P0与Cy)
ORL C,P0.i ;Cy←(P0与Cy)
P0.i中i=0……7。
因此P0口不仅可以以八位一组进行输入输出操作,还可以逐位定义各口线为输入或输出线的电平。例如
ORL P0,#00000010B可以使P0.2位口线输出而其余各位不变。
ANL P0,#11111101B可以使P0.1位口线输出,而其余各位不变。
3.3.2 P0口作为地址/数据复用总线使用(系统使用外存储器时)
控制电路的“控制”端置1,此时与门打开,MUX接向上端(地址/数据)信号。此时,输出端的两个FET都处于正常工作状态。P0口的地址/数据端与外部存储器的低8位地址线相连,在指令周期的前半个周期,传送外部存储器的低8位数据,而后半个指令周期则是把外部内存中的数据传送给CPU。
当P0的地址/数据口置1时,控制上拉电路的“与门”输出为1,上端FET导端,同时地址/数据通过反相器输出为0,下端FET截止,地址/数据线输出为1。
当P0的地址/数据口置0时,控制上拉电路的“与门”输出为0,上端FET截止,同时地址/数据输出通过反相器输出1,下端FET导通,地址/数据线输出为0。
此时,P0口作为地址/数据复用总线使用。上下两个FET处于反相,构成了推位式的输出电路,其负载能力大大增加,因此这时P0端口不用外加上拉电阻。
注意:P0口控制端的转换是通过指令进行的,即执行I/O总线操作时,如 MOV P0,A,系统自动控制端置0,执行地址操作指令如MOVX,MOVC(EA=0时)时,则控制端自动置1。
在进行硬件系统的设计时,如果使用了外部存储器时,P0口成为整个系统的地址/数据复用总线,此时P0口不能在作为通用的I/O端口。因此一般情况下,P0作为地址/数据总线。
4 P1口综述
4.1 P1口的功能
P1口的访问地址是90H,位地址范围是90H—97H,P1口可以驱动4个LSTTL负载,因此是准双向I/O口。
P1口的功能和P0口的第一功能相同,仅用于传递I/O输入/输出数据。
4.2 P1口的结构 图3
包括输出锁存器输入缓冲器BUF1(读引脚),BUF2(读锁存器)以及由FET上拉电阻组成的输出/输入驱动器。
由图3可见,P1口与P0口的区别在于内部有上拉电阻,所以输出时不用外接上拉电阻,P1口没有地址/数据复用端口,因此没有控制端。
4.3 P1口的工作原理
P1口只能进行I/O总线操作,即工作原理同P0口作为I/O输入输出口时的工作原理,这里不再叙述。
4.4 P1口的多功能线
在80C52中,P1.0和P1.1线是多功能的,即除一般双向I/O口线之外,这两根口线还具有下列功能:
P1.0—定时器/计数器2的外部输入端T2;
P1.1—定时器/数据线2的外部控制端T2EX。
这时,该两位的结构与P3口的位结构相当。
5 P2口综述
5.1 P2口的功能
P2口的访问地址是A0H,位地址范围A0H—A7H。P2口最多可以驱动4个LSTTL负载,因此属于准双向口。
P2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址。
5.2 P2口的结构 图4
由图4可看出,由于P2口有了第二功能,则较P1口,P2口增加了一个多路开关,用于控制P2口的工作方式。
多路开关的输入有两个:一个是锁存器的输出Q端,另一个是地址寄存器的高位输出端。通过控制端的信号来控制他们的输入。
注意:锁存器的输出端是Q而不是/Q,故多路开关之后需接反相器。当控制信号为0时,P2口工作在I/O口状态,多路开关接通锁存器。
若内部总线输出0,输出锁存器Q端为0,信号经反相器后输出1,FET导通,输出低电平,若内部总线输出1,则过程与上述相反。
当控制信号为1时,P2口工作输出高8位地址,P2口的输出电平将随地址输出的0、1而1、0的变化。
5.3 P2口的工作原理
5.3.1 P2口的I/O操作
P2口的I/O操作与PO口的I/O同,这时不再重述。
5.3.2 P2口的地址总线操作
P2口可以输出程序存储器或片外数据存储器的高8位地址,与P0输出的低地址一起构成16位地址线,从而可分别寻址64KB的程序存储器或片外数据存储器。
5.4 P2口使用中注意的问题
(1)一般P2口不用于传送存储器的读写数据,因此P2口无需外加地址锁存器。
(2)如果使用256B的外部RAM,此时用8位的寄存器R0或R1作间址寄存器,这时P2口无用,此时P2口仍可以做通用I/O端口,如 MOV A,@R0或MOV A,@R0。
如果访问外部ROM或使用大于256B RAM时,P2口必须作为外存储器的高8位地址总线,如 MOV X A,@DPTR;访问外部数据存储器MOVX A,@A+DPTR;访问外部程序存储器,这里使用了16位的寄存器DPTR。
6 P3口综述
6.1 P3口功能
P3口的访问地址是B0H,位地址范围是B0H——B7H,P3口可推动4个LSTTL门,是准双向口。P3口有两个功能:第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。
P3.0—RXD 串行数据接收口
P3.1—TXD 串行数据发送口
P3.2—INT0 外中断0输入
P3.3—INT1 外中断1输入
P3.4—T0 计数器0计数输入
P3.5—T1 计数器1计数输入
P3.6—WR 外部RAM写选通信号
P3.7—RD 外部RAM读选通信号
6.2 P3口的结构 图5
由图5可见,P3口的结构与P1口的区别在于:(1)P3口中增加了一个与非门。与非门有两个输入端:一个为锁存器的Q端,另一个为第二功能控制输出。(2)有两个输入缓冲器,第二功能取自第一个缓冲器的输出端。
6.3 P3口的工作原理
6.3.1 通用I/O模式
在通用I/O模式下,“第二输出功能”为1电平,以保证与非门打开,其工作方式与P0口的I/O模式同。
6.3.2 P3口作为第二功能模式
在多用途的情况下,P3分别作为串行口,外中断输入,外部数据输入和系统扩展时使用的WR和RD口信号的端口。此时,锁存器Q端置1电平以保证与门是打开的。
在做第二功能输出时,控制信号通过与非门,FET输出。在做第二功能输入时,信号通过下端第二功能的缓冲器输入。
7结束语
本文详细介绍了P0、P1、P2、P3端口的结构和功能,并对使用MSC—51 单片机 端口应注意的问题进行了分析和讨论,为更好地利用和分配MSC—51单片机端口提供了很好的依据。