MCS51中断系统教学课件PPT

上传人:pu****.1 文档编号:584304497 上传时间:2024-08-30 格式:PPT 页数:56 大小:589.54KB
返回 下载 相关 举报
MCS51中断系统教学课件PPT_第1页
第1页 / 共56页
MCS51中断系统教学课件PPT_第2页
第2页 / 共56页
MCS51中断系统教学课件PPT_第3页
第3页 / 共56页
MCS51中断系统教学课件PPT_第4页
第4页 / 共56页
MCS51中断系统教学课件PPT_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《MCS51中断系统教学课件PPT》由会员分享,可在线阅读,更多相关《MCS51中断系统教学课件PPT(56页珍藏版)》请在金锄头文库上搜索。

1、第第5 5章章 MCS-51MCS-51中断系统中断系统【学习目标学习目标】l 掌握掌握中断系统的基本概念中断系统的基本概念,熟记,熟记MCS-51MCS-51五个五个中断源中断源及其及其中断入口地址中断入口地址;l 熟悉熟悉功能寄存器功能寄存器TCONTCON、SCONSCON、IEIE、IPIP的结构、控制的结构、控制作用和设置方法;作用和设置方法;l 理解理解MCS-51MCS-51中断响应过程及处理方法;中断响应过程及处理方法;l 理解中断服务程序与调用子程序的区别;理解中断服务程序与调用子程序的区别;l 掌握掌握中断应用程序中断应用程序的编写方法。的编写方法。【例例3.113.11】

2、 有一数据块存放起始地址为有一数据块存放起始地址为DATA1DATA1的的片外片外RAMRAM区,数据块以区,数据块以“0”0”为结束标志,要求将其传送到为结束标志,要求将其传送到DATA2DATA2为为起始地址的起始地址的片内片内RAMRAM区。编写程序如下:区。编写程序如下: MOV DPTR, #DATA1MOV DPTR, #DATA1; ;设置片外设置片外RAMRAM数据块地址指针数据块地址指针 MOV R0MOV R0,#DATA2 #DATA2 ; ;设置片内设置片内RAMRAM数据块地址指针数据块地址指针LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;

3、取数取数 JZ ENDOJZ ENDO; ;检测是否为检测是否为0 0?为?为0 0,转,转ENDOENDO MOV R0 MOV R0,A A; ;不为不为0 0,传送,传送 INC DPTRINC DPTR; ;修改地址指针修改地址指针 INC R0INC R0 AJMP LOOP AJMP LOOPENDO: SJMPENDO: SJMP $ $基本程度范例:基本程度范例:例例1、LED的控制的控制 使用使用89C5l的的Port 1连接连接8个个LED,以产生跑马以产生跑马灯的效果。连接好电路并且完成程序之后,您将灯的效果。连接好电路并且完成程序之后,您将可以看到可以看到8个个LED依

4、次轮流闪烁。依次轮流闪烁。 在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用I/O Port输输出数据,以及如何使用循环实现时间延迟。出数据,以及如何使用循环实现时间延迟。 电电路路图图#include void delay (void) /* delay 函数函数 */ unsigned char i,j; /* 这个函数执行时间的延迟这个函数执行时间的延迟 */ for (i=0;i255;i+) for(j=0;j255;j+) ;void main (void) unsigned char j=0XFE; /*声明变量声明变量 j ,11111110*/ while (1)

5、 /* 无穷循环无穷循环 */ /*依次让依次让LED 0,1,2,3,4,5,6,7闪烁闪烁 */ j=(j1) | 0x01; if(j=0XFF) j=0XFE; P1 = j; /* 将数值输出到将数值输出到Port1,控制控制LED亮或灭亮或灭 */ delay(); /* 调用调用 delay 函数函数*/ 5.1 5.1 中断系统概述中断系统概述 1 1中断的概念中断的概念 CPU CPU正在执行程序时,单片机外部或内部发生的某一正在执行程序时,单片机外部或内部发生的某一事件事件,请求请求CPUCPU迅速去处理。迅速去处理。CPUCPU暂时中止当前的工作,转到中断服务暂时中止当前

6、的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中止的地方,继续原来的工作,这称为中断中断。 CPU CPU处理事件的过程,称为处理事件的过程,称为CPUCPU的的中断响应过程。中断响应过程。 图图5-15-1中断流程图所示。中断流程图所示。对事件的整个处理过程,对事件的整个处理过程,称为称为中断处理中断处理(或中断或中断服务服务)。 能够实现中断处理功能的部件称为能够实现中断处理功能的部件称为中断系统中断系统;产生中断;产生中断的请求源称为的请求源称为中断请求源中断请求源。中断源

7、向中断源向CPUCPU提出的处理请提出的处理请求,称为求,称为中断请求中断请求( (或中断申请或中断申请) )。进入中断进入中断保护现场保护现场中断处理恢复现场中断处理恢复现场 中断返回中断返回2 2中断的作用中断的作用 提高提高CPUCPU工作效率工作效率 具有实时处理功能具有实时处理功能 具有故障处理功能具有故障处理功能 实现分时操作实现分时操作中断功能强弱是计算机性能优劣的重要标志中断功能强弱是计算机性能优劣的重要标志3 3中断系统的功能中断系统的功能 为了正确地处理中断任务并能满足各种中断源的中为了正确地处理中断任务并能满足各种中断源的中断请求,计算机的中断系统应该具有以下功能。断请求

8、,计算机的中断系统应该具有以下功能。1 1)能实现中断及返回。)能实现中断及返回。2 2)能实现中断优先级排队。)能实现中断优先级排队。 3 3)能实现中断嵌套。)能实现中断嵌套。 5.2 MCS-515.2 MCS-51单片机的中断系统单片机的中断系统有有5 5个中断请求源,两个中断优先级,可两级嵌套。个中断请求源,两个中断优先级,可两级嵌套。MCS-51MCS-51单片机的中断系统结构示意图,如单片机的中断系统结构示意图,如图图5-35-3所示。所示。 INT0INT0: :外部中断外部中断0 0,中断请求信号由,中断请求信号由P3.2P3.2输入。输入。 INT1INT1: :外部中断外

9、部中断1 1,中断请求信号由,中断请求信号由P3.3P3.3输入。输入。 T0T0: :定时定时/ /计数器计数器0 0溢出中断溢出中断,对外部脉冲计数由,对外部脉冲计数由P3.4P3.4输入。输入。 T1T1: :定时定时/ /计数器计数器1 1溢出中断溢出中断,对外部脉冲计数由,对外部脉冲计数由P3.5P3.5输入。输入。 串行中断串行中断: :包括包括串行接收中断串行接收中断RIRI和和串行发送中断串行发送中断TITI。 5.2.1 5.2.1 中断源及中断入口中断源及中断入口 中断源是指能发出中断请求,引起中断的装置或事件。中断源是指能发出中断请求,引起中断的装置或事件。 MCS-51

10、MCS-51单片机共有单片机共有5 5个中断源,个中断源,其中其中2 2个为外部中断源,个为外部中断源,3 3个个为内部中断源:为内部中断源: 5 5个中断源分别对应个中断源分别对应5 5个固定的中断入口地址个固定的中断入口地址。当某中。当某中断源的中断请求被断源的中断请求被CPUCPU响应之后,响应之后,CPUCPU将把此中断源的入口将把此中断源的入口地址装入地址装入PCPC,中断服务程序即从此地址开始执行。此地址,中断服务程序即从此地址开始执行。此地址称为中断入口,亦称为中断矢量。在称为中断入口,亦称为中断矢量。在MCS-51MCS-51单片机中各中单片机中各中断源以及与之对应的入口地址分

11、配见表断源以及与之对应的入口地址分配见表5.15.1。中中 断断 源源入入 口口 地地 址址 外部中断外部中断0 0定时器定时器T0T0中断中断外部中断外部中断1 1定时器定时器T1T1中断中断串行口中断串行口中断0003H0003H000BH000BH0013H0013H001BH001BH0023H0023H 5.2.2 5.2.2 中断控制中断控制 MCS-51 MCS-51单片机中涉及中断控制的有单片机中涉及中断控制的有4 4个特殊个特殊功能寄存器:功能寄存器: 1 1)定时和外中断控制寄存器)定时和外中断控制寄存器TCONTCON。 2 2)串行口中断控制寄存器)串行口中断控制寄存器

12、SCONSCON。 3 3)中断允许控制寄存器)中断允许控制寄存器IEIE。 4 4)中断优先级控制寄存器)中断优先级控制寄存器IPIP。INT0INT0、INT1INT1、T0T0、T1T1中断请求标志放在中断请求标志放在TCONTCON中中串行中断请求标志放在串行中断请求标志放在SCONSCON中。中。 TCONTCON的结构、位名称、位地址和功能如下:的结构、位名称、位地址和功能如下:1 1中断请求标志寄存器中断请求标志寄存器 MCS-51 MCS-51对每一个中断请求都对应有一个中断请求标志位,对每一个中断请求都对应有一个中断请求标志位,中断请求被响应前,中断请求由中断请求被响应前,中

13、断请求由CPUCPU锁存在特殊功能寄存器锁存在特殊功能寄存器TCONTCON和和SCONSCON的相应中断标志位中。的相应中断标志位中。(1 1)定时和外中断控制寄存器)定时和外中断控制寄存器TCONTCONTCONTCOND7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0位名称位名称TF1TF1TF0TF0IE1IE1IT1IT1IE0IE0IT0IT0位地址位地址8 8FHFH8 8EHEH8 8DHDH8 8CHCH8 8BHBH8 8AHAH8989H H8888H H功能功能 T1T1 中断中断标志标志T0T0中断中断标志标志 中断中断标志标志 触发触发方式方式 中断中

14、断标志标志触发触发方式方式 TCONTCON位功能位功能: : TF1 TF1 T1T1溢出中断请求标志溢出中断请求标志 T1T1计数溢出后,计数溢出后,TF1=1TF1=1 TF0TF0 T0T0溢出中断请求标志溢出中断请求标志 T0T0计数溢出后,计数溢出后,TF0=1TF0=1TF0/TF1TF0/TF1:定时器溢出中断申请标志位:定时器溢出中断申请标志位: =0 =0:定时器未溢出;:定时器未溢出; =1 =1:定时器溢出申请中断:定时器溢出申请中断, ,进中断后自动清零。进中断后自动清零。 IE1IE1 外中断中断请求标志外中断中断请求标志 当当P3.3P3.3引脚信号有效时,引脚信

15、号有效时,IE1=1IE1=1 IE0IE0 外中断中断请求标志外中断中断请求标志 当当P3.2P3.2引脚信号有效时,引脚信号有效时,IE0=1IE0=1IE0/IE1IE0/IE1:外部中断申请标志位:外部中断申请标志位: =0 =0:没有外部中断申请;:没有外部中断申请; =1 =1:有外部中断申请。:有外部中断申请。 IT1IT1 外中断触发方式控制位外中断触发方式控制位 IT1=1IT1=1,边沿触发方式,即边沿触发方式,即P3.3P3.3出现出现下下跳边跳边 脉冲有效;脉冲有效; IT1=0IT1=0,电平触发方式。电平触发方式。 IT0IT0 外中断触发方式控制位外中断触发方式控

16、制位 其意义和功能与其意义和功能与IT1IT1相似。相似。IT0/IT1IT0/IT1:外部中断请求的触发方式选择位:外部中断请求的触发方式选择位: =0 =0:在:在INT0/INT1INT0/INT1端申请中断的信号低电平有效端申请中断的信号低电平有效; ; =1 =1:在:在INT0/INT1INT0/INT1端申请中断的信号负跳变有效端申请中断的信号负跳变有效. .当当MCS-51MCS-51复位后复位后,TCONTCON被清被清0 0,则,则CPUCPU关中断,关中断,所有中断请求所有中断请求被禁止。被禁止。(2 2)串行中断控制寄存器)串行中断控制寄存器SCONSCON字节地址为字

17、节地址为9898H H。串行口的。串行口的发送中断发送中断和和接收中断接收中断的中断请的中断请求标志求标志TITI和和RIRI。TCONTCOND7D7 D6D6 D5D5D4D4 D3D3 D2D2D1D1D0D0位名称位名称 TITIRIRI位地址位地址 9999H H9898H H功能功能 串行发送串行发送中断标志中断标志串行接收串行接收中断标志中断标志 各标志位的功能:各标志位的功能: (1 1)TITI发送中断请求标志位。串口每发送完一帧串行数据发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置后,硬件自动置“1”“1”TITI。必须在中断服务程序中用必须在中断服务程序中用软

18、件软件对对TITI标志清标志清“0”“0”。 (2 2)RIRI接收中断请求标志位。串口接收完一个数据帧,硬接收中断请求标志位。串口接收完一个数据帧,硬件自动置件自动置“1”“1”RIRI标志。标志。必须在中断服务程序中用必须在中断服务程序中用软件软件对对RIRI标志清标志清“0”“0”。 2 2中断允许控制寄存器中断允许控制寄存器IEIE CPU CPU对中断系统所有中断以及某个中断源的开放和屏蔽对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器是由中断允许寄存器IEIE控制的。控制的。IEIE的状态可用软件对各位分的状态可用软件对各位分别置别置1 1或清零,从而实现对各中断源中

19、断允许或屏蔽。或清零,从而实现对各中断源中断允许或屏蔽。IEIE寄寄存器的字节地址是存器的字节地址是A8HA8H,位地址为,位地址为AFHAFHA8HA8H。IEIED7D7D6D6 D5D5D4D4D3D3D2D2D1D1D0D0位名称位名称EAEA ESESET1ET1EX1EX1ET0ET0EX0EX0位地址位地址AFHAFH ACHACHABHABHAAHAAHA9HA9HA8HA8H中断源中断源CPUCPU 串行串行口口T1T1T0T0 EAEA CPUCPU中断允许控制位中断允许控制位( (总开关)总开关) EA=1EA=1,CPUCPU开中;开中; EA=0EA=0,CPUCPU

20、关中,且屏蔽所有关中,且屏蔽所有5 5个中断源。个中断源。 EX0EX0 外中断外中断INT0INT0中断允许控制位中断允许控制位 EX0=1EX0=1,INT0INT0开中;开中;EX0=0EX0=0,INT0INT0关中。关中。 EX1EX1 外中断外中断INT1INT1中断允许控制位中断允许控制位 EX1=1EX1=1,INT1INT1开中;开中;EX1=0EX1=0,INT1INT1关中。关中。 ET0ET0 定时定时/ /计数器计数器T0T0中断允许控制位中断允许控制位 ET0=1ET0=1,T0T0开中;开中;ET0=0ET0=0,T0T0关中。关中。 ET1ET1 定时定时/ /

21、计数器计数器T1T1中断允许控制位中断允许控制位 ET1=1ET1=1,T1T1开中;开中;ET1=0ET1=0,T1T1关中。关中。 ESES 串行口中断串行口中断( (包括串发、串收包括串发、串收) )允许控制位允许控制位 ES=1ES=1,串行口开中;串行口开中;ES=0ES=0,串行口关中。串行口关中。说明说明: : MCS-51MCS-51对中断实行对中断实行两级两级控制,控制,总控制位是总控制位是EAEA,每每一中断源还有各自的控制位。一中断源还有各自的控制位。首先首先要要EA=1EA=1,其次其次还要还要自身的控制位置自身的控制位置“1 1”。例如例如: :要使要使INT0INT

22、0开中开中( (其余关中其余关中) ),可执行下列指令:,可执行下列指令: SETB SETB EAEASETBSETB EX0EX0或者或者 MOVMOVIE IE ,#10000001B#10000001B或者或者 ORLORLIE IE ,#10000001B#10000001BIEIED7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0位名称位名称EAEAESESET1ET1EX1EX1ET0ET0EX0EX0位地址位地址AFHAFHACHACHABHABHAAHAAHA9HA9HA8HA8H中断源中断源CPUCPU串行串行口口T1T1T0T0中断允许控制寄存器中断允许控制

23、寄存器IEIE 中断嵌套结构类似与中断嵌套结构类似与调用子程序嵌套,调用子程序嵌套,不同不同的是的是: 子程序嵌套是在程序子程序嵌套是在程序中事先按排好的;中断中事先按排好的;中断嵌套是嵌套是随机随机发生的。发生的。 子程序嵌套无次序限子程序嵌套无次序限制,中断嵌套只允许高制,中断嵌套只允许高优先级优先级“中断中断”低优先低优先级。级。3 3中断优先级控制寄存器中断优先级控制寄存器IPIP MCS-51 MCS-51单片机单片机有有5 5个中断源个中断源,有有两个中断优先级两个中断优先级:高优先级和低优先级,可实现两级中断服务嵌套,高优先级和低优先级,可实现两级中断服务嵌套,由由IPIP控制。

24、只要对控制。只要对IPIP各位置各位置1 1或清零,就可对各中断或清零,就可对各中断源设置高优先级或低优先级。相应位置源设置高优先级或低优先级。相应位置1 1,定义为高,定义为高优先级;相应位清零,定义为低优先级。优先级;相应位清零,定义为低优先级。IPIP寄存器寄存器的字节地址为的字节地址为0B8H0B8H,位地址为,位地址为0BFH0BFH0B8H0B8H。IPIP相关相关的位地址见表的位地址见表5.55.5。 PX0PX0 :INT0INT0中断优先级控制位。中断优先级控制位。PX0=1PX0=1,为为高高优先级;优先级; PX0=0PX0=0,为为低低优先级;优先级; PX1PX1 :

25、INT1INT1中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 PT0PT0 :T0T0中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 PT1PT1 :T1T1中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 PS PS :串行口中断优先级控制位。控制方法同上。串行口中断优先级控制位。控制方法同上。 IPIPD7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0位名称位名称PSPSPT1PT1PX1PX1PT0PT0PX0PX0位地址位地址BCHBCHBBHBBHBAHBAHB9HB9HB8HB8H中断源中断源串行口串行口T1T1I

26、NT1INT1T0T0INT0INT0IPIP的结构、位名称和位地址如下:的结构、位名称和位地址如下:例如例如: :若要将若要将INT1INT1、串行口设置为高优先级,其余中断源串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令:设置为低优先级,可执行下列指令: MOV IPMOV IP,#00010100B#00010100B;需要指出的是,若置需要指出的是,若置5 5个中断源全部为高优先级,就等于个中断源全部为高优先级,就等于不分优先级。不分优先级。 MCS-51MCS-51单片机响应中断的基本原则如下:单片机响应中断的基本原则如下:1 1)低优先级中断可被高优先级中断请求所中

27、断,反之则不能。)低优先级中断可被高优先级中断请求所中断,反之则不能。2 2)在同一优先级中(不管是高优先级或低优先级),某个中)在同一优先级中(不管是高优先级或低优先级),某个中断一旦得到响应,与它同级的中断请求就不能再中断它。断一旦得到响应,与它同级的中断请求就不能再中断它。CPUCPU同时接收到几个中断时,首先响应优先级最高的中断请求。同时接收到几个中断时,首先响应优先级最高的中断请求。如果同级的多个中断请求同时出现,则按如果同级的多个中断请求同时出现,则按CPUCPU查询次序确定的查询次序确定的中断优先权排队来响应,其确定的查询次序见表中断优先权排队来响应,其确定的查询次序见表5.65

28、.6。由此可。由此可见,各中断源在同一个优先级的条件下,外部中断见,各中断源在同一个优先级的条件下,外部中断0 0的中断优的中断优先权最高,串行口中断优先权最低。先权最高,串行口中断优先权最低。 查询顺序查询顺序如如表表5-65-6: 表表5-65-6中断源同级优先次序中断源同级优先次序中断源中断源 中断级别中断级别外部中断外部中断0 0最高最高T0T0溢出中断溢出中断外部中断外部中断1 1T1T1溢出中断溢出中断串行口中断串行口中断最低最低5.3 5.3 中断处理过程中断处理过程 中断处理过程可分为三个阶段,即中断处理过程可分为三个阶段,即中断响应中断响应、中中断处理断处理和和中断返回中断返

29、回。所有计算机的中断处理都有这样。所有计算机的中断处理都有这样三个阶段,但不同的计算机由于中断系统的硬件结构三个阶段,但不同的计算机由于中断系统的硬件结构不完全相同,因而中断响应的方式有所不同,其一般不完全相同,因而中断响应的方式有所不同,其一般的流程图如图的流程图如图5.45.4所示。所示。5.3.1 5.3.1 中断响应中断响应1 1CPUCPU的中断响应条件的中断响应条件CPUCPU响应中断的条件主要有以下几点:响应中断的条件主要有以下几点:1 1)由中断源发出中断申请。由中断源发出中断申请。2 2)中断总允许位中断总允许位EAEA1 1,即,即CPUCPU允许所有中断源申请中断。允许所

30、有中断源申请中断。3 3)申请中断的中断源的中断允许位为申请中断的中断源的中断允许位为1 1,即此中断源没有被屏,即此中断源没有被屏蔽,可以向蔽,可以向CPUCPU申请中断。申请中断。 以上是以上是CPUCPU响应中断的基本条件。若满足,响应中断的基本条件。若满足,CPUCPU一般会响应中一般会响应中断,但如果有下列任一种情况存在,中断响应即被封锁。断,但如果有下列任一种情况存在,中断响应即被封锁。1 1)CPUCPU正在执行一个同级或高级的中断服务程序。正在执行一个同级或高级的中断服务程序。2 2)当前的机器周期不是正在执行的指令的最后一个周期,即正当前的机器周期不是正在执行的指令的最后一个

31、周期,即正在执行的指令完成前任何中断请求都得不到响应。在执行的指令完成前任何中断请求都得不到响应。3 3)正在执行的指令是返回指令正在执行的指令是返回指令RETIRETI或者对专用寄存器或者对专用寄存器IEIE、IPIP进进行读写的指令时,在执行行读写的指令时,在执行RETIRETI或者读写或者读写IEIE或或IPIP之后,不会马之后,不会马上响应中断请求。上响应中断请求。2 2中断响应过程中断响应过程 如果中断响应条件满足,且不存在中断受阻的情况,如果中断响应条件满足,且不存在中断受阻的情况,则则CPUCPU响应中断。此时,中断系统通过硬件生成的长调用指响应中断。此时,中断系统通过硬件生成的

32、长调用指令令“LCALL”LCALL”,自动把断点地址压入堆栈保护(但不保护状,自动把断点地址压入堆栈保护(但不保护状态寄存器态寄存器PSWPSW及其他寄存器内容),然后将对应的中断入口及其他寄存器内容),然后将对应的中断入口地址装入程序计数器地址装入程序计数器PCPC使程序转向该中断入口地址,并执使程序转向该中断入口地址,并执行中断服务程序。行中断服务程序。5.3.2 5.3.2 中断处理中断处理 中断处理(又称中断服务)程序从入口地址开始执行,中断处理(又称中断服务)程序从入口地址开始执行,直到返回指令直到返回指令“RETI”RETI”为止,这个过程称为中断处理。为止,这个过程称为中断处理

33、。 5.3.3 5.3.3 中断返回中断返回 中断返回是指中断服务完成后,计算机返回到断点(原来中断返回是指中断服务完成后,计算机返回到断点(原来断开的位置),继续执行原来的程序。中断返回由专门的中断断开的位置),继续执行原来的程序。中断返回由专门的中断返回指令返回指令“RETI”RETI”实现。该指令的功能是把断点地址取出,送实现。该指令的功能是把断点地址取出,送回到程序计数器回到程序计数器PCPC中去。另外,它还通知中断系统已完成中断中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别要注意不能用处理,将清除优先级状态触发器。特别要注意不能用“RET”RET”指指令代替

34、令代替“RETI”RETI”指令。指令。恢复断点地址恢复断点地址: : 将原来压入堆栈中的将原来压入堆栈中的PCPC断点地址从堆栈中弹断点地址从堆栈中弹出,送回出,送回PCPC。这样这样CPUCPU就返回到原断点处,继续执行被中断就返回到原断点处,继续执行被中断的原程序。的原程序。初学者容易模糊的是初学者容易模糊的是,中断返回,返回哪里,中断返回,返回哪里? ? 答答案是:从什么地方来,回什么地方去。不是返回到相应中断案是:从什么地方来,回什么地方去。不是返回到相应中断的入口地址,而是返回到中断断点地址。的入口地址,而是返回到中断断点地址。 5.3.4 5.3.4 中断响应时间中断响应时间外部

35、中断的外部中断的最短最短的响应时间为的响应时间为3 3个机器周期个机器周期: : (1 1)中断请求标志位查询占)中断请求标志位查询占1 1个机器周期个机器周期。(2 2)子程序调用指令)子程序调用指令LCALLLCALL转到相应的中断服务程序入口,需转到相应的中断服务程序入口,需2 2个机器周期个机器周期。 外部中断响应的外部中断响应的最长最长的响应时间为的响应时间为8 8个机器周期个机器周期:(1 1)发生在发生在CPUCPU进行中断标志查询时,进行中断标志查询时,刚好是开始执行刚好是开始执行RETIRETI或或是访问是访问IEIE或或IPIP的指令,则需把当前指令执行完再继续执行的指令,

36、则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完一条指令后,才能响应中断,当前指令执行完最长需最长需2 2个机个机器周期器周期。(2 2)接着再执行一条指令,按最长指令(乘法指令接着再执行一条指令,按最长指令(乘法指令MULMUL和除法和除法指令指令DIVDIV)来算,也只有来算,也只有4 4个机器周期个机器周期。(3 3)加上加上硬件子程序调用硬件子程序调用指令指令LCALLLCALL的执行,需要的执行,需要2 2个机器周个机器周期期。所以,外部中断响应最长时间为所以,外部中断响应最长时间为8 8个机器周期。个机器周期。 如果已在处理同级或更高级中断,响应时间无法计算。

37、如果已在处理同级或更高级中断,响应时间无法计算。在一个单一中断的系统里,在一个单一中断的系统里,MCS-51MCS-51单片机对外部中断请求的响单片机对外部中断请求的响应的时间总是在应的时间总是在3 38 8个机器周期个机器周期之间。之间。 5.3.5 5.3.5 中断请求的撤销中断请求的撤销 中断源发出中断请求,相应中断请求标志置中断源发出中断请求,相应中断请求标志置“1 1”。 CPUCPU响应中断后,响应中断后,必须必须清除中断请求清除中断请求“1 1”标志。否则中断响标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。应返回后,将再次进入该中断,引起死循环出错。(1 1)定时器

38、中断请求的撤销)定时器中断请求的撤销对于定时器对于定时器0 0或或1 1溢出中断,溢出中断,CPUCPU在响应中断后即由硬件在响应中断后即由硬件自动自动清除其中断标志位清除其中断标志位TF0TF0或或TF1TF1,无需采取其他措施。,无需采取其他措施。(2 2)串行口中断请求的撤销)串行口中断请求的撤销对于串行口中断,对于串行口中断,CPUCPU在响应中断后,硬件在响应中断后,硬件不能自动不能自动清除中清除中断请求标志位断请求标志位TITI、RIRI,必须在中断服务程序中,必须在中断服务程序中用软件用软件将其清将其清除。除。(3 3)外部中断请求的撤销)外部中断请求的撤销外部中断可分为边沿触发

39、型和电平触发型。外部中断可分为边沿触发型和电平触发型。例:例: 硬件电路如图所示。当外部设备有中断请求时,中硬件电路如图所示。当外部设备有中断请求时,中断请求信号经反相,加到锁存器断请求信号经反相,加到锁存器CPCP端,作为端,作为CPCP脉冲。由脉冲。由于于D D端接地为端接地为0 0,Q Q端输出低点平,触发端输出低点平,触发 INT0INT0生中断。生中断。当当CPUCPU响应中断后,应在该中断服务程序中按排两条指令响应中断后,应在该中断服务程序中按排两条指令: CLR P1.0CLR P1.0 SETB P1.0 SETB P1.0 从而撤消引起重复中断的从而撤消引起重复中断的INT0

40、INT0低电平信号。低电平信号。 因此一般来说因此一般来说,对外中断,对外中断INT0INT0、INTlINTl,应尽量采用应尽量采用边沿触发方式,以简化硬件电路和软件程序。边沿触发方式,以简化硬件电路和软件程序。 5.4 5.4 中断程序设计结构及应用举例中断程序设计结构及应用举例 中断系统的应用要解决的问题主要是编写应用程序,中断系统的应用要解决的问题主要是编写应用程序,编写应用程序包括两大部分:编写应用程序包括两大部分:一是一是中断初始化;中断初始化;二是二是中中断服务程序。本节将介绍中断程序的一般设计方法,并断服务程序。本节将介绍中断程序的一般设计方法,并通过实例说明中断系统的应用。通

41、过实例说明中断系统的应用。5.4.1 5.4.1 中断程序的一般设计方法中断程序的一般设计方法1 1主程序主程序在编写主程序时应注意以下两点。在编写主程序时应注意以下两点。1 1)主程序的起始地址)主程序的起始地址:MCS-51MCS-51单片机复位后,单片机复位后,(PC)(PC)0000H0000H,而各中断源的入口地址为,而各中断源的入口地址为0003H0003H0023H0023H。因此,。因此,在编写程序时应在在编写程序时应在0000H0000H处使用一条转移指令以跳过上述处使用一条转移指令以跳过上述区域,主程序则以转移指令的目的地址作为其起始地址。区域,主程序则以转移指令的目的地址

42、作为其起始地址。2 2)中断系统的初始化)中断系统的初始化 2 2中断服务程序中断服务程序在编写中断服务程序时应注意以下三点。在编写中断服务程序时应注意以下三点。1 1)由表由表5.15.1可知,五个中断源的入口地址之间彼此相可知,五个中断源的入口地址之间彼此相差差8 8个存储单元,一般来说无法容纳下一个完整的中断个存储单元,一般来说无法容纳下一个完整的中断服务程序。因此,通常在中断服务程序的入口处设置服务程序。因此,通常在中断服务程序的入口处设置一条三字节长转移指令,这样可使中断服务程序安排一条三字节长转移指令,这样可使中断服务程序安排在在64KB64KB程序存储器的任何地方。程序存储器的任

43、何地方。2 2)在中断服务程序的开始应使用软件保护现场,在中在中断服务程序的开始应使用软件保护现场,在中断处理完成之后、中断返回之前应恢复现场。断处理完成之后、中断返回之前应恢复现场。3 3)中断服务程序的最后一条指令是中断返回指令中断服务程序的最后一条指令是中断返回指令RETIRETI。下面通过实例来说明中断程序的一般设计方法。利用外部下面通过实例来说明中断程序的一般设计方法。利用外部中断中断0向向CPU申请中断,中断服务将申请中断,中断服务将Pl口作为输出驱动。口作为输出驱动。主程序如下:主程序如下: ORG 0000H AJMP MAIN ;转向主程序;转向主程序 ORG 0003H ;

44、外部中断;外部中断0入口地址入口地址 AJMP WINT ;指向中断服务程序;指向中断服务程序 ORG 0100H ;主程序;主程序MAIN:SETB IT0 ;选择边沿触发方式;选择边沿触发方式 SETB EX0 ;允许外部中断;允许外部中断0 SETB EA ;CPU允许中断允许中断HERE:AJMP HERE ;主程序踏步;主程序踏步中断服务程序如下:中断服务程序如下:ORG 0200HWINT:MOV A, #0FFHMOV P1, A ;输出驱动;输出驱动RETI ;中断返回;中断返回END5.4.2 5.4.2 中断程序应用举例中断程序应用举例【例例5.15.1】 如图如图5.65

45、.6所示,要求每次来一个负脉冲,使连所示,要求每次来一个负脉冲,使连接到接到P1P1口的发光二极管口的发光二极管LEDLED循环点亮。循环点亮。解:利用的下降沿触发中断。解:利用的下降沿触发中断。汇编语言程序如下:汇编语言程序如下:ORG 0000H ;复位入口复位入口 LJMP MAIN ORG 0013H ;中断入口中断入口 LJMP INT_X1 ORG 0100H ;主程序主程序MAIN:MOV SP, #60H ;设栈底设栈底 MOV A, #01H MOV P1, #00H SETB IT1 ;负跳变触发中断负跳变触发中断 SETB EXl ;开开INT1中断中断 SETB EA

46、;开总允许开关开总允许开关 SJMP $ ;等待等待INT_X1:MOV P1, A RL A RETI END汇编语言程序如下:汇编语言程序如下:ORG 0000H ;复位入口复位入口 LJMP MAIN ORG 0013H ;中断入口中断入口 LJMP INT_X1 ORG 0100H ;主程序主程序MAIN:MOV SP, #60H ;设栈底设栈底 MOV A, #01H MOV P1, #00H SETB IT1 ;负跳变触发中断负跳变触发中断 SETB EXl ;开开INT1中断中断 SETB EA ;开总允许开关开总允许开关 SJMP $ ;等待等待INT_X1:MOV P1, A

47、 RL A RETI END对应的对应的C语言程序如下:语言程序如下:#include unsigned char i=0x01;void intxl_isr( ) interrupt 2 iy?x:y;return(z);也可以用成这样:也可以用成这样:int max(x,y)int x,y;int z;z=xy?x:y;return(z);4reentrant修饰符修饰符 这个修饰符用于把函数定义为可重入函数。所谓这个修饰符用于把函数定义为可重入函数。所谓可重入函数就是允许被递归调用的函数。函数的递归可重入函数就是允许被递归调用的函数。函数的递归调用是指当一个函数正被调用尚未返回时,又直接

48、或调用是指当一个函数正被调用尚未返回时,又直接或间接调用函数本身。一般的函数不能做到这样,只有间接调用函数本身。一般的函数不能做到这样,只有重入函数才允许递归调用。重入函数才允许递归调用。 关于重入函数,注意以下几点:关于重入函数,注意以下几点:(1)用)用reentrant修饰的重入函数被调用时,实参表内修饰的重入函数被调用时,实参表内不允许使用不允许使用bit类型的参数。函数体内也不允许存在任类型的参数。函数体内也不允许存在任何关于位变量的操作,更不能返回何关于位变量的操作,更不能返回bit类型的值。类型的值。(2)编译时,系统为重入函数在内部或外部存储器中)编译时,系统为重入函数在内部或

49、外部存储器中建立一个模拟堆栈区,称为重入栈。重入函数的局部建立一个模拟堆栈区,称为重入栈。重入函数的局部变量及参数被放在重入栈中,使重入函数可以实现递变量及参数被放在重入栈中,使重入函数可以实现递归调用。归调用。(3)在参数的传递上,实际参数可以传递给间接调用)在参数的传递上,实际参数可以传递给间接调用的重入函数。无重入属性的间接调用函数不能包含调的重入函数。无重入属性的间接调用函数不能包含调用参数,但是可以使用定义的全局变量来进行参数传用参数,但是可以使用定义的全局变量来进行参数传递。递。 5interrupt m修饰符修饰符 interrupt m是是C51函数中非常重要的一个修饰符,这函

50、数中非常重要的一个修饰符,这是因为中断函数必须通过它进行修饰。在是因为中断函数必须通过它进行修饰。在C51程序设计中,程序设计中,当函数定义时用了当函数定义时用了interrupt m修饰符,系统编译时把对应修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器系统中断的处理方式自动把它安排在程序存储器中的相应位置。中的相应位置。 在该修饰符中,在该修饰符中,m的取值为的取值为031,对应的中断情况如下:,对应的中断情况如下:0外部中断外部中断01定时定时/计数器计数器T02

51、外部中断外部中断13定时定时/计数器计数器T14串行口中断串行口中断5定时定时/计数器计数器T2其它值预留。其它值预留。编写编写MCS-51中断函数注意如下:中断函数注意如下:(1)中断函数不能进行参数传递,如果中断函数中包含中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。任何参数声明都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值将中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。类型,以明确说明没有返回值。(3)在任何情况

52、下都不能直接调用中断函数,否则会产在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由生编译错误。因为中断函数的返回是由8051单片机的单片机的RETI指令完成的,指令完成的,RETI指令影响指令影响8051单片机的硬件中单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。指令的操作结果会产生一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正所使用的寄存器必

53、须与中断函数相同。否则会产生不正确的结果。确的结果。(5)C51编译器对中断函数编译时会自动在程序开始和编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和和PSW入栈,结束时出栈。中断入栈,结束时出栈。中断函数未加函数未加using n修饰符的,开始时还要将修饰符的,开始时还要将R0R1入栈,入栈,结束时出栈。如中断函数加结束时出栈。如中断函数加using n修饰符,则在开始将修饰符,则在开始将PSW入栈后还要修改入栈后还要修改PSW中的工作寄存器组选择位。中的工作寄存器组选择位。(6

54、)C51编译器从绝对地址编译器从绝对地址8m+3处产生一个中断向量,处产生一个中断向量,其中其中m为中断号,也即为中断号,也即interrupt后面的数字。该向量包后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。含一个到中断函数入口地址的绝对跳转。(7)中断函数最好写在文件的尾部,并且禁止使用中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。存储类型说明。防止其它程序调用。 【例例22】编写一个用于统计外中断编写一个用于统计外中断0的中断次数的的中断次数的中断服务程序中断服务程序extern int x;void int0() interrupt 0

55、using 1 x+; 6using n修饰符修饰符 修饰符修饰符using n用于指定本函数内部使用的工作寄存器用于指定本函数内部使用的工作寄存器组,其中组,其中n的取值为的取值为03,表示寄存器组号。,表示寄存器组号。 对于对于using n修饰符的使用,注意以下几点:修饰符的使用,注意以下几点:(1)加入加入using n后,后,C51在编译时自动的在函数的开始在编译时自动的在函数的开始处和结束处加入以下指令。处和结束处加入以下指令。PUSH PSW ;标志寄存器入栈标志寄存器入栈MOV PSW,#与寄存器组号相关的常量与寄存器组号相关的常量POP PSW ;标志寄存器出栈标志寄存器出栈(2)using n修饰符不能用于有返回值的函数,因为修饰符不能用于有返回值的函数,因为C51函数的返回值是放在寄存器中的。如寄存器组改变了,返回函数的返回值是放在寄存器中的。如寄存器组改变了,返回值就会出错。值就会出错。OVER!OVER!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号