第4章 AT89S51单片机的中断系统_第1页
第4章 AT89S51单片机的中断系统_第2页
第4章 AT89S51单片机的中断系统_第3页
第4章 AT89S51单片机的中断系统_第4页
第4章 AT89S51单片机的中断系统_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 第第4章章 AT89S51单片机的中断系统单片机的中断系统 1 2 内容概要内容概要 u介绍片内功能部件介绍片内功能部件中断系统中断系统的的硬件结构硬件结构和和工作原理工作原理。 u掌握与中断系统掌握与中断系统有关的特殊功能寄存器有关的特殊功能寄存器以及中断系以及中断系 统的应用特性。统的应用特性。 u应能熟练地进行中断系统的应能熟练地进行中断系统的初始化编程初始化编程以及以及中断服中断服 务子程序的设计务子程序的设计。 3 4.1 AT89S51中断技术概述中断技术概述 中断技术主要用于中断技术主要用于实时监测与控制,实时监测与控制,要求单片机能要求单片机能 及时及时地地响应中断请求源响

2、应中断请求源提出的服务提出的服务请求请求,并作出快速响并作出快速响 应、及时处理。这是由片内的中断系统来实现的。应、及时处理。这是由片内的中断系统来实现的。 当中断请求源当中断请求源发出中断请求发出中断请求时,如果中断请求被允时,如果中断请求被允 许,单片机暂时中止当前正在执行的主程序,转到中断许,单片机暂时中止当前正在执行的主程序,转到中断 服务处理程序处理中断服务请求。服务处理程序处理中断服务请求。 3 4 中断服务处理程序处理完中断服务请求后,中断服务处理程序处理完中断服务请求后, 再回到原来被中止的程序之处(断点),继续再回到原来被中止的程序之处(断点),继续 执行被中断的主程序。执行

3、被中断的主程序。 图图4-1为整个中断响应和处理过程。为整个中断响应和处理过程。 5 5 图图4-1 中断响应和处理过程中断响应和处理过程 主程序主程序 断点断点 入入 口口 地地 址址 中断服务程序中断服务程序 7 如果单片机没有中断系统如果单片机没有中断系统,单片机的大量时单片机的大量时 间可能会间可能会浪费在查询是否有服务请求浪费在查询是否有服务请求发生的定时发生的定时 查询操作上。查询操作上。 采用中断技术完全采用中断技术完全消除了单片机在查询方式消除了单片机在查询方式 中的等待现象中的等待现象,大大地大大地提高了提高了单片机的单片机的工作效率工作效率 和和实时性实时性。 7 8 4.

4、2 AT89S51中断系统结构中断系统结构 中断系统结构图如图中断系统结构图如图4-2所示。所示。 中断系统有中断系统有5个个中断请求源中断请求源(简称中断源),(简称中断源), 2个中断优先级,个中断优先级,可实现可实现两级两级中断服务程序中断服务程序嵌套嵌套。 每一中断源可用软件独立控制为每一中断源可用软件独立控制为允许中断允许中断或或 关中断关中断状态,状态,中断优先级中断优先级均可用软件来设置。均可用软件来设置。 IE0 TCON SCON INT0 IT0=0 IT0=1 INT1 IT1=0 IT1=1 TF0 IE1 TF1 T0 T1 TI RI TXD RXDES ET0 E

5、X0 EX1 ET1 EA 自然优先级自然优先级 矢量矢量 地址地址 高级中断请求高级中断请求 自然优先级自然优先级 矢量矢量 地址地址 低级中断请求低级中断请求 PX0 PT0 PX1 PT1 PS IEIP 中断标中断标 志位志位 中断源中断源 允许允许 总允许总允许 中断中断 优先优先 级级 图图4-2 AT89S51的中断系统结构示意图的中断系统结构示意图 10 4.2.1 中断请求源中断请求源 由图由图4-2可见,可见,AT89S51中断系统共有中断系统共有5个中断请个中断请 求源:求源: (1)INT0*外部中断请求外部中断请求0,中断请求信号,中断请求信号 由由INT0* 引脚输

6、入,引脚输入,中断请求标志为中断请求标志为IE0。 (2)INT1*外部中断请求外部中断请求1,中断请求信号,中断请求信号 由由INT1*引脚输入,引脚输入,中断请求标志为中断请求标志为IE1。 10 11 (3)定时器定时器/计数器计数器T0计数溢出发出的中断请计数溢出发出的中断请 求,中断请求标志为求,中断请求标志为TF0。 (4)定时器定时器/计数器计数器T1计数溢出发出的中断请计数溢出发出的中断请 求,中断请求标志为求,中断请求标志为TF1。 (5)串行口串行口中断请求,中断请求标志为发送中中断请求,中断请求标志为发送中 断断TI或接收中断或接收中断RI。 12 4.2.2 中断请求标

7、志寄存器中断请求标志寄存器 中断源是否有中断请求,是由中断请求标志来中断源是否有中断请求,是由中断请求标志来 表示的。表示的。5个中断请求源的个中断请求源的中断请求标志中断请求标志分别由分别由 TCON和和SCON的相应位锁存的相应位锁存(见图(见图4-2)。)。 12 13 1. TCON寄存器寄存器 为为定时器定时器/计数器计数器的的控制寄存器,控制寄存器,字节地址为字节地址为88H,可可 位寻址。位寻址。特殊功能寄存器特殊功能寄存器TCON的格式如图的格式如图4-3所示。所示。 图图4-3 特殊功能寄存器特殊功能寄存器TCON的格式的格式 14 TCON各标志位功能如下:各标志位功能如下

8、: (1)TF1定时器定时器/计数器计数器T1的溢出的溢出中断请求标志位。中断请求标志位。 当当T1计数产生溢出时,由计数产生溢出时,由硬件使硬件使TF1置置“1”,向向 CPU申请中断。申请中断。CPU响应响应TF1中断时,中断时,TF1标志标志由硬由硬 件自动清件自动清“0”,TF1也可由软件清也可由软件清“0”。 (2)TF0定时器定时器/计数器计数器T0的溢出的溢出中断请求标志位,中断请求标志位, 功能与功能与TF1类似。类似。 14 15 (3)IE1外部中断请求外部中断请求1的的中断请求标志位。中断请求标志位。 (4)IE0外部中断请求外部中断请求0的的中断请求标志位,中断请求标志

9、位,功能与功能与 IE1类似。类似。 (5)IT1选择外部中断请求选择外部中断请求1为为跳沿触发跳沿触发还是还是电平触发。电平触发。 IT1=0,电平触发,电平触发方式,引脚方式,引脚 上上低电平有效,低电平有效,并把并把IE1置置 “1”。转向中断服务程序时,由。转向中断服务程序时,由硬件自动硬件自动把把IE1清清“0”。 IT1=1,跳沿触发,跳沿触发方式,加到引脚方式,加到引脚 上的外部中断请求输上的外部中断请求输 入信号电平从高到低的入信号电平从高到低的负跳变有效,负跳变有效,并把并把IE1置置“1”。转。转 向中断服务程序时,由向中断服务程序时,由硬件自动硬件自动把把IE1清清“0”

10、。 16 (6)IT0选择外部中断请求选择外部中断请求0为跳沿触发方式为跳沿触发方式 还是电平触发方式,其意义与还是电平触发方式,其意义与IT1类似。类似。 AT89S51复位复位后,后,TCON被清被清“0”,5个中断个中断 源的中断请求标志均为源的中断请求标志均为0。 TR1(D6位)、位)、TR0(D4位)这位)这2位与中断系位与中断系 统无关,统无关,将在第将在第6章定时器章定时器/计数器中介绍。计数器中介绍。 16 17 2. SCON寄存器寄存器 串行口控制寄存器,串行口控制寄存器,字节地址为字节地址为98H,可位寻址。,可位寻址。 低二位低二位锁存串行口的发送中断和接收中断的中断

11、请锁存串行口的发送中断和接收中断的中断请 求标志求标志TI和和RI,格式如图格式如图4-4所示。所示。 17 图图4-4 SCON中的中断请求标志位中的中断请求标志位 18 各标志位的功能:各标志位的功能: (1)TI串行口的串行口的发送发送中断请求标志位。中断请求标志位。每发送完每发送完一一 帧帧串行数据后,串行数据后,TI自动置自动置“1”。TI标志标志必须由软件清必须由软件清 “0”。 (2)RI串行口串行口接收接收中断请求标志位。中断请求标志位。串行口接收完串行口接收完 一个串行数据帧,硬件自动使一个串行数据帧,硬件自动使RI中断请求标志置中断请求标志置“1”。 必须必须在中断服务程序

12、中在中断服务程序中用指令对用指令对RI清清“0”。 19 4.3 中断允许与中断优先级的控制中断允许与中断优先级的控制 中断允许中断允许控制由中断允许寄存器控制由中断允许寄存器IE控制。控制。 中断优先级中断优先级控制由中断优先级寄存器控制由中断优先级寄存器IP控制。控制。 4.3.1 中断允许寄存器中断允许寄存器IE AT89S51的对各中断源的开放或屏蔽,是由中断允的对各中断源的开放或屏蔽,是由中断允 许寄存器许寄存器IE控制的。控制的。 IE字节地址为字节地址为A8H,可位寻址,可位寻址,格式如图格式如图4-5所示。所示。 19 20 图图4-5 中断允许寄存器中断允许寄存器IE的格式的

13、格式 IE对中断的开放和关闭实现对中断的开放和关闭实现两级控制。两级控制。 总的开关中断控制位总的开关中断控制位EA(IE.7位),位), EA=0时,所有的中断请求被屏蔽;时,所有的中断请求被屏蔽; EA=1时,开放中断,但时,开放中断,但5个中断源的中断请求是否允许,个中断源的中断请求是否允许, 还要由还要由IE中的低中的低5位位所所对应的对应的5个中断请求允许控制位个中断请求允许控制位的状态的状态 来决定(图来决定(图4-5)。)。 20 21 IE中各位功能如下:中各位功能如下: (1)EA中断允许中断允许总开关总开关控制位。控制位。 EA=0,所有的中断请求被屏蔽。所有的中断请求被屏

14、蔽。 EA=1,所有的中断请求被开放。所有的中断请求被开放。 (2)ES串行口中断允许位。串行口中断允许位。 ES=0,禁止串行口中断。禁止串行口中断。 ES=1,允许串行口中断。允许串行口中断。 (3)ET1定时器定时器/计数器计数器T1的溢出中断允许位。的溢出中断允许位。 ET1=0,禁止禁止T1溢出中断。溢出中断。 ET1=1,允许允许T1溢出中断。溢出中断。 21 22 (4)EX1外部中断外部中断1中断允许位。中断允许位。 EX1=0,禁止外部中断禁止外部中断1中断。中断。 EX1=1,允许外部中断允许外部中断1中断。中断。 (5)ET0定时器定时器/计数器计数器T0的溢出中断允许位

15、。的溢出中断允许位。 ET0=0,禁止禁止T0溢出中断。溢出中断。 ET0=1,允许允许T0溢出中断。溢出中断。 (6)EX0外部中断外部中断0中断允许位。中断允许位。 EX0=0,禁止外部中断,禁止外部中断0中断。中断。 EX0=1,允许外部中断允许外部中断0中断。中断。 23 AT89S51复位复位以后,以后,IE被清被清“0”,所有所有中断请求中断请求 被禁止。被禁止。IE中与各个中断源相应的位可用指令置中与各个中断源相应的位可用指令置“1” 或清或清“0”。 若使某一个中断源被允许中断,若使某一个中断源被允许中断,除了除了IE相应的位被相应的位被 置置“1”外,还必须使外,还必须使EA

16、位置位置“1”。 改变改变IE的内容,的内容,可由可由位操作指令位操作指令来实现(即来实现(即SETB bit;CLR bit),也可用),也可用字节操作指令字节操作指令实现。实现。 23 24 【例例4-1】 若允许片内若允许片内2个定时器个定时器/计数器中断,并禁计数器中断,并禁 止其他中断源的中断请求,请编写设置止其他中断源的中断请求,请编写设置IE的相应程序的相应程序 段。段。 (1)用位操作指令)用位操作指令 CLRES;禁止串行口中断;禁止串行口中断 CLREX0;禁止外部中断;禁止外部中断0中断中断 CLREX1;禁止外部中断;禁止外部中断1中断中断 SETBET0;允许定时器;

17、允许定时器/计数器计数器T0中断中断 SETBET1;允许定时器;允许定时器/计数器计数器T1中断中断 SETBEA ;总中断开关位开放;总中断开关位开放 (2)用字节操作指令)用字节操作指令 MOVIE,#8AH 上述两段程序对上述两段程序对IE的设置是相同的。的设置是相同的。 24 25 4.3.2 中断优先级寄存器中断优先级寄存器IP AT89S51的中断请求源有的中断请求源有两个中断优先级,两个中断优先级,由软件由软件 分别设置为分别设置为高高优先级中断优先级中断或或低低优先级中断,优先级中断,可实现:可实现: 两级中断嵌套两级中断嵌套 AT89S51正在执行低优先级中断的服务程序时,

18、可正在执行低优先级中断的服务程序时,可 被高优先级中断请求所中断,待高优先级中断处理完毕被高优先级中断请求所中断,待高优先级中断处理完毕 后,再返回低优先级中断服务程序。后,再返回低优先级中断服务程序。两级中断嵌套两级中断嵌套的的过过 程程如图如图4-6所示。所示。 25 2626 图图4-6 两级中断嵌套的过程两级中断嵌套的过程 27 各中断源的中断优先级关系,可归纳为各中断源的中断优先级关系,可归纳为两条基本规则:两条基本规则: (1)低低优先级优先级可被可被高高优先级优先级中断,中断,高高优先级优先级不能被不能被低低 优先级优先级中断。中断。如果某一中断源被设置为高优先级中断,则如果某一

19、中断源被设置为高优先级中断,则 不能被任何其他的中断源的中断请求所中断。不能被任何其他的中断源的中断请求所中断。 (2)任何一种任何一种中断中断一旦得到响应,一旦得到响应,不会被同级中断源不会被同级中断源 所中断。所中断。 中断优先级寄存器中断优先级寄存器IP,其其字节地址为字节地址为B8H,可可位寻址。位寻址。 只要用程序改变其内容,可进行各中断源只要用程序改变其内容,可进行各中断源中断优先级的设中断优先级的设 置,置,IP寄存器的格式如图寄存器的格式如图4-7所示。所示。 27 28 图图4-7 IP寄存器的格式寄存器的格式 中断优先级寄存器中断优先级寄存器IP各位的含义各位的含义如下:如

20、下: (1)PS串行口中断优先级控制位串行口中断优先级控制位 1:高优先级高优先级 0:低优先级低优先级 (2)PT1定时器定时器T1中断优先级控制位中断优先级控制位 1:高优先级高优先级 0:低优先级低优先级 28 29 (3)PX1外部中断外部中断1中断优先级控制位中断优先级控制位 1:高优先级高优先级 0:低优先级低优先级 (4)PT0定时器定时器T0中断优先级控制位中断优先级控制位 1:高优先级高优先级 0:低优先级低优先级 (5)PX0外部中断外部中断0中断优先级控制位中断优先级控制位 1:高优先级高优先级 0:低优先级低优先级 中断优先级控制寄存器中断优先级控制寄存器IP用位操作指

21、令或字节操作指令可用位操作指令或字节操作指令可 更新更新IP的内容,以改变中断优先级。的内容,以改变中断优先级。 AT89S51复位复位以后,以后,IP的的内容为内容为0,各个中断源各个中断源均为低优先均为低优先 级级中断。中断。 29 30 AT89S51的中断系统有的中断系统有两个两个不可寻址的不可寻址的“优先级激活优先级激活 触发器触发器”。 一个指示某高优先级一个指示某高优先级的的中断中断正在执行,所有后来的中正在执行,所有后来的中 断均被阻止;断均被阻止;另一个触发器指示某低优先级另一个触发器指示某低优先级的的中断中断正在正在 执行,所有同级的中断都被阻止,但不阻断高优先级的执行,所

22、有同级的中断都被阻止,但不阻断高优先级的 中断请求。中断请求。 在同时收到在同时收到几个同优先级的中断请几个同优先级的中断请求求时,哪一个中断时,哪一个中断 请求能优先得到响应,请求能优先得到响应,取决于内部的查询顺序。取决于内部的查询顺序。这相当这相当 于在同一个优先级内,还同时存在另一个辅助优先级结于在同一个优先级内,还同时存在另一个辅助优先级结 构,其查询顺序见表构,其查询顺序见表4-1。 30 31 表表4-1 同级中断的查询次序同级中断的查询次序 由此可见,各中断源在同一个优先级的条件下,由此可见,各中断源在同一个优先级的条件下,外外 部中断部中断0的中断优先权的中断优先权最高,最高

23、,串行口中断串行口中断优先权优先权最低。最低。 31 32 【例例4-2】 IP寄存器初始化,寄存器初始化,AT89S51的的两个外中断两个外中断请求请求 为为高优先级,其他中断请求为低优先级。高优先级,其他中断请求为低优先级。 (1)用位操作指令)用位操作指令 SETB PX0;外中断;外中断0设置为高优先级设置为高优先级 SETB PX1;外中断;外中断1设置为高优先级设置为高优先级 CLR PS;串行口设置为低优先级;串行口设置为低优先级 CLR PT0;定时器;定时器/计数器计数器T0为低优先级为低优先级 CLR PT1;定时器;定时器/计数器计数器T1为低优先级为低优先级 (2)用字

24、节操作指令)用字节操作指令 MOV IP,#05H 32 33 4.4 响应中断请求的条件响应中断请求的条件 中断请求被响应,中断请求被响应,必须满足以下必要条件:必须满足以下必要条件: (1)总中断允许总中断允许开关接通,即开关接通,即IE寄存器中的中断总允寄存器中的中断总允 许位许位EA=1。 (2)该中断源发出中断请求,即)该中断源发出中断请求,即对应的中断请求标志对应的中断请求标志 为为“1”。 (3)该中断源的)该中断源的中断允许位置中断允许位置“1”,即该中断被允许。即该中断被允许。 (4)无同级无同级或或更高级中断更高级中断正在被服务。正在被服务。 当当CPU查询到有效的中断请求

25、时,在满足上述条件时,查询到有效的中断请求时,在满足上述条件时, 紧接着就进行中断响应。紧接着就进行中断响应。 33 34 中断响应的过程:中断响应的过程: 首先由首先由硬件自动生成硬件自动生成一条长调用指令一条长调用指令“LCALL addr16”。 就是程序存储区中就是程序存储区中相应的中断入口地址。相应的中断入口地址。 例如,例如,对于外部中断对于外部中断1的响应,硬件自动生成的长调用指的响应,硬件自动生成的长调用指 令为令为 LCALL 0013H 首先将程序计数器首先将程序计数器PC的内容的内容压入堆栈压入堆栈以保护断点,再将以保护断点,再将 中断入口地址装入中断入口地址装入PC,使

26、程序转向响应中断请求的中断入使程序转向响应中断请求的中断入 口地址。口地址。 各中断源服务程序的各中断源服务程序的入口地址,入口地址,如表如表4-2所示。所示。 34 35 表表4-2 中断入口地址表中断入口地址表 两个中断入口间只相隔两个中断入口间只相隔8字节,字节,难以安放一个完整的难以安放一个完整的 中断服务程序。因此,中断服务程序。因此,通常在中断入口地址处通常在中断入口地址处放置一放置一 条无条件转移指令,条无条件转移指令,使程序执行转向使程序执行转向中断服务程序入中断服务程序入 口。口。 35 36 中断响应是有条件的,当遇到下列中断响应是有条件的,当遇到下列三种情况三种情况之一时

27、,中之一时,中 断响应被断响应被封锁:封锁: (1)CPU正在处理同级或更高优先级正在处理同级或更高优先级的中断。的中断。 (2)所查询的机器周期)所查询的机器周期不是当前正在执行指令的最后一不是当前正在执行指令的最后一 个机器周期。个机器周期。只有在当前指令执行完毕后,才能进行中断只有在当前指令执行完毕后,才能进行中断 响应,以响应,以确保确保当前当前指令执行的完整性。指令执行的完整性。 (3)正在执行的指令是)正在执行的指令是RETI或是或是访问访问IE或或IP的指令。的指令。 因为按照因为按照AT89S51中断系统的规定,在执行完这些指令后,中断系统的规定,在执行完这些指令后, 需要再执

28、行完一条指令,才能响应新的中断请求。需要再执行完一条指令,才能响应新的中断请求。 如果存在上述三种情况之一,如果存在上述三种情况之一,CPU将丢弃中断查询结果,将丢弃中断查询结果, 不能对中断进行响应。不能对中断进行响应。 36 37 4.5 外部中断的响应时间外部中断的响应时间 使用使用外部中断外部中断时,需考虑从时,需考虑从外部中断请求到转向中外部中断请求到转向中 断入口地址所需的时间。断入口地址所需的时间。 外部中断的外部中断的最短最短响应时间为响应时间为3个机器周期个机器周期。其中中断其中中断 请求请求标志位查询占标志位查询占1个个机器周期,机器周期,而这个机器周期而这个机器周期恰好恰

29、好 处于指令的最后一个机器周期。处于指令的最后一个机器周期。在这个机器周期结束后,在这个机器周期结束后, 中断即被响应,中断即被响应,CPU接着执行一条接着执行一条硬件子程序调用指令硬件子程序调用指令 LCALL到相中断服务程序入口,到相中断服务程序入口,需要需要2个个机器周期。机器周期。 37 38 外部中断响应的外部中断响应的最长最长时间为时间为8个机器周期。个机器周期。在在CPU 进行中断标志查询时,刚好才开始执行进行中断标志查询时,刚好才开始执行RETI或访问或访问IE 或或IP的指令,需执行完指令再继续执行一条指令后,才的指令,需执行完指令再继续执行一条指令后,才 响应中断。响应中断

30、。 执行执行RETI或访问或访问IE或或IP的指令,最长需要的指令,最长需要2个机器个机器 周期。周期。 接着再执行一条指令,最长指令(乘法指令接着再执行一条指令,最长指令(乘法指令MUL 和除法指令和除法指令DIV)来算,也只有)来算,也只有4个个机器周期。机器周期。再加上硬再加上硬 件子程序调用指令件子程序调用指令LCALL的执行,需要的执行,需要2个个机器周期,机器周期, 所以,外部中断响应的最长时间为所以,外部中断响应的最长时间为8个机器周期。个机器周期。 39 如果已经在如果已经在处理同级或更高级中断,处理同级或更高级中断,外部中外部中 断请求的响应时间取决于正在执行的中断服务程断请

31、求的响应时间取决于正在执行的中断服务程 序的处理时间,这种情况下,序的处理时间,这种情况下,响应时间就无法计响应时间就无法计 算了。算了。 这样,在一个这样,在一个单一中断单一中断的系统里,的系统里,AT89S51 单片机对外部中断请求的响应时间总是在单片机对外部中断请求的响应时间总是在38个个 机器周期机器周期之间。之间。 39 40 4.6 外部中断的触发方式选择外部中断的触发方式选择 两种触发方式:两种触发方式:电平触发电平触发方式和方式和跳沿触发跳沿触发方式。方式。 4.6.1 电平触发方式电平触发方式 外部中断申请触发器的状态随着外部中断申请触发器的状态随着CPU在每个机器周期在每个

32、机器周期 采样到的外部中断输入引脚的电平变化而变化。采样到的外部中断输入引脚的电平变化而变化。 在在中断服务程序返回之前,外部中断请求输入必须无中断服务程序返回之前,外部中断请求输入必须无 效效(即外部中断请求输入已由低电平变为高电平),否(即外部中断请求输入已由低电平变为高电平),否 则会再次响应中断。则会再次响应中断。 所以本方式所以本方式适合于适合于外部中断外部中断以低电平输入以低电平输入且中断服务且中断服务 程序能程序能清除外部中断请求源清除外部中断请求源(即外部中断输入电平又变(即外部中断输入电平又变 为高电平)的情况。为高电平)的情况。 40 41 4.6.2 跳沿触发方式跳沿触发

33、方式 外部中断申请触发器能外部中断申请触发器能锁存外部中断输入线上的锁存外部中断输入线上的负跳负跳 变。变。即使不能响应,中断请求标志不丢失。即使不能响应,中断请求标志不丢失。 相继连续两次采样,一个机器周期为高,下一个机器相继连续两次采样,一个机器周期为高,下一个机器 周期采样为低,则中断申请触发器置周期采样为低,则中断申请触发器置1,直到,直到CPU响应响应 此中断时,才清此中断时,才清0。 输入的输入的负脉冲宽度负脉冲宽度至少保持至少保持12个时钟周期,个时钟周期,才能被采才能被采 样到。样到。适合适合于以于以负脉冲形式负脉冲形式输入的外部中断请求。输入的外部中断请求。 41 42 4.

34、7 中断请求的撤销中断请求的撤销 某中断请求某中断请求被响应后,就存在被响应后,就存在着中断请求着中断请求的撤销问题的撤销问题。 1. 定时器定时器/计数器中断请求的撤销计数器中断请求的撤销 硬件自动硬件自动把中断请求标志位(把中断请求标志位(TF0或或TF1)清清0,自动自动 撤销。撤销。 2. 外部中断外部中断请求的撤销请求的撤销 (1)跳沿方式外部中断请求的撤销)跳沿方式外部中断请求的撤销 包括两项:包括两项:中断标志位清中断标志位清0和和外中断信号的撤销。外中断信号的撤销。 中断标志位清中断标志位清0是在中断响应后由是在中断响应后由硬件自动完成硬件自动完成的。的。 外中断请求信号的撤销

35、,外中断请求信号的撤销,由于跳沿信号过后也就消失由于跳沿信号过后也就消失 了,了,自动撤销。自动撤销。 42 43 (2)电平方式外部中断请求的撤销)电平方式外部中断请求的撤销 电平方式外中断请求的撤销,其电平方式外中断请求的撤销,其中断请求标志自动撤销,中断请求标志自动撤销, 但中断请求信号的低电平可能继续存在,为此,除了标志位但中断请求信号的低电平可能继续存在,为此,除了标志位 清清“0”之外,还需在中断响应后之外,还需在中断响应后把中断请求信号输入引脚从把中断请求信号输入引脚从 低电平低电平强制改变为强制改变为高电平,高电平,如图如图4-8所示。所示。 43 图图4-8 电平方式的外部中

36、断请求的撤销电路电平方式的外部中断请求的撤销电路 44 由图由图4-8,用,用D触发器锁存触发器锁存外来的中断请求外来的中断请求低电平低电平,并通并通 过过D触发器的输出端触发器的输出端Q接到接到 INT0* (或(或 INT1* )。所以,)。所以, 增加的增加的D触发器不影响中断请求。触发器不影响中断请求。 中断响应后,利用中断响应后,利用D触发器的触发器的SD端接端接AT89S51的的P1.0端。端。 因此,只要因此,只要P1.0端端输出一个负脉冲输出一个负脉冲就可以使就可以使D触发器置触发器置 “1”,撤销低电平的中断请求信号。撤销低电平的中断请求信号。 负脉冲负脉冲可在中断服务程序中

37、增加如下指令:可在中断服务程序中增加如下指令: ORL P1,#01H;P1.0为为“1” ANL P1,#0FEH;P1.0为为“0” ORL P1,#01H;P1.0为为“1” 44 45 3. 串行口串行口中断请求的撤销中断请求的撤销 响应串行口的中断后,响应串行口的中断后,CPU无法知道是接收中断还是无法知道是接收中断还是 发送中断,还需测试这两个中断标志位,以发送中断,还需测试这两个中断标志位,以判定是接收判定是接收 操作还是发送操作,操作还是发送操作,然后才清除。所以串行口中断请求然后才清除。所以串行口中断请求 的撤销的撤销只能使用只能使用软件软件的方法,的方法,在中断服务程序中进

38、行,在中断服务程序中进行, 即用如下指令在中断服务程序中对串行口中断标志位进即用如下指令在中断服务程序中对串行口中断标志位进 行清除:行清除: CLR TI ;清;清TI标志位标志位 CLR RI ;清;清RI标志位标志位 45 46 4.8 中断服务子程序的设计中断服务子程序的设计 1中断服务子程序设计的任务中断服务子程序设计的任务 任务有下列任务有下列4条:条: (1)设置中断允许控制寄存器设置中断允许控制寄存器IE,允许相应中断请允许相应中断请 求源中断。求源中断。 (2)设置中断优先级寄存器设置中断优先级寄存器IP,确定所使用的中断确定所使用的中断 源优先级。源优先级。 (3)若是外部

39、中断源,若是外部中断源,还要设置中断请求的还要设置中断请求的触发方触发方 式式决定采用电平触发方式还是跳沿触发方式。决定采用电平触发方式还是跳沿触发方式。 (4)编写中断服务子程序,编写中断服务子程序,处理中断请求。处理中断请求。 46 47 前前3条一般放在主程序的初始化程序段中。条一般放在主程序的初始化程序段中。 【例例4-3】 假设假设允许允许外部中断外部中断0中断,中断,设定为设定为高级高级中断,中断, 采用采用跳沿触发跳沿触发方式,方式,其他中断源为低级中断。其他中断源为低级中断。初始化初始化 程序如下:程序如下: SETB EA; EA 位置位置1, 总中断开关位开放总中断开关位开

40、放 SETB EX0;EX0位置位置1,允许外部中断,允许外部中断0产生中断产生中断 SETB PX0;PX0位置位置1, 外部中断外部中断0为高优先级中断为高优先级中断 SETB IT0; IT0位置位置1, 外部中断外部中断0为跳沿触发方式为跳沿触发方式 47 48 2采用中断时的主程序结构采用中断时的主程序结构 程序必须先从程序必须先从主程序起始地址主程序起始地址0000H执行。所以,在执行。所以,在 0000H起始地址的几个字节中,起始地址的几个字节中,用用无条件转移指令,无条件转移指令,跳向跳向 主程序。主程序。 另外,各中断入口地址之间依次相差另外,各中断入口地址之间依次相差8字节

41、,中断服务字节,中断服务 子程序稍长就超过子程序稍长就超过8字节,这样中断服务子程序就占用了字节,这样中断服务子程序就占用了 其他的中断入口地址,影响其他中断源的中断处理。为此其他的中断入口地址,影响其他中断源的中断处理。为此 一般一般在进入中断后,用在进入中断后,用一条无条件转移指令,一条无条件转移指令,把中断服务把中断服务 子程序子程序跳转到跳转到远离其他中断入口远离其他中断入口的的入口地址入口地址处。处。 48 49 常用的常用的主程序结构主程序结构如下:如下: ORG 0000H LJMP MAIN ORG X1X2X3X4H ;某;某中断源的中断入口中断源的中断入口 LJMP INT

42、 ;INT为某中断源的为某中断源的中断入口标号中断入口标号 ORG Y1Y2Y3Y4H ;Y1Y2Y3Y4H为为主程序入口主程序入口 MAIN: 主程序主程序 INT: 中断服务子程序中断服务子程序 注意:注意:如果有多个中断源,就有多个如果有多个中断源,就有多个“ORG X1X2X3X4H” 的入口地址,多个的入口地址,多个“中断入口地址中断入口地址”必须依次由小到大必须依次由小到大 排列。排列。主程序主程序MAIN的起始地址的起始地址Y1Y2Y3Y4H,根据具体情,根据具体情 况来安排。况来安排。 49 50 3中断服务子程序的流程中断服务子程序的流程 中断服务子程序的基本中断服务子程序的

43、基本 流程如图流程如图4-9所示。下面所示。下面 对有关中断服务子程序对有关中断服务子程序 执行过程中的一些问题执行过程中的一些问题 进行说明。进行说明。 50 图图4-9 中断子服务程序的基本流程中断子服务程序的基本流程 51 (1)现场保护和现场恢复)现场保护和现场恢复 现场现场是指单片机中是指单片机中某些寄存器某些寄存器和和存储器单元存储器单元中的中的数据数据或或状状 态。态。为使中断服务子程序的执行不破坏这些数据或状态,因为使中断服务子程序的执行不破坏这些数据或状态,因 此要此要送入堆栈保存送入堆栈保存起来,这就是起来,这就是现场保护。现场保护。 现场保护现场保护一定要一定要位于位于中

44、断处理程序的中断处理程序的前面。前面。中断处理结束中断处理结束 后,在返回主程序前,则需要把保存的现场内容从堆栈中弹后,在返回主程序前,则需要把保存的现场内容从堆栈中弹 出恢复原有内容,这就是出恢复原有内容,这就是现场恢复。现场恢复。 现场恢复现场恢复一定要一定要位于位于中断处理的中断处理的后面。后面。 AT89S51的堆栈操作指令:的堆栈操作指令: “PUSH direct”和和“POP direct”,是供现场保护和现,是供现场保护和现 场恢复使用的。场恢复使用的。 51 52 (2)关中断和开中断)关中断和开中断 现场保护前现场保护前和和现场恢复前现场恢复前关中断,关中断,是为防止此时有

45、高一级的是为防止此时有高一级的 中断进入,避免现场被破坏。中断进入,避免现场被破坏。 现场现场保护和现场恢复之后保护和现场恢复之后的的开中断开中断是为下一次的中断做好准是为下一次的中断做好准 备,也为了允许有更高级的中断进入。这样,中断处理可以被备,也为了允许有更高级的中断进入。这样,中断处理可以被 打断,但原来的现场保护和现场恢复不允许更改,除了现场保打断,但原来的现场保护和现场恢复不允许更改,除了现场保 护和现场恢复的片刻外,仍然保持着中断嵌套的功能。护和现场恢复的片刻外,仍然保持着中断嵌套的功能。 但有时候,一个重要的中断,必须执行完毕,不允许被其他但有时候,一个重要的中断,必须执行完毕

46、,不允许被其他 的中断嵌套。的中断嵌套。可在现场保护前先关闭总中断开关位,待中断处可在现场保护前先关闭总中断开关位,待中断处 理完毕后再开总中断开关位。这样,需把图理完毕后再开总中断开关位。这样,需把图4-9中的中的“中断处中断处 理理”步骤前后的步骤前后的“开中断开中断”和和“关中断关中断” 去掉。去掉。 52 53 (3)中断处理)中断处理 应用设计者根据任务的具体要求,来编写中断处理部应用设计者根据任务的具体要求,来编写中断处理部 分的程序。分的程序。 (4)中断返回)中断返回 中断服务子程序中断服务子程序最后一条指令必须是返回指令最后一条指令必须是返回指令RETI。 CPU执行完这条指

47、令后,执行完这条指令后,把响应中断时所置把响应中断时所置1的不可寻址的不可寻址 的优先级状态触发器清的优先级状态触发器清0,然后从堆栈中弹出栈顶上的两然后从堆栈中弹出栈顶上的两 个字节的断点地址送到程序计数器个字节的断点地址送到程序计数器PC,弹出的第一个字,弹出的第一个字 节送入节送入PCH,弹出的第二个字节送入,弹出的第二个字节送入PCL,从断点处重,从断点处重 新执行主程序。新执行主程序。 53 54 【例例4-4】 根据图根据图4-9流程,编写中断服务程序。设现场保护流程,编写中断服务程序。设现场保护 只将只将PSW寄存器和累加器寄存器和累加器A的内容压入堆栈中保护。一个典型的内容压入

48、堆栈中保护。一个典型 的中断服务子程序如下:的中断服务子程序如下: INT:CLR EA ;CPU关中断关中断 PUSH PSW;现场保护;现场保护 PUSH Acc SETB EA;总中断允许;总中断允许 中断处理段中断处理段 CLR EA;关中断;关中断 POP Acc;现场恢复;现场恢复 POP PSW SETB EA;总中断允许;总中断允许 RETI;中断返回,恢复断点;中断返回,恢复断点 54 55 上述程序上述程序几点说明:几点说明: (1)本例的)本例的现场保护假设仅仅涉及现场保护假设仅仅涉及PSW和和A的内容,的内容, 如有其他需要保护的内容,只需在相应位置再加几条如有其他需要

49、保护的内容,只需在相应位置再加几条 PUSH和和POP指令即可。注意,堆栈的操作是先进后出。指令即可。注意,堆栈的操作是先进后出。 (2)“中断处理程序段中断处理程序段”,设计者应根据中断任务的,设计者应根据中断任务的 具体要求,来编写中断处理程序。具体要求,来编写中断处理程序。 (3)如果不允许被其他的中断所中断,可将)如果不允许被其他的中断所中断,可将“中断处中断处 理程序段理程序段”前后的前后的“SETB EA”和和“CLR EA”两条指两条指 令去掉。令去掉。 (4)最后一条指令必须是返回指令最后一条指令必须是返回指令RETI,不可缺少,不可缺少, CPU执行完这条指令后,返回断点处,

50、重新执行被中断的执行完这条指令后,返回断点处,重新执行被中断的 主程序。主程序。 55 56 4.9 多外部中断源系统设计多外部中断源系统设计 实际的应用中,实际的应用中,两个外部中断请求源往往不够用,两个外部中断请求源往往不够用,需对需对 外部中断源进行扩充,如图外部中断源进行扩充,如图4-10所示。系统有所示。系统有5个外部中个外部中 断请求源断请求源IR0IR4,高电平有效。高电平有效。 最高级的请求源最高级的请求源IR0直接接到直接接到AT89S51的一个外部中断的一个外部中断 请求输入端请求输入端 INT0*,其余,其余4个请求源个请求源IR1IR4通过各自的通过各自的 OC门(集电

51、极开路门)连到门(集电极开路门)连到AT89S51的另一个外中断源的另一个外中断源 输入端输入端 INT1* ,同时还连到,同时还连到P1口的口的P1.0P1.3脚,供脚,供 AT89S51查询。查询。 图图4-10所示电路,除了所示电路,除了IR0优先权级别最高优先权级别最高外,外,其余其余4个个 外部中断源外部中断源的中断优先权的中断优先权取决于查询顺序取决于查询顺序。 56 5757 图图4-10 中断和查询相结合的多外部中断请求源系统中断和查询相结合的多外部中断请求源系统 58 若若图图4-10中的中的4个外设中有一个外设提出高电平有效的个外设中有一个外设提出高电平有效的 中断请求信号

52、,则中断请求通过中断请求信号,则中断请求通过4个集电极开路个集电极开路OC门的输门的输 出公共点,即出公共点,即INT1*脚的电平就会变低。究竟是哪个外设脚的电平就会变低。究竟是哪个外设 提出的请求,要提出的请求,要通过程序查询通过程序查询P1.0P1.3引脚上的逻辑电引脚上的逻辑电 平平来确定。来确定。 本例假设某一时刻只能有一个外设提出中断请求,并设本例假设某一时刻只能有一个外设提出中断请求,并设 IR1IR4这这4个中断请求源的高电平可由相应的中断服务个中断请求源的高电平可由相应的中断服务 子程序清子程序清“0”,则中断服务子程序如下:,则中断服务子程序如下: ORG0013H ; IN

53、T1*的中断入口的中断入口 LJMPINT1 ORG0100H 58 59 INT1:PUSH PSW ;保护现场;保护现场 PUSH Acc JB P1.0,IR1 ;如;如P1.0为高,则为高,则IR1有请求,跳有请求,跳 IR1处理处理 JB P1.1,IR2 ;如;如P1.1为高,则为高,则IR2有请求,跳有请求,跳 IR2处理处理 JB P1.2,IR3 ;如;如P1.2为高,则为高,则IR3有请求,跳有请求,跳 IR3处理处理 JB P1.3,IR4 ;如;如P1.3为高,则为高,则IR4有请求,跳有请求,跳 IR4处理处理 INTIR: POP Acc ;恢复现场;恢复现场 PO

54、P PSW RETI ;中断返回;中断返回 59 60 IR1: AJMP INTIR ;IR1处理完,跳处理完,跳INTIR处执行处执行 IR2: AJMP INTIR ;IR2处理完,跳处理完,跳INTIR处执行处执行 IR3: AJMP INTIR ;IR3处理完,跳处理完,跳INTIR处执行处执行 IR4: AJMP INTIR ;IR4处理完,跳处理完,跳INTIR处执行处执行 查询法扩展外部中断源比较简单,但是扩展的外查询法扩展外部中断源比较简单,但是扩展的外 部中断源个数较多时,查询时间稍长。部中断源个数较多时,查询时间稍长。 60 IR1的中断处理子程序 IR2的中断处理子程序

55、 IR3的中断处理子程序 IR4的中断处理子程序 61 4.9.2 用优先权编码器扩展外部中断源用优先权编码器扩展外部中断源 当需要处理的外部中断源数目较多而又要求响应速度当需要处理的外部中断源数目较多而又要求响应速度 很快时,上述的软件查询方法常常满足不了时间上的要很快时,上述的软件查询方法常常满足不了时间上的要 求。因为在外部中断源很多的情况下,响应优先级最高求。因为在外部中断源很多的情况下,响应优先级最高 的中断和响应优先级最低的中断所需的查询时间可能相的中断和响应优先级最低的中断所需的查询时间可能相 差很大。如果采用差很大。如果采用硬件硬件对外部中断源进行优先级排队就对外部中断源进行优

56、先级排队就 可避免这个问题。下面介绍采用优先权编码器扩展外部可避免这个问题。下面介绍采用优先权编码器扩展外部 中断源的方法。中断源的方法。 74LS148是一种是一种优先权编码器,优先权编码器,利用利用74LS148扩展扩展 AT89S51外部中断源的电路如图外部中断源的电路如图4-11所示,所示,74LS148的真的真 值表见表值表见表4-1。74LS148具有具有8个输入端个输入端“07”,用作,用作8 个外部中断请求个外部中断请求IR0*IR7*输入端,输入端,3个编码输出端个编码输出端 A2A0与单片机的与单片机的P1.3P1.1口线相连,编码器输出控口线相连,编码器输出控 制端与单片

57、机的外中断请求输入脚制端与单片机的外中断请求输入脚INT1*相连。相连。 62图图4-11 扩展扩展8个外部中断源的硬件电路个外部中断源的硬件电路 63 64 在使能端在使能端EI*端端为为低电平低电平的情况下,只要其的情况下,只要其8输入端中输入端中 任一输入为低电平,就有一组相应的编码从任一输入为低电平,就有一组相应的编码从A2A0端输端输 出,且同时编码器输出端输出为低电平。出,且同时编码器输出端输出为低电平。 如果如果8中断源中断源IR0*IR7*中有多个中断请求时(低有中有多个中断请求时(低有 效),其优先权最高的一组编码就出现在单片机的效),其优先权最高的一组编码就出现在单片机的

58、P1.3P1.1口线上,此时口线上,此时GS*端为低电平,则端为低电平,则AT89S51的的 INT1*端就为低电平,若中断被允许,就可以响应外部端就为低电平,若中断被允许,就可以响应外部 中断源所提出的中断请求。中断源所提出的中断请求。 65 例如,中断请求源例如,中断请求源IR1*、IR4*与与IR6* 同时发出中同时发出中 断请求的情况下,断请求的情况下, GS*端为低电平,向端为低电平,向INT1*发出中发出中 断请求,同时断请求,同时A2A0端仅输出中断优先级最高的编码端仅输出中断优先级最高的编码 “001”,当,当单片机响应该中断请求信号后,进入单片机响应该中断请求信号后,进入 INT1*中断服务子程序,然后读入从中断服务子程序,然后读入从P1.3P1.1输入的输入的 编码编码“001”,从而去响应的中断请

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论