1、1,第五章 MCS-51 单片机的硬件资源,5.1MCS-51单片机的并行I/O口及其应用 5.1.1单片机的并行I/O口 5.1.2端口操作方式应用举例 5.2 MCS-51单片机的中断系统 5.2.1中断技术概述 5.2 .2MCS-51中断系统结构 5.2.3 MCS-51中断处理过程 5.2.4 外部中断源的扩展,习题:1, 2, 4,5,2,MCS-51单片机共有4个8位双向并行输入/输出(I/O)口,分别为:P0、P1、P2、P3。这4个口可以并行输入或输出8位数据;也可以按位使用,即每一根输入/输出线都能独立的用作输入或输出。,5.1 .1MCS-51并行输入/输出接口,3,1、
2、P0口内部结构,4,一个数据输出锁存器和两个三态数据输入缓冲器。一个多路转接电路MUX在控制信号的作用下, MUX可以分别接通锁存器输出或地址/数据线。,1、 P0口内部结构,5,1地址/数据分时复用功能当P0口作为地址/数据分时复用总线时,对应的控制信号为1,MUX的开关打向上方,地址、数据信号通过与门与输出驱动电路的上拉场效应管(FET)接通,可从P0口输出地址或数据。当要从P0口输入数据时,引脚信息经输入缓冲器进入内部总线。,1、 P0口内部结构,6,2通用I/O接口功能当P0口作为通用I/O口使用时,在CPU向端口输出数据期间,对应的控制信号为0,封锁与门将输出驱动电路的上拉场效应管(
3、FET)截止,同时使MUX接通锁存器Q端的输出通路。当要从P0口输入数据时,引脚信息仍经输入缓冲器进入内部总线。,1、 P0口内部结构,7,P0口是为地址/数据线而设计的。P0口在有外部扩展存储器时被作为地址/数据总线口,此时是一个真正的双向口,简单;在没有外部扩展存储器时,P0口也可作为通用的I/O接口,但此时只是一个准双向口,而且是漏极开路结构。,1、 P0口内部结构,准双向口:有条件的双向口,即当向端口输入数据时,必须先使相应端口锁存器置1。漏极开路结构,需外接上拉电阻。麻烦!,为什么要先给锁存器置1?作通用I/O口用时,端口锁存器是通过多路开关(MUX)与输出场效应管连接的,如果这时锁
4、存器Q=0,则Q=1,它将使输出场效应管始终导通,引脚被钳为低电平,显然数据“1”不可能从下面的三态门输入。,作通用I/O口用时为什么是漏极开路形式?因为这时控制信号为“0”,它使端口输出级上面的场效应管始终截止,故处于漏极开路状态。即作通用I/O口用时需外接上拉电阻。,9,P1口内部结构如图2-9所示。 P1口是唯一专为作通用I/O口设计的。 输出部分有内部上拉电阻,故无需外接上拉电阻。 P1端口亦是准双向口(读引脚时先写入1)。,2、 P1和P2口内部结构,10,图5-2 P1 口内部结构如图,2、 P1和P2口内部结构,由图可见,锁存器输出端Q与引脚的逻辑状态应该是相同的。为什么要设置读
5、锁存器和读引脚两个内容?,在上图连接的情况下,若锁存器Q=1,引脚P1.X也应该为高电平。但由于接了一个三极管,引脚上电平被拉为0.6V左右,为低电平,如果这时读引脚将会出现错误,故须读锁存器。,12,P2口是为作高8位地址线而设计的。输出地址信息时,单片机完成外部的取指操作或对外部数据存储器16位地址的读写操作。当P2口作为普通I/O口使用时,也是准双向口,用法和P1口类似。,2 、P1和P2口内部结构,13,图5-3P2 口内部结构如图,2 、P1和P2口内部结构,14,P3口的特点在于为适应引脚信号第二功能的需要。对于第二功能为输出的信号引脚,当作为I/O使用时,第二功能信号引线应保持高
6、电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。当输出第二功能信号时,该位的锁存器应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。,3 、P3口内部结构,15,3、 P3口内部结构,图5-4 P3口1位结构图,16,5.1.2 51单片机的并行I/O口操作方式,由前面的讨论可知,51单片机的有4个8位并行I/O口,它们均各派有用场,即P0口用作地址/数据口、P2口用作高8位地址口、P1口用作通用I/O口和P3口用作第2功能口。但它们均可作通用I/O口使用,作通用I/O口使用时,均为准双向口,而且P0口还是漏极开路形式。对I/O端口的操作方式共有3种:输
7、出数据方式、读端口数据方式和读端口引脚方式。,在输出数据方式下,CPU通过一条数据操作指令就可以把输出数据写入P0P3的端口锁存器,然后通过输出驱动器送到端口引脚。因此,凡是端口操作指令都能达到从端口引脚上输出数据的目的。例如,下类指令均可在P0口输出数据:MOV P0,A ;累加器A中的内容送P0口。ANL P0,A ;P0口的内容和累加器A中内容相与后送P0口。,读端口数据方式是一种仅对端口锁存器中数据进行读入的操作方式,CPU读入的这个数据并非端口引脚的数据。因此,CPU只要用一条传送指令就可把端口锁存器中的数据读入累加器A或内部RAM中。例如,下类指令可以从P1口输入数据:MOV A,
8、P1 ;P1口锁存器中数据送A。MOV 20H,P1 ;P1口锁存器中数据送内部RAM区20H。,读引脚方式可从端口引脚上读入信息。在这种方式下,CPU首先必须使待读端口锁存器置1,以便使驱动器中的T2管截止,然后打开输入三态缓冲器,使相应端口引脚上信号输入CPU内部数据总线。因此,用户在读引脚时,必须使用两条指令。例如,读P1口低4位引脚上信号的程序应为:MOV P1,#0FH ;使P1口低4位锁存器置1MOV A,P1 ; 读P1口低4位引脚信号送累加器A,5.1.3 51单片机I/O端口简单应用举例,1、I/O口直接用于输入/输出在I/O口直接用作输入/输出时,既可以把它们看作数据口也看
9、作状态口,由用户根据实际情况需要决定。,例5-1 试编出模拟图5-2(a)中电路的程序。,设图(a)逻辑电路中的变量D和E分别由图(b)中P1.0和P1.1所接的开关K0和K1模拟,输出F由P1.2及其发光二极管电路状态模拟,并用P1.3所接的开关K的状态来模拟控制启动。,程序清单: ORG 0500HD BIT 00HE BIT 01HG BIT 02HLOOP1:ORL P1,#08H ;准备P1.3输入LOOP2: MOV C,P1.3 ;检测K2状态JC LOOP2 ;未准备好(K2断开),转LOOP2ORL P1,#03H ;准备好了(K2闭合),读入K0和K1状态,MOV C,P1
10、.0 ;K0状态送入DMOV D,C MOV C,P1.1 ;K1状态送入EMOV E,CANL C,D ;D与E后送GMOV G,CMOV C,D ;D或E后送CORL C,EANL C,G ;(DE)(DE) 送CMOV P1.2 ,C ;输出结果SJMP LOOP1 ;准备下次模拟END,2、I/O端口对外部锁存器的接口,图5-3所示为单片机8051通过8D锁存器74LS373和输入设备的接口电路。图中,当输入设备在IN0IN7上输出数据的同时还使(STB)选通端变为低电平。该低电平一方面使锁存器74LS373使能,锁存1D8D上输入的数据,另一方面向8051的INT0发出中断请求。单片
11、机响应该中断请求后,在中断服务程序中可通过如下指令读取输入数据:MOV DPTR ,#7FFFH ;DPTR指向74LS373端口MOV A, DPTR ;读入数据,问题: 1、这里单片机的P0口是作什么口,通用I/O口还是地址/数据口使用的? 2、为什么在单片机的P0口与外部设备之间要接一个8D锁存器? 3、在图示情况下单片机P0口还能不能接别的外部设备?,24,5.2.1 中断技术概述,中断概念的出现,是计算机系统结构设计中的重大变革。一个CPU资源要面向多个任务,出现资源竞争,中断技术实质上是一种资源共享技术。通常CPU的工作速度快,I/O设备工作速度慢,如果让它们同步工作,必然会出现C
12、PU等待I/O设备的情况,这对CPU无疑是一种浪费。引入了中断的概念就能解决这一问题。,25,5.2.1 中断技术概述,CPU正在执行程序时,单片机外部或内部发生的某一事件,请求CPU迅速去处理。 CPU暂时中止当前的工作,转去处理所发生的事件。完成中断服务程序后,再回到原来被中止的地方,继续原来的工作, 这样的过程称为CPU的中断响应过程。 对事件的整个处理过程如图5-1所示,称为中断处理。,26,5.2.1 中断技术概述,产生中断的请求源(即产生中断的外部和内部事件),称为中断源。中断源向CPU提出的处理请求,称为中断请求。中断方式优点:大大地提高了CPU的工作效率。,27,5.2.1 中
13、断技术概述,中断的功能: 实现CPU与外部设备的速度配合 实现实时控制 实现故障的及时发现及处理 实现人机联系,28,5.2.2 MCS-51中断系统结构,29,5.2 MCS-51中断系统结构,5个中断源分成2个中断优先级,可实现两级嵌套。用于中断控制和优先级设置的中断寄存器有4个:TCON、SCON、IE和IP。中断系统结构示意图如下图所示,30,5.2.2 MCS-51中断系统结构,31,5.2 .2MCS-51中断系统结构,五个中断请求源 : 1. 外部中断 INT0:外部中断0。 INT1:外部中断1。 2. 内部中断 定时器/计数器T0溢出中断请求。 定时器/计数器T1溢出中断请求
14、。 串行口中断请求。,32,5.2 .2MCS-51中断系统结构,一、中断标志INT0,INT1,T0 及 T1的中断标志存放在TCON寄存器中;定时器计数器控制寄存器TCON,字节地址为88H。,33,5.2.2 MCS-51中断系统结构,各标志位的功能 IT0:INT0的中断申请触发方式控制位。IT0=0,为电平触发方式。IT0=1,为负边沿触发方式。 IT1:INT1的中断申请触发方式控制位。意义与IT0类似。,34,5.2 .2MCS-51中断系统结构,IE0:外部中断请求0的中断请求标志。IE0=0,外部中断0无中断请求。IE0=1,外部中断0有中断请求。当CPU响应该中断,转向中断
15、服务程序时,由硬件清“0”。 IE1:外部中断请求1的中断请求标志位。意义与IE0类似。,35,5.2 .2MCS-51中断系统结构,TF0:T0溢出中断请求标志位。T0计数后,溢出时,由硬件置“1”TF0,向CPU申请中断,CPU响应TF0中断时,硬件自动清“0”TF0,TF0也可由软件清0。 TF1:T1的溢出中断请求标志位。功能和TF0类似。,36,5.2 .2MCS-51中断系统结构,2. 串行口的中断标志存放在 SCON寄存器中。 串行口控制寄存器SCON,字节地址为98H。,37,5.2.2 MCS-51中断系统结构,各标志位的功能 TI:发送中断请求标志位。串口每发送完一帧串行数
16、据后,硬件自动置“1”TI。响应中断后,必须在中断服务程序中用软件对TI标志清“0”。,38,5.2 .2MCS-51中断系统结构,RI接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”RI标志。响应中断后,必须在中断服务程序中用软件对RI标志清“0”。当MCS-51复位后,TCON、 SCON被清0,则CPU关中断,所有中断请求被禁止。,39,5.2 .2MCS-51中断系统结构,二、中断控制 1、 MCS-51对中断源的开放或屏蔽由中断允许寄存器IE控制。中断允许寄存器IE,字节地址为A8H。,40,5.2 .2MCS-51中断系统结构,IE对中断的开放和关闭为两级控制 中断允许总
17、控位EA:EA=0,所有中断请求被屏蔽。EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由对应的中断请求允许控制位决定。,41,5.2 .2MCS-51中断系统结构,IE寄存器中各位设置: 为0时,禁止中断; 为1时,允许中断。 IE中其余各位的功能如下 ES:串行口中断允许位。 ET1:定时/计数器T1的溢出中断允许位。,42,5.2 .2MCS-51中断系统结构,EX1:外部中断1中断允许位。 ET0:定时/计数器T0的溢出中断允许位。 EX0:外部中断0中断允许位。MCS-51复位后,IE清0,所有中断请求被禁止。改变IE的内容,可由位操作指令来实现,或用字节操作指令来编写
18、。,43,5.2 .2MCS-51中断系统结构,三、中断优先级控制 MCS-51两个高、低两个中断优先级,通过IP来设定。 中断优先级寄存器IP,其字节地址为B8H。,44,5.2 .2MCS-51中断系统结构,IP寄存器中各位设置: 为0时,低优先级中断; 为1时,高优先级中断。 IP中各位的功能: PS: 串行口中断优先级控制位。 PT1:定时器T1中断优先级控制位。,45,5.2 .2MCS-51中断系统结构,PX1:外部中断1中断优先级控制位。 PT0:定时器T0中断优先级控制位。 PX0:外部中断0中断优先级控制位。系统复位后IP寄存器中各位均为0,全部设定为低中断优先级。可由位操作
19、指令或用字节操作指令改变各中断源的中断优先级。,46,5.2.2 MCS-51中断系统结构,在中断执行过程中,高中断优先级可以中断低中断优先级的中断过程,反之则不能。 当CPU同时接收到两个不同优先级的中断请求时,先响应高优先级的中断;如果CPU同时接收到的是几个同一优先级的中断请求时,则由内部的硬件查询顺序确定它们的优先服务次序。,47,5.2 .2MCS-51中断系统结构,查询顺序如下:中断源 中断级别外部中断0 最高T0溢出中断外部中断1T1溢出中断串行口中断 最低,48,5.2.3 MCS-51中断处理过程,一、中断响应条件一个中断请求被响应,需满足以下必要条件: 有中断源发出中断请求
20、信号; 系统处于开中断状态:中断允许总控位 EA=1,且该中断源的中断允许位=1; 无同级或更高级中断正在被服务。,49,5.2.3 MCS-51中断处理过程,二、中断响应过程从中断请求发生直到被响应去执行中断服务程序,中断响应过程的时序如图所示:,50,5.2.3 MCS-51中断处理过程,1.中断采样在每个机器周期的S5P2期间: 针对外部中断请求信号进行中断采样,并置位相应的中断请求标志; 内部中断请求都发生在芯片内部,可以直接置位相应的中断请求标志。,51,5.2.3 MCS-51中断处理过程,2.中断查询CPU在下一机器周期的S6期间按优先级的顺序查询各中断标志。 先查询高级中断,再
21、查询低级中断。 同级中断按内部中断优先级序列查询。 如果查询到有中断标志位为“1” ,则表明有中断请求发生,接着从相邻的下一个机器周期的S1状态开始进行中断响应。,52,5.2.3 MCS-51中断处理过程,3.中断响应 首先由硬件自动生成一条长调用指令:LCALL addr16 addr16就是各中断源的中断矢量地址。 接着,由CPU执行该指令,将PC的内容压入堆栈以保护断点。,53,5.2.3 MCS-51中断处理过程,再将对应中断源的中断矢量地址装入PC,去执行中断服务程序。中断源 中断矢量地址外部中断0 0003H定时器/计数器T0 000BH外部中断1 0013H定时器/计数器T1
22、001BH串行口中断 0023H,54,5.2.3 MCS-51中断处理过程,中断服务程序由中断矢量地址开始执行,直至遇到RETI为止。执行RETI:一是撤销中断申请,弹出断点地址进入PC,恢复原程序的断点地址执行。二是恢复中断触发器原先状态。,55,5.2.3 MCS-51中断处理过程,中断响应是有条件的,在接受中断申请时,如遇下列情况之一时,硬件生成的长调用指令“LCALL”将被封锁: CPU正在执行同级或高一级的中断服务程序中; 查询中断请求的机器周期不是执行当前指令的最后一个周期。,56,5.2.3 MCS-51中断处理过程, 当前正在执行的指令是RETI指令或是访问IE、IP的指令。
23、MCS-51中断系统的特性规定,在执行完这些指令之后,必须再继续执行一条指令,然后才能响应中断。,57,5.2.3 MCS-51中断处理过程,三、中断响应时间一般来说,在单级中断系统中,中断的响应时间最短为3个机器周期: (1)中断请求标志位查询占1个机器周期。 (2)子程序调用指令LCALL转到相应的中断服务程序入口,需2个机器周期。,58,5.2.3 MCS-51中断处理过程,在单级中断系统中,中断的响应时间最长为8个机器周期。 (1)发生在CPU进行中断标志查询时,刚好是开始执行RETI或是访问IE或IP的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断。中断标志查询需要1个
24、机器周期,执行上述指令需要1个机器周期,共2个机器周期。,59,5.2.3 MCS-51中断处理过程,(2)接着再执行一条指令,按最长指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。 (3)加上硬件子程序调用指令LCALL的执行,需要2个机器周期。如果正在处理同级或优先级更高的中断,那么中断响应的时间还需取决于处理中的中断服务程序的执行时间,响应时间无法计算。,60,5.2.3 MCS-51中断处理过程,四、中断请求的撤除 1.由单片机内部硬件自动复位。对于T0、T1 的溢出中断和采用跳变触发方式的外部中断请求,在CPU响应中断后,由内部硬件自动清除中断标志TF0和TF1、IE
25、0和IE1,而自动撤除中断请求。,61,5.2.3 MCS-51中断处理过程,2应用软件清除相应标志。对于串行接收发送中断请求,在CPU响应中断后,必须在中断服务程序中应用软件清除RI、TI中断标志,才能撤除中断。,62,5.3 MCS-51中断处理过程,3采用外加 硬件结合软件清除中断请求。对于采用电平触发方式的外部中断请求,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在,在以后机器周期采样时又会把已清“0”的IE0、IE1标志重新置“1”,再次申请中断。,63,5.2.3 MCS-51中断处理过程,因此需在中断响应后把中断请求信号引脚从低电平强制改变为高电平。如图5-8所示。,
26、当外部中断源产生中断请求时,D触发器复位成“0”状态,Q端的低电平被送到INT0端,该低电平被单片机检测到后就使中断标志IE0置1。单片机响应INT0上中断请求便可转入INT0中断服务程序执行,故可以在中断服务程序开头安排如下程序来撤除INT0上的低电平。,INSVR: ANL P1,#0FEH ORL P1,#01HCLR IE0,单片机执行上述程序就可在P1.0上产生一个宽度为二个机器周期的负脉冲。在该负脉冲作用下,D触发器被置位成“1”状态,INT0上电平也因此而变高,从而撤除了其上的中断请求。,65,5.2.4 外部中断源的扩展,当外部中断源多于中断输入引脚时,可采取以下措施: 用一个
27、中断入口接受多个外部中断源,并加入中断查询电路。 用定时器计数输入信号端T0、T1作外部中断入口引脚。 用串行口接收端RXD作外部中断入口引脚。 用可编程外部中断扩展芯片,如8059A。,66,5.2.4 外部中断源的扩展,一、中断和查询结合的方法4个扩展外部中断源中有一个或几个出现高电平,反相器输出为0,引起INT0低电平触发中断,则CPU响应中断,转入0003H单元开始执行中断服务程序。 4个扩展外部中断源同时还连到P1口。连接电路如图:,67,5.2.4 外部中断源的扩展,68,5.2.4 外部中断源的扩展,软件查询程序INTS:MOV P1,#0FHMOV A,P1;读中断源寄存器JB
28、 ACC.0,SV1 ;查询高级中断请求JB ACC.1,SV2 ;查询低级中断请求SV1: ;中断服务程序1SV2: ;中断服务程序2,69,5.2.4 外部中断源的扩展,二、借用定时/计数器溢出中断扩展方法将空闲的定时/计数器设为计数器工作模式,计数初值设为FFH,当T0(或T1)引脚上发生负跳变时,T0(或T1)计数器加1,计数器溢出。利用该特性,可以把T0(或T1)引脚作为外部中断请求输入引脚,TF0(或TF1)作为外部中断请求标志。,70,5.2.4 外部中断源的扩展,相应初始化程序: IINI:MOV TMOD,#06H;设置T0的工作方式MOV TL0,#0FFH;设置计数器初值
29、 MOV TH0,#0FFH;SETB TR0 ;启动T0,开始计数SETB ET0 ;允许T0中断SETB EA ;CPU开中断,5.2.5中断系统的初始化,中断系统初始化就是用户对管理中断系统的特殊功能寄存器中的各控制位进行赋值。,中断系统初始化步骤如下:,(1)开相应中断源的中断;,(2)设定所有中断源的中断优先级;,(3)若为外部中断,则应规定低电平还是负边沿的中断触发方式。,例5.2 请写出INT0为低电平触发的中断系统初始化程序。,解: 采用位操作指令,SETB EA SETB EX0 ;开INT0中断 SETB PX0 ;令INT0为高优先级 CLR IT0 ;令INT0为电平触
30、发, 采用字节型指令,MOV IE,#81H ;开INT0中断 ORL IP,#01H ;令INT0为高优先级 ANL TCON,#0FEH ;令INT0为电平触发,73,5.2.6 MCS-51单片机的单步工作方式,单步工作方式,即单步执行:就是由外来脉冲控制程序的执行,使之达到来一个脉冲就执行一条指令的目的。而外来脉冲是通过按键产生的,因此实际上单步执行就是按一次键执行一条指令。,假定利用外部中断0来实现程序的单步执行,为此应事先作好两项准备工作:, 建立单步执行的外部控制电路;, 编写外部中断0的中断服务程序。,其初始化程序如下:,外部中断0的中断服务程序如下:,CLR IT0 ;设置外部中断0为电平触发 SETB EA ;CPU开中断SETB PX0 ;置外部中断0为高优先级SETB EX0 ;外部中断0开中断,JNB P3.2 , ;INT0=0则原地踏步 JB P3.2 , ;INT0=1则原地踏步 RETI ; 返回主程序,