370 likes | 599 Views
第 5 章 中断系统. 5.1 微机的输入 / 输出方式 程序控制传送方式 无条件传送方式 查询传送方式 中断传送方式 直接存储器存取方式 (DMA). 5.2 中断的概念. CPU 中止正在运行的程序,转向为外部设备服务的过程称为 中断 。当完成中断后, CPU 再回到原来的“ 断点 ”继续原来的程序。 中断是由外部产生,具有 随机性、不可知性 。. 主程序. 响应中断请求. 中断服务子程序. 断点. 继续执行主程序. 采用中断可 提高 CPU 的工作效率 , 实现以下功能 : 1. 分时操作 2. 实时处理 3. 故障处理. 返回主程序.
E N D
5.1 微机的输入/输出方式 程序控制传送方式 无条件传送方式 查询传送方式 中断传送方式 直接存储器存取方式(DMA)
5.2 中断的概念 • CPU中止正在运行的程序,转向为外部设备服务的过程称为中断。当完成中断后,CPU再回到原来的“断点”继续原来的程序。 • 中断是由外部产生,具有随机性、不可知性。 主程序 响应中断请求 中断服务子程序 断点 继续执行主程序 采用中断可提高CPU的工作效率,实现以下功能: 1.分时操作 2.实时处理 3.故障处理 返回主程序 RETI
一、中断系统结构 8051共有五个中断源,两个中断优先级 INT0-----外部中断0请求,通过P3.2脚输入 INT1-----外部中断1请求,通过P3.3脚输入 T0--------定时器/计数器0溢出中断请求 T1--------定时器/计数器1溢出中断请求 TX/RX ---串行口中断请求,当串行口完成一帧数据的发送或接收时,便请求中断 每个中断源都对应一个中断请求标志位,它们分别设置在TCON和SCON中。 5.3 8051的中断系统
INTA INTR 数据总线缓冲器 DB 控 制 逻 辑 RDWRA0 读 / 写逻辑 优先权电路 中断请求寄存器 IRR IR0 在服务寄存器 ISR :: CS IR7 CAS0CAS1CAS2 级连缓冲 / 比较器 中断屏蔽寄存器IMR 内部总线 SP / EN 中断控制器8259A方框图
MCS-51的中断系统结构图 返回优先级结构
定时器控制寄存器TCON (用6位) 串行口控制寄存器SCON (用2位) 中断允许寄存器IE 中断优先级寄存器IP 二、中断控制
中断请求标志 TCON中的中断标志位
SCON中的中断标志位 TI RI 串行口发送中断请求标志位 串行口接收中断请求标志位 SCON中的中断标志位
EA:总允许位。EA=0:禁止一切中断;EA=1中断开放。EA:总允许位。EA=0:禁止一切中断;EA=1中断开放。 ES:串行口中断允许位。ES=1:允许RI、TI引发中断; ES=0:禁止中断。 ET1、ET0:定时器T1、T0允许位。ET=1允许,=0禁止。 EX1、EX0:外中断/ int1、/int0允许位。 ET =1允许,=0禁止。 中断允许控制位(IE) 中断允许寄存器IE(0A8H)
中断优先级控制位(IP) • PS:串行口中断优先级设定位; • PT1、PT0:定时器T1、T0中断优先级设定位; • PX1、PX0:外中断 int1、0中断优先级设定位; • =1: 高优先级,=0:为低优先级。 中断优先级寄存器IP(0B8H)
例如, 某软件中对寄存器IE、 IP设置如下: MOV IE, # 8FH MOV IP, # 06H 则此时该系统中: · CPU中断允许; ·允许外部中断 0、 外部中断 1、 定时器 /计数器 0、 定时器 /计数器1提出的中断申请; ·允许中断源的中断优先次序为: 定时器 /计数器 0>外部中断 1>外部中断 0>定时器/计数器 1。
由于IP寄存器的设定,将5个中断源分为两个级别。中断的发生将遵循下面的3条基本原则:由于IP寄存器的设定,将5个中断源分为两个级别。中断的发生将遵循下面的3条基本原则: 1. 低级中断在响应执行中可被高级中断所中断,反之则不能。 2. 一个中断(不论是什么优先级)一旦得到响应,与它同级的中断则不能再中断它。 3. 当CPU同时收到几个同一级别的中断要求时,CPU响应哪个中断源取决于硬件的查询顺序(见图)。 优先级结构
如何改变中断源的优先级顺序 • 从中断系统的结构图可以清楚地看出同一级别中5个中断源的查询顺序。很明显,要改变这种顺序只能通过IP的设置。 • 如:要想将串行口的级别设为最高时,将IP中的PS置1。 即使用指令:setb ps 或 mov 0b8h,#10h 完成对IP设置。 IP寄存器
例: 能否由高到低安排下列中断源的优先级结构?定时器0 串行口中断 外部中断0 外部中断1 定时器1 解答:能。 设定时器0、串行口中断为高级别中断;设外部中断0、外部中断1 、定时器1为低级别中断。再由内部查询顺序即可得到。
在每一个机器周期中,所有的中断源都要按照其顺序检查一遍。到S6状态时,就查找到所有被激活的中断申请并排好优先权。在下一个机器周期的S1状态,只要不受阻断,就开始响应高级中断。在每一个机器周期中,所有的中断源都要按照其顺序检查一遍。到S6状态时,就查找到所有被激活的中断申请并排好优先权。在下一个机器周期的S1状态,只要不受阻断,就开始响应高级中断。 如果发生下列情况,中断将被阻止: 1,同级或高级中断正在执行时; 2,当前的机器周期不是指令的最后一个机器周期; 3,CPU正在执行的指令是RETI或访问IE、IP寄存器时,CPU是不会响应中断,而且要等到该指令的下一条指令执行完后中断才能响应。 三、中断查询与响应条件
四、中断响应过程 CPU查询到某一中断源后,使相应的“优先级激活触发器”置位,用以阻断同级或低级中断。 在硬件控制下,将当前程序计数器PC的内容——断点地址进栈,并将相应的中断矢量装入PC,使CPU转向对应的中断服务程序,同时清除中断请求标志(TI、RI除外)。 中断服务程序最后一条指令是RETI,它将清除“优先级激活触发器”,从堆栈中弹出断点地址并装入PC中,使CPU回到原来的主程序继续运行。 矢量入口的指令应当是转移指令。 0000H 0003H 000BH 0013H 001BH 0023H
1、上述过程只保护断点而不保护现场(如PSW的内容)。1、上述过程只保护断点而不保护现场(如PSW的内容)。 2、不能清除RI、TI以及外部输入申请信号/INT0和/INT1。 3、中断服务子程序的最后一条指令应是RETI,它将清除“优先级激活”触发器。 注意:
编程中应注意: (1) 在 0000H放一条跳转到主程序的跳转指令, 这是因为 MCS-51单片机复位后, PC的内容变为 0000H, 程序从 0000H 开始执行, 紧接着 0003H是中断程序入口地址, 故在此中间只能插入一条转移指令; (2) 响应中断时, 先自动执行一条隐指令“LCALL 0013H”, 而 0013H至 001BH(定时器 1 溢出中断入口地址)之间可利用的存储单元不够, 故放一条无条件转移指令。 (3) 在中断服务程序的末尾, 必须安排一条中断返回指令RETI, 使程序自动返回主程序。
在MCS-51引脚上有/INT0、/INT1两个外部的中断输入,作为外部事件的触发信号。在MCS-51引脚上有/INT0、/INT1两个外部的中断输入,作为外部事件的触发信号。 CPU在每一个机器周期对它们进行一次检测。 系统设定了两种触发方式: 边沿触发(下降沿); 电平触发(低电平)。 具体由TCON中的IT0、IT1来确定。 五、 外部中断 MCS-51 /INT0 /INT1
1. 边沿触发方式:在相邻的两个机器周期,如果第一次采集是高电平,第二次采集是低电平时,则TCON中的标志IE0或IE1置位。所以,在边沿触发方式时:外部设备发出的边沿信号(高电平和低电平)的时间应大于一个机器周期,否则信号将可能漏检。 2.“电平”触发方式:CPU采集到/INT0或/INT1的引脚为低电平时将激活中断。所以在这种触发方式中,外部的低电平至少应保留一个机器周期。 如果外电路的信号不能满足要求,可使用触发器解决。 MCS-51单片机对/INT信号的要求
以外中断电平触发为例:当CPU响应该中断并进入到服务程序后,在执行RETI返回主程序前,必须将外部的低电平撤掉,否则,当CPU返回主程序后,会因为外部的低电平信号而再次进入中断,使主程序无法正常运行。以外中断电平触发为例:当CPU响应该中断并进入到服务程序后,在执行RETI返回主程序前,必须将外部的低电平撤掉,否则,当CPU返回主程序后,会因为外部的低电平信号而再次进入中断,使主程序无法正常运行。 同理,其它中断源也存在类似的问题。所以在使用中断时必须清楚在响应某一中断时,其中断请求(标志)是否要撤除,如何撤除等问题。 六、中断请求的撤除
MCS-51的中断标志的撤除方法 注:此表指使用中断服务程序来处理中断事件时的情况。 如果采用查询的方法来处理事件时,都需要软件来清除标志。
CLR P1.0 MCS-51 INTX P1 .0 D型触发器 SETB P1.0 外部 设备 D Q CP S 服务程序 主体 外设(CP) 触发器Q P1.0 RETI 中断服务程序 撤除外部电平请求信号的方案
每个机器周期的S5P2时刻,INTx引脚的电平被锁存到内部寄存器中,待下一个周期查询。每个机器周期的S5P2时刻,INTx引脚的电平被锁存到内部寄存器中,待下一个周期查询。 1、最短时间:中断请求有效,查询后在下一个周期便开始执行一条硬件的子程序的调用(时间是两个周期),然后开始执行服务程序的第一条指令。这样从锁存电平的周期到执行中断服务程序,中间相隔3个机器周期。 C1 C2 C3 C4 C5 电平锁存 中断查询 长调用 执行入口地址中的指令 保护断点,关闭CPU中断 转移到中断的入口地址 七、中断响应时间(以外部中断INTx为例)
2、最长时间:如果中断信号发生在前面所说的3种情况时,响应时间就要变长:2、最长时间:如果中断信号发生在前面所说的3种情况时,响应时间就要变长: 第1种情况: 响应时间取决于正在执行的同级或高级中断的执行时间; 第2种情况: 指当前CPU执行的指令是多周期指令,如乘除法指令(4个周期),最坏情况,还要等3个周期。这样响应周期变为3+3=6个周期; 第3种情况: CPU当前执行的指令是RETI或访问IE、IP寄存器时,本指令(1个周期)没有响应,且下一条指令执行完后才能响应,这样附加的等待时间最长不会超过5个周期(1+4)。整个响应为5+3=8个周期。若为单中断源系统,整个中断响应的时间范围应当是:3~8个机器周期。
例1: 将P1口的P1.4~P1.7作为输入口,P1.0~P1.3作为输出口,要求利用8031将开关所设的数据读入单片机内,并依次通过P1.0~P1.3输出,驱动发光二极管,以检查P1.4~P1.7输入的电平情况.采用中断边沿触发方式,每次中断完成一次读/写操作. 5.4中断应用程序举例
ORG 0000H AJMP MAIN ORG 0003H AJMP INSER ORG 0030H MAIN: SETB EX0 SETB IT0 SETB EA HERE: SJMP HERE INSER: MOV A,#0F0H ;P1.4~P1.7为输入口 MOV P1,A MOV A,P1 SWAP A MOV P1,A RETI END
例2: 用中断电路实现系统的故障显示,当系统的各部分正常工作时,四个故障源的输入均为低电平,显示灯不亮,当某个部分出现故障时,则相应的低电平变为高电平,相应的灯亮。
ORG 0000H AJMP MAIN ORG 0003H AJMP INSER ORG 0030H MAIN: ANL P1,#55H SETB EX0 SETB IT0 SETB EA HERE: SJMP HERE INSER: JNB P1.0,L1 SETB P1.1 L1: JNB P1.2,L2 SETB P1.3 L2: JNB P1.4,L3 SETB P1.5 L3: JNB P1.6,L4 SETB P1.7 L4: RETI END
5.5.1 利用定时器扩展外部中断源 当设定时器为计数方式,计数初值设置为满量程FFH,一旦外部信号从计数器引脚输入一个负跳变时,计数器加1产生溢出中断从而可实现外部中断。 5.5.2 中断加查询扩展中断源 利用8051的两根外部中断输入线,每个中断输入线可以通过“线或”的关系连接多个外部中断源,同时利用输入端口线作为各中断源的识别线。 5.5 外部中断的扩展
ORG 0003H LJMP INTRP ;INT0中断服务程序入口 …. INTRP: PUSH PSW PUSH ACC JB P1.0,DV1 JB P1.1,DV2 JB P1.2,DV3 JB P1.3,DV4 EXIT: POP ACC POP PSW RETI DV1: …;装置1中断服务程序 AJMP EXIT DV2: …;装置2中断服务程序 AJMP EXIT DV3: …;装置3中断服务程序 AJMP EXIT DV4: …;装置4中断服务程序 AJMP EXIT
作业 P 95 2、9、12、 13 (2)、(4)