MCS51 单片机的系统扩展技术四.docx
《MCS51 单片机的系统扩展技术四.docx》由会员分享,可在线阅读,更多相关《MCS51 单片机的系统扩展技术四.docx(9页珍藏版)》请在冰豆网上搜索。
MCS51单片机的系统扩展技术四
MCS-51单片机的系统扩展技术(四)
4.2利用8255A可编程并行接口芯片扩展I/O口
8255A是INTEL公司生产的一种通用可编程并行I/O接口芯片。
它有3个并行端口,分别称为PA、PB、PC口,其中PC口又分为高4位口和低4位口两部份。
它们都可以通过软件编程来设置各I/O口的工作方式。
一、8255A的内部结构和引脚功能
图17是8255A的内部结构框图,图18是8255A的引脚排图,该芯片主要由以下几部份组成:
图178255的内部结构框图
(1)并行端口PA、PB、PC这三个端口都为8位,都可被编程为输入或输出两种方式,但它们在结构和功能上有差异。
PA口有一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器,可编程为输入/输出或双向寄存器;PB口有一个8位输入/输出锁存/缓冲器和一个8位数据输入缓冲器(不锁存),可编程为输入或输出,但不能双向输入/输出;PC口有一个8位数据输出锁存/缓冲器和一个8位数据输入缓冲器,可分为两个4位口使用。
它除了作为输入输出口外,还可作为PA、PB口工作于选通方式时的状态控制信号。
(2)总线接口电路该电路主要用于实现8255A与单片机芯片的信号连接。
它由两部份组成:
①数据总线缓冲器数据总线缓冲器为8位双向三态缓冲器,可以直接与MCS-51系统总线相连。
MCS-51进行I/O操作的有关数据、控制字和状态信息都是过该缓冲器进行传送。
②读/写控制逻辑这部份主要是与读写有关的控制信号,主要包括:
CS:
片选输入信号,低电平有效(8255A被选中)
RD:
读信号,输入,低电平有效(允许CPU从8255A读取数据或状态信息)
WR:
写信号,输入,低电平有效(允许CPU将控制字或数据写入8255A)
RESET:
复位信号,输入,高电平有效(8255A被复位,所有控制寄存器被清0,所有端口被置输入方式);
A1、A0:
端口选择信号,输入。
8255A的PA、PB、PC和一个控制寄存器,共有四个端口,根所A1A0输入的地址信号来进行寻址。
在利用8255A进行MCS-51的I/O扩展时,应
图188255引脚图
将A1A0和MCS-51的P0.1和P0.0相连。
读/写控制逻辑主要用于实现对8255A的硬件管理,其主要功能包括芯片选择、端口寻址及规定各端口和单片机之间的数据传送方向等,具体见表3。
表38255各端口组合功能表
(3)A、B组控制电路A、B组控制电路包括A组控制和B组控制,合在一起构成8位控制寄存器,用于存放各端口的工作方式控制字。
8255A的40个引脚中,除上述已提及的引脚外,还包括以下一些引脚:
GND:
接地;VCC:
+5V电源;
D0-D7:
双向8三态8位数据线;PA0-PA7:
A口8位双向数据线;PB0-PB7:
B口8位双向数据线;
PC0-PC7:
C口8位双向数据线。
当8255A工作于方式0时,PC0-PC7分为两组(每组
4位)并行I/O数据线。
当8255A工作于方式1或2时,PC0-PC7为PA、PB口提供联络和中断信号,这时PC口每根口线的的功能定义见表4。
表4工作方式1和工作方式2时PC口每根线的功能
二、8255A的工作方式及数据I/O操作
(1)8255A的工作方式8255A共有三种工作方式,即方式0、方式1和方式2。
①方式0(基本输入/输出方式)在这种工作方式下,PA、PB口及PC口的两个4位口中的任何一个端口都可以被编程设定为输入或输出方式,但不能既作输入又作输出。
在作为输入时,输入数据不被锁存,而作为输出时,数据被锁存。
在方式0时,不需要任何选通信号或联络信号。
方式0适用于数据的无条件传送,也可以人为指定某些位作为状态信息线,进行查询式传送。
②方式1(选通输入/输出)工作于方式1时,PA和PB口分别用于数据的输入/输出,PC口可以确定附加某些位作为PA和PB口的联络信号,以便8255A和外设之间,或者8255A与CPU之间传送状态信息以及中断请求信号。
在方式1中,PA、PB口的数据输入输出都具有锁存功能。
若PA口和PB口都工作于方式1,则PC口中有6位固定作为PA口和PB口的状态和控制信号,PC口剩下的2位可以编程为输入或输出。
若PA口、PB口中有1个工作于方式1,另一个工作于方式0,则PC口中有3位固定作为PA口或PB口的状态和控制信号,PC口剩下的5位可以编程为输入或输出。
方式1适用于查询中断方式的数据输入/输出。
方式2(双向数据传送方式)只有PA口才能选择这种方式。
此时,PA口既能输入数据又能输出数据,PC口的PC3-PC7用作PA口的输入/输出同步控控制信号。
在方式2下,PC口剩下的3位可编程为I/O线,而PB口可编程为方式0或方式1工作。
方式2适用于查询或中断方式的双向数据数据传送。
(2)数据的输入操作①用于数据输入操作的联络信号从表中可能看出PC口中用于数据输入操作的联络信号有:
STB:
选通脉冲输入、低电平有效。
外设送来的STB下降沿将端口数据线上的输入数据状态入端口锁存器;
IBF:
输出缓冲器满信号输出,高电平有效。
在此信号有效时,表示外设已将数据装入端口锁存器,但CPU尚未读取。
在CPU读取端口数据后,IBF将变为低电平,表示端口锁存器空。
INTR:
中断请求信号,高电平有效。
在IBF为高电平,STB信号由低变高时,中断请求信号有效,向MCS-51发出中断请求。
INTE:
8255A端口内部的中断允许触发器。
只有在INTE为高电平时才允许端口中断请求。
INTEA和INTEB分别由PC4、PC2的置位/复位控制。
②数据输入操作过程当外设准备好输入数据后,发出STB=0信号,输入的数据进入8255A的端口缓冲器,并使IBF=1。
如MCS-51采用查询的方式,此时CPU可以查询IBF这一状态,以决定是否可以输入数据。
如采用中断方式,当STB信号由低变高并且INTE为高时,INTR有效,向CPU发出中断请求信号(必须加反相将此信号变为低有效),MCS-51响应中断后,在执行中断服务程序时读入数据,并使INTR信号变为低电平(无效),同时也使IBF信号变低,用以通知外设再次输入数据。
(3)数据的输出操作
①用于数据输出操作的联络信号从表中可以看出8255A的PC口中用于数据输出操作的联络信号有:
ACK:
外设响应输入信号,低电平有效。
它是外设取走并且处理完8255A的数据后,向单片机发出的响应信号。
OBF:
输出,低电平有效,输出缓冲器满信号。
当CPU把输出数据写入8255A锁存器后,该信号有效,用来启动外设开始接收数据。
外设从端口取走数据后发回来的回答信号使OBF变为高电平。
INTR:
输出,高电平有效,中断请求信号。
INTE:
端口内部的中断允许触发器。
INTE为高电平时才允许端口提出中断请求。
INTEA和INTEB分别由PC6和PC2的置位/复位进行控制。
②数据输出操作过程当外设接收并处理完一组数据(如打印完毕)后,发出ACK信号使OBF变高,表示输出缓冲器已空(实际上表示缓冲器中的数据不必再保留)。
如采用查询方式,则OBF可作为状态信号供CPU查询使用;如使用中断方式,则在ACK信号变高且INTE信号有效时,使INTR有效,向单片机发出中断请求信号。
在中断服务过程中,CPU将下一下数据写到8255A的输出缓冲器,并使OBF有效,表示数据已送到。
利用这一信号启动外设开始工作,取走并处理8255A中的输入数据,再给出ACK信号。
三、8255A的控制字
8255A有两种控制字,即控制PA、PB和PC口工作方式的方式式控制字;专门用于控制PC口各位置位/复位的控制字。
这两种控制字都是写到控制寄存器中去,利用控制字的最高位来进行区别。
(1)方式控制字图5-19是8255A的工作方式控制字的格式,方式控制字用于确定各口的工作方式及数据传的方向,其特征为最高位为1。
在确定方式控制字时,应注意以下两点:
①A口有三种工作方式(方式0、方式1、方式2),而B口只有两种工作方式(方式0和方式1)。
②在方式1和方式2下,对PC口的定义(输入或输出)不影响作为联络线使用的PC口各位的功能。
例如,将PA口设置为方式0输入,PB口设置为方式1输出,PC4-PC7为输出,PC0-PC3为输入。
根据此工作要求,对照方式控制字的格式及各位的功能,可写出方式控制字为10010101B,即95H,然后,将95H写入控制寄存器即可。
(2)PC口位控制字在某些实际应用情况下,PC口被用来定义控制信号和状态信号(如对PC口内的中断允许触发器的开中断或关中断的设置)。
因此,可利用PC口所具有的位操作功能和PC口位置位/复位控制字,对PC口的每一位进行置位或复位(即将某一位置1或清0)。
图20给出了PC口位控制字的格式及其功能,PC口位控制字的特征位为0。
四、8255A与MCS-51单片机的连接
图21是8255A与MCS-51单片机连接的电路图。
从图中可以看出,8255A的总线与单片机的总线直接相连,WR和RD分别与单片机的和RD相连。
(1)8255A各端口地址的确定8255A的PA、PB、PC口和控制字寄存器的地址不仅和A1、A0有关,而且和8255A的片选有关。
只有在MCS-51选通8255A时,才能对寄存器和端口进行操作。
根据上述原则,可以确定出如图21所示8255A各端口的地址如表5所示
(2)8255A的初始化编程在利用8255A对MCS-51进行I/O扩展时,要先对8255A进行初始化。
所谓初始化,就是根据需要,将相应的控制字写入8255A的寄
图198255A工作方式控制字
图208255A复位控制字
存器中。
例如,若对8255A各口作如下设置:
PA口方式0输入,PB口方式1输出,PC口高4位输出,低4位输入,设控制寄存器地址为DFFFH。
按各口的工作要求,工作方式控制字为10010101B即95H,则初始化编程为:
MOVDPTR,#0DFFFHMOVA,#95HMOVX@DPTR,A
表5图21中端口地址的确定端口PAPBPC控制字寄存器P2××0×××××××0×××××××0×××××××0×××××P0××××××00××××××01××××××10××××××11端口地址DFFCHDFFDHDFFEHDFFFH注:
按一般习惯将所有的×取1即得到了端口地址五、8255A的简单应用对于图21的电路,将PA口设置为输出,PB口设置为输入,均工作于方式0,由此可以写出控制字为:
1000×01×,如果将×全取1,则控制字就是10001011即8BH。
VCCP2.5CSA1A0G74LS373MCS-51P0RDWRD0-D7LED7PALED0ALERDWRPBK0I/OPCGNDK7图218255A应用例如果要实现流水灯,可以这样来做:
ORG0000HJMPSTARTSTART:
MOVSP,#5FH;堆栈初始化MOVA,#8BH;方式控制字MOVDPTR,#0DFFFH;控制字端口的地址MOVX@DPTR,A;设置工作方式MOVA,#80HMOVDPTR,#0DFFCH;端口A的地址LOOP:
MOVX@DPTR,ACALLDELAY;调用延时子程序RLA;左移JMPLOOP;循环DELAY:
……;与第二章程序同,不再重复
其中CALL不是MCS-51的指令,最终会由汇编程序根据实际情况决定使用ACALL或LCALL指令。
如果上面的程序要实现按某键而灯亮,可以这样做:
ORG0000HJMPSTARTSTART:
MOVSP,#5FHMOVA,#8BHMOVDPTR,#0DFFFHMOVX@DPTR,ALOOP:
MOVDPTR,#0DFFDH;端口B的地址MOVXA,@DPTR;读B口的数据MOVDPTR,#0DFFCH;端口A的地址MOVX@DPTR,AJMPLOOP