16.1MCS-51系列单片机并行接口6.1.1片内并行接口电路结构1.P0口P0口是8位双向三态输入/输出接口,P0口位结构图见下页,书上如图6-2(a)所示,P0口位结构图见下页。P0口既可作地址/数据总线使用,又可作通用I/O口用。连接外部存储器时,P0口一方面作为8位数据输入/输出口,另一方面用来输出外部存储器的低8位地址。作输出口时,输出漏极开路,驱动NMOS电路时应外接上拉电阻;作输入口之前,应先向锁存器写全“1”,使输出的两个场效应管均关断,引脚处于“浮空”状态,这样才能做到高阻输入,以保证输入数据的正确。正是由于该端口用作I/O口,输入时应先写全“1”,故称为准双向口。当P0口作地址/数据总线使用时,就不能再把它当通用I/O口使用。2(a)P0口位结构图32.P1口P1口是8位准双向口,作通用输入/输出口使用,P1口位结构图见下页,书上如图6-2(b)所示。在输出驱动器部分,P1口有别于P0口,它接有内部上拉电阻。P1口的每一位可以独立地定义为输入或者输出,因此,P1口既可以作为8位并行输入/输出口,又可作为8位输入/输出端。CPU既可以对P1口进行字节操作,又可以进行位操作。当作输入方式时,该位的锁存器必须预写全“1”。4(b)P1口位结构图53.P2口P2口是8位准双向输入/输出接口,P2口位结构图见下页,书上如图6-2(c)所示。P2口可作通用I/O口使用,与P1口相同。当外接程序存储器时,P2口给出地址的高8位,此时不能用作通用I/O。当外接数据存储器时,若RAM小于256B,用R0、R1作间址寄存器,只需P0口送出地址低8位,P2口可以用作通用I/O口;若RAM大于256B,必须用16位寄存器DPTR作间址寄存器,则P2口只能在一定限度内作一般I/O口使用。6(c)P2口位结构图74.P3口P3口也是一个8位的准双向输入/输出接口,如图6-2(d)所示。它具有多种功能。一方面,与P1口一样作为一般准双向输入/输出接口,具有字节操作和位操作两种工作方式;另一方面,8条输入/输出线可以独立地作为串行输入/输出口和其他控制信号线(详见MCS-51引脚功能部分)。8(d)P3口位结构图95.P0~P3端口的负载能力及接口要求P0口的输出级与P1~P3口的输出级在结构上是不同的,因此它们的负载能力和接口要求也各不相同。6.I/O口的读—修改—写特性读锁存器指令是从锁存器中读取数据,进行处理,并把处理以后的数据重新写入锁存器中,这类指令称为“读—修改—写”指令,例如ANLP1,A;读引脚指令一般都是以I/O端口为原操作数的指令,执行读引脚指令时,打开三态门,输入口状态。例如,读P1口的输入状态时,读引脚指令为:MOVA,P1。106.1.2扩展外部并行接口1.简单并行接口的扩展(1)用74LS377扩展8位输出端口(2)74LS373扩展一个8位并行输入口(3)用74LS273和74LS244扩展输入/输出口112.可编程并行接口的扩展(1)可编程并行接口芯片8255A的扩展及应用1)主要特性8255A采用双列直接式封装,单一的+5V电源,全部输入输出与TTL电平兼容,3个8位并行I/O端口,可编程工作在不同方式。因此,8255A连接外部设备时,通常不需要附加其他电路,使用方便灵活。2)内部结构①三个输入/输出端口②两组控制电路③数据总线缓冲器④读/写控制电路其内部结构框图见下页12图6-68255A内部结构框图133)引脚功能①数据线②地址线③控制线④I/O端口线⑤电源、地线144)控制字①工作方式选择控制字15②端口C位置/复位控制字165)8255A的初始化编程8255A的两个控制字都通过CPU的输出指令写入控制端口。用标志位来识别是工作方式选择控制字,还是端口C置位/复位控制字。通常放在程序中某个适当的位置。【例1】如图6-10所示,在8031系统中,8255A的A口用于驱动8个发光二极管L7~L0,B0接一开关K。要求根据读入的开关状态使L7~L0按不同规律发光,8255A的端口地址分别为:218H、219H、21AH、21BH。硬件连接图见下页17图6-10例1的硬件连接图18按题目要求可知:A口应工作在方式0,输出;B口应工作在方式0,输入。而当A口、B口都工作在方式0时与C口无关,则工作方式控制字可以是:1000×01×B。其中“×”表示可为1,也可为0。由此可见,这种情况下方式控制字不唯一,具体有四种情况:82H、83H、8AH、8BH。若我们选择方式控制字为82H,则初始化程序段如下:MOVDPTR,#21BH;DPTR指向8255A控制端口MOVA,#82H;工作方式控制字82H送AMOVX@DPTR,A;将工作方式控制字写入8255A控制端口19(2)可编程并行接口芯片8155A的扩展应用1)主要特性8155A为Intel公司的另一种可编程并行I/O接口芯片。它具有二个8位和一个6位I/O口,以及256个字节静态RAM、一个14位计数器。它与单片机的接口简单,在单片机系统中应用广泛。2)内部结构8155A的内部结构如图6-21所示。见下页20图6-218155A的结构框图213)引脚功能4)控制字和状态字(见下页)22图6-238155A命令寄存器格式23图6-248155A状态标志寄存器格式D7D6D5D4D3D2D1D0×TIMERINTBBFBINTRBINTEABFAINTRA5)内部定时器(8155A定时器的格式如下)图8-198155定时器的格式D7D6D5D4D3D2D1D0计数长度的低8位04H05HT7T6T5T4T3T2T1T0M2M1T13T12T11T10T9T8定时器方式计数长度的高6位24M1M2方式定时器输出波形00单方波01连续方波10单脉冲11连续脉冲图6-268155A定时器输出方式8155A定时器的格式中M2、M1用于设置定时器的输出方式,具体如图所示。256)8031与8155A的接口电路由于8155A内部设有地址锁存器,因此,它与8031的接口电路非常简单,不需任何附加电路。图6-27(见下页)是8031与8155A的一种接口电路,其RAM和I/O口的地址分配如下:数据存储器的地址:7E00H~7EFFHI/O口的地址:命令/状态寄存器7FF8HPA口7FF9HPB口7FFAHPC口7FFBH定时器低8位7FFCH定时器高8位7FFDH26图6-278031与8155A接口电路27分析:设8155A的A口、B口为基本输入输出方式,A口为输入,B口为输出,定时器输出连续方波,输入脉冲24分频,则8155A的初始化程序段为:MOVDPTR,#7FFCH;写计数初值低8位MOVA,#18HMOVX@DPTR,AINCDPTR;写定时器高6位和工作方式MOVA,#40H;定时器为连续方波输出MOVX@DPTR,AMOVDPTR,#7FF8HMOVA,#0C2H;置命令控制字:A口基本输入,B口基本输出MOVX@DPTR,A;启动定时器286.2MCS-51系列单片机中断系统6.2.1MCS-51系列单片机中断系统概述MCS-51系列单片机8051、8031、8751的中断系统中共有5个中断源,分别为外部中断0、外部中断1、定时器T0、定时器T1、串行接口(接收中断和发送中断为1个中断源)。它们的入口地址、中断允许控制、中断优先级的设置以及中断标志等见书上143页表6-3。中断系统结构见书上144页如图6-28所示。6.2.2中断源与中断控制1.中断源8051单片机的5个中断源包括两个外部中断源(INT0,INT1引脚输入),三个内部中断源(定时器T0,T1的溢出中断源和串行口的发送/接收中断源)。29(2)内部中断源TF0(TCON.5):定时器T0的溢出中断申请位。TF0实际上是T0中断触发器的一个输出端。T0被允许计数以后,从初值开始加1计数,当产生溢出时置TF0=1,向CPU请求中断,直到CPU响应该中断时才由硬件自动清零(也可由查询程序清零)。TF1(TCON.7):定时器T1的溢出中断申请位。实时器T1被允许计数以后,从初值开始加1计数,当产生溢出时置TF1=1,向CPU请求中断,直到CPU响应该中断时才由硬件自动清零(也可由查询程序清零)。SCON为串行口控制寄存器,SCON的低两位锁存串行口接收中断和发送中断标志RI和TI。302.中断控制(1)中断允许寄存器IE8051单片机中,特殊功能寄存器IE为中断允许寄存器,控制CPU对中断源的开或屏蔽(禁止),以及每个中断源是否允许中断,其格式见下图。IE(A8H)EX0ET0EX1ET1ES----EAb7b6b5b4b3b2b1b031(2)中断优先级寄存器IP8051单片机具有两个中断优先级,每个中断源可编程设定为高优先级中断或低优先级中断,并可实现二级中断嵌套。在8051中断系统中,内部有两个(用户不能访问的)优先级状态触发器,它们分别指出CPU是否在执行高优先级或低优先级中断服务程序,从而分别屏蔽所有的低级中断申请和同一级的其他中断源申请。特殊功能寄存器IP锁存各种中断优先级的控制位,用户可用软件设置优先级,其格式如下图所示。IP(B8H)PX0PT0PX1PT1PS---b7b6b5b4b3b2b1b032如果几个同级的中断源同时向CPU申请中断,CPU通过内部硬件查询登记序号,按自然优先级确定优先响应哪个中断请求。其内部登记序号是由硬件排队电路确定的,排列如下表所示。中断源同级内部优先级排列外部中断0最高级最低级定时器T0中断外部中断1定时器T1中断串行口中断336.2.3MCS-51中断系统的使用方法1.中断响应存在过程A、在下列任何一种情况存在时,中断申请将被封锁:(1)CPU正在执行一个同级或高一级的中断服务程序。(2)当前周期(即查询周期)不是执行当前指令的最后一个周期,即要保证把当前的一条指令执行完才会响应。(3)当前正在执行的指令是返回(RETI)指令或对IE、IP寄存器进行读/写指令,执行指令以后至少再执行一条指令才会响应中断。34B、在编写中断服务程序时应注意:(1)在中断矢量地址单元处放一条无条件转移指令,使CPU一旦响应中断,就能找到中断服务程序入口。若使用长跳转指令LJMP××××H),使中断服务程序被灵活地安排在64k字节程序存储器的任何空间。(2)在中断服务程序中,用户应注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器中的信息。(3)若要在执行当前中断程序时禁止更高优先级中断,可以先用软件关闭CPU中断(CLREA),或禁止某中断源中断,在中断返回前开放中断。2.外部中断响应时间356.2.4多个外部中断源的设计1.利用定时/计数器作为外部中断输入使用的方法MCS-51单片机片内有两个定时/计数器,如果把它们定义成计数器工作方式,则当T0(P3.4)或T1(P3.5)引脚上发生负跳变时,都将对计数器进行“+1”操作。利用这个特性可以把P3.4和P3.5引脚作外部中断请求输入线,而溢出标志TF0,TF1可用作这两个中断输入的请求标志。以T0为例,将定时/计数器用作外部中断源的初始化程序如下:MOVTMOD,#06H;T0计数方式,自动装载MOVTL0,#0FFH;置计数初值MOVTH0,#0FFH;SETBET0;T0开中断SETBEA;CPU开中断SETBTR0;启动T0工作36若系统中多于4个外部中断源或定时/计数器另作它用时,可以利用中断与查询相结合的方法。我们可以按它们的紧急程度进行优先级排队,把其中高优先级直接接到MCS-51的一个外部中断输入端,其余的中断源用线或的办法连到另一个外部中断输入端,同时还分别连到一个I/O口,其电路如图6-33所示。2.中断与查询相结合的方法37图6-33扩展多个外部中断38PINT1:MOVP1,#0FFH;设置P1口为输入端口PUSHPSW;保护现场PUSHACCJBP1.0,PDVT1;依次查询4个中断源JBP1.1,PDVT2JBP1.2,PDVT3;若是干扰信号引起的中断请求JBP1.