MCS51中断系统教学课件PPT_第1页
MCS51中断系统教学课件PPT_第2页
MCS51中断系统教学课件PPT_第3页
MCS51中断系统教学课件PPT_第4页
MCS51中断系统教学课件PPT_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

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

2、3.113.11】 有一数据块存放起始地址为有一数据块存放起始地址为data1data1的的片外片外ramram 区,数据块以区,数据块以“0”0”为结束标志,要求将其传送到为结束标志,要求将其传送到data2data2为为 起始地址的起始地址的片内片内ramram区。编写程序如下:区。编写程序如下: mov dptr, #data1mov dptr, #data1; ;设置片外设置片外ramram数据块地址指针数据块地址指针 mov r0mov r0,#data2 #data2 ; ;设置片内设置片内ramram数据块地址指针数据块地址指针 loop:movx a, dptrloop:mov

3、x a, dptr; ;取数取数 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 loop endo: sjmpendo: sjmp $ $ 基本程度范例:基本程度范例: 例例1、led的控制的控制 使用使用89c5l的的port 1连接连接8个个led,以产生跑马以产生跑马 灯的效果。连接好电路并且完成程序之后,您将灯的效果。连接好电路并且完成程序之后,您

4、将 可以看到可以看到8个个led依次轮流闪烁。依次轮流闪烁。 在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用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

5、 ,11111110*/ while (1) /* 无穷循环无穷循环 */ /*依次让依次让led 0,1,2,3,4,5,6,7闪烁闪烁 */ j=(j1) | 0 x01; if(j=0xff) j=0xfe; p1 = j; /* 将数值输出到将数值输出到port1,控制控制led亮或灭亮或灭 */ delay(); /* 调用调用 delay 函数函数*/ 5.1 5.1 中断系统概述中断系统概述 1 1中断的概念中断的概念 cpu cpu正在执行程序时,单片机外部或内部发生的某一正在执行程序时,单片机外部或内部发生的某一事件事件, 请求请求cpucpu迅速去处理。迅速去处理。cpuc

6、pu暂时中止当前的工作,转到中断服暂时中止当前的工作,转到中断服 务处理程序处理所发生的事件。处理完该事件后,再回到原务处理程序处理所发生的事件。处理完该事件后,再回到原 来被中止的地方,继续原来的工作,这称为来被中止的地方,继续原来的工作,这称为中断中断。 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,中断请求

9、信号由,中断请求信号由p3.2p3.2输入。输入。 int1int1: :外部中断外部中断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 中断源及中断入口中断源及中断入口 中断源是指能发出中断请求,

10、引起中断的装置或事件。中断源是指能发出中断请求,引起中断的装置或事件。 mcs-51mcs-51单片机共有单片机共有5 5个中断源,个中断源,其中其中2 2个为外部中断源,个为外部中断源,3 3个个 为内部中断源:为内部中断源: 5 5个中断源分别对应个中断源分别对应5 5个固定的中断入口地址个固定的中断入口地址。当某中。当某中 断源的中断请求被断源的中断请求被cpucpu响应之后,响应之后,cpucpu将把此中断源的入口将把此中断源的入口 地址装入地址装入pcpc,中断服务程序即从此地址开始执行。此地址,中断服务程序即从此地址开始执行。此地址 称为中断入口,亦称为中断矢量。在称为中断入口,亦

11、称为中断矢量。在mcs-51mcs-51单片机中各中单片机中各中 断源以及与之对应的入口地址分配见表断源以及与之对应的入口地址分配见表5.15.1。 中中 断断 源源入入 口口 地地 址址 外部中断外部中断0 0 定时器定时器t0t0中断中断 外部中断外部中断1 1 定时器定时器t1t1中断中断 串行口中断串行口中断 0003h0003h 000bh000bh 0013h0013h 001bh001bh 0023h0023h 5.2.2 5.2.2 中断控制中断控制 mcs-51 mcs-51单片机中涉及中断控制的有单片机中涉及中断控制的有4 4个特殊个特殊 功能寄存器:功能寄存器: 1 1)

12、定时和外中断控制寄存器)定时和外中断控制寄存器tcontcon。 2 2)串行口中断控制寄存器)串行口中断控制寄存器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)定时和外中断控制寄存器)定时和外中断控制寄存器tcontcon tcontcond7d7d6d6d5d5d4d4d3d3d2d2d1d1d0d0 位名称位名称tf1tf1tf0tf0ie1ie1it1it1ie0ie0it0it0 位地址位地址8 8fhfh8 8eheh8 8dhdh8 8chch8 8bhbh8 8aha

14、h8989h h8888h h 功能功能 t1t1 中断中断 标志标志 t0t0 中断中断 标志标志 中断中断 标志标志 触发触发 方式方式 中断中断 标志标志 触发触发 方式方式 tcontcon位功能位功能: : tf1 tf1 t1t1溢出中断请求标志溢出中断请求标志 t1t1计数溢出后,计数溢出后,tf1=1tf1=1 tf0tf0 t0t0溢出中断请求标志溢出中断请求标志 t0t0计数溢出后,计数溢出后,tf0=1tf0=1 tf0/tf1tf0/tf1:定时器溢出中断申请标志位:定时器溢出中断申请标志位: =0 =0:定时器未溢出;:定时器未溢出; =1 =1:定时器溢出申请中断:

15、定时器溢出申请中断, ,进中断后自动清零。进中断后自动清零。 ie1ie1 外中断中断请求标志外中断中断请求标志 当当p3.3p3.3引脚信号有效时,引脚信号有效时,ie1=1ie1=1 ie0ie0 外中断中断请求标志外中断中断请求标志 当当p3.2p3.2引脚信号有效时,引脚信号有效时,ie0=1ie0=1 ie0/ie1ie0/ie1:外部中断申请标志位:外部中断申请标志位: =0 =0:没有外部中断申请;:没有外部中断申请; =1 =1:有外部中断申请。:有外部中断申请。 it1it1 外中断触发方式控制位外中断触发方式控制位 it1=1it1=1,边沿触发方式,即边沿触发方式,即p3

16、.3p3.3出现出现下下跳边跳边 脉冲有效;脉冲有效; it1=0it1=0,电平触发方式。电平触发方式。 it0it0 外中断触发方式控制位外中断触发方式控制位 其意义和功能与其意义和功能与it1it1相似。相似。 it0/it1it0/it1:外部中断请求的触发方式选择位:外部中断请求的触发方式选择位: =0 =0:在:在int0/int1int0/int1端申请中断的信号低电平有效端申请中断的信号低电平有效; ; =1 =1:在:在int0/int1int0/int1端申请中断的信号负跳变有效端申请中断的信号负跳变有效. . 当当mcs-51mcs-51复位后复位后,tcontcon被清

17、被清0 0,则,则cpucpu关中断,关中断,所有中断请求所有中断请求 被禁止。被禁止。 (2 2)串行中断控制寄存器)串行中断控制寄存器sconscon 字节地址为字节地址为9898h h。串行口的。串行口的发送中断发送中断和和接收中断接收中断的中断请的中断请 求标志求标志titi和和riri。 tcontcond7d7 d6d6 d5d5d4d4 d3d3 d2d2d1d1d0d0 位名称位名称 titiriri 位地址位地址 9999h h9898h h 功能功能 串行发送串行发送 中断标志中断标志 串行接收串行接收 中断标志中断标志 各标志位的功能:各标志位的功能: (1 1)titi

18、发送中断请求标志位。串口每发送完一帧串行数据发送中断请求标志位。串口每发送完一帧串行数据 后,硬件自动置后,硬件自动置“1”“1”titi。必须在中断服务程序中用必须在中断服务程序中用软件软件对对 titi标志清标志清“0”“0”。 (2 2)riri接收中断请求标志位。串口接收完一个数据帧,硬接收中断请求标志位。串口接收完一个数据帧,硬 件自动置件自动置“1”“1”riri标志。标志。必须在中断服务程序中用必须在中断服务程序中用软件软件对对riri 标志清标志清“0”“0”。 2 2中断允许控制寄存器中断允许控制寄存器ieie cpu cpu对中断系统所有中断以及某个中断源的开放和屏蔽对中断

19、系统所有中断以及某个中断源的开放和屏蔽 是由中断允许寄存器是由中断允许寄存器ieie控制的。控制的。ieie的状态可用软件对各位分的状态可用软件对各位分 别置别置1 1或清零,从而实现对各中断源中断允许或屏蔽。或清零,从而实现对各中断源中断允许或屏蔽。ieie寄寄 存器的字节地址是存器的字节地址是a8ha8h,位地址为,位地址为afhafha8ha8h。 ieied7d7d6d6 d5d5d4d4d3d3d2d2d1d1d0d0 位名称位名称eaea eseset1et1ex1ex1et0et0ex0ex0 位地址位地址afhafh achachabhabhaahaaha9ha9ha8ha8h

20、 中断源中断源cpucpu 串行串行 口口 t1t1t0t0 eaea cpucpu中断允许控制位中断允许控制位( (总开关)总开关) ea=1ea=1,cpucpu开中;开中; ea=0ea=0,cpucpu关中,且屏蔽所有关中,且屏蔽所有5 5个中断源。个中断源。 ex0ex0 外中断外中断int0int0中断允许控制位中断允许控制位 ex0=1ex0=1,int0int0开中;开中;ex0=0ex0=0,int0int0关中。关中。 ex1ex1 外中断外中断int1int1中断允许控制位中断允许控制位 ex1=1ex1=1,int1int1开中;开中;ex1=0ex1=0,int1in

21、t1关中。关中。 et0et0 定时定时/ /计数器计数器t0t0中断允许控制位中断允许控制位 et0=1et0=1,t0t0开中;开中;et0=0et0=0,t0t0关中。关中。 et1et1 定时定时/ /计数器计数器t1t1中断允许控制位中断允许控制位 et1=1et1=1,t1t1开中;开中;et1=0et1=0,t1t1关中。关中。 eses 串行口中断串行口中断( (包括串发、串收包括串发、串收) )允许控制位允许控制位 es=1es=1,串行口开中;串行口开中;es=0es=0,串行口关中。串行口关中。 说明说明: : mcs-51mcs-51对中断实行对中断实行两级两级控制,控

22、制,总控制位是总控制位是eaea, 每一中断源还有各自的控制位。每一中断源还有各自的控制位。首先首先要要ea=1ea=1,其次其次 还要自身的控制位置还要自身的控制位置“1”“1”。 例如例如: :要使要使int0int0开中开中( (其余关中其余关中) ),可执行下列指令:,可执行下列指令: setb setb eaea setbsetb ex0ex0 或者或者 movmovie ie ,#10000001b#10000001b 或者或者 orlorlie ie ,#10000001b#10000001b ieied7d7d6d6d5d5d4d4d3d3d2d2d1d1d0d0 位名称位名称

23、eaeaeseset1et1ex1ex1et0et0ex0ex0 位地址位地址afhafhachachabhabhaahaaha9ha9ha8ha8h 中断源中断源cpucpu串行串行 口口 t1t1t0t0 中断允许控制寄存器中断允许控制寄存器ieie 中断嵌套结构类似与中断嵌套结构类似与 调用子程序嵌套,调用子程序嵌套,不同不同 的是的是: 子程序嵌套是在程序子程序嵌套是在程序 中事先按排好的;中断中事先按排好的;中断 嵌套是嵌套是随机随机发生的。发生的。 子程序嵌套无次序限子程序嵌套无次序限 制,中断嵌套只允许高制,中断嵌套只允许高 优先级优先级“中断中断”低优先低优先 级。级。 3 3

24、中断优先级控制寄存器中断优先级控制寄存器ipip mcs-51 mcs-51单片机单片机有有5 5个中断源个中断源,有有两个中断优先两个中断优先 级级:高优先级和低优先级,可实现两级中断服务嵌:高优先级和低优先级,可实现两级中断服务嵌 套,由套,由ipip控制。只要对控制。只要对ipip各位置各位置1 1或清零,就可对或清零,就可对 各中断源设置高优先级或低优先级。相应位置各中断源设置高优先级或低优先级。相应位置1 1, 定义为高优先级;相应位清零,定义为低优先级。定义为高优先级;相应位清零,定义为低优先级。 ipip寄存器的字节地址为寄存器的字节地址为0b8h0b8h,位地址为,位地址为0b

25、fh0bfh0b8h0b8h。 ipip相关的位地址见表相关的位地址见表5.55.5。 px0px0 :int0int0中断优先级控制位。中断优先级控制位。px0=1px0=1,为为高高优先级;优先级; px0=0px0=0,为为低低优先级;优先级; px1px1 :int1int1中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 pt0pt0 :t0t0中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 pt1pt1 :t1t1中断优先级控制位。控制方法同上。中断优先级控制位。控制方法同上。 ps ps :串行口中断优先级控制位。控制方法同上。串行口中断优先级控

26、制位。控制方法同上。 ipipd7d7d6d6d5d5d4d4d3d3d2d2d1d1d0d0 位名称位名称pspspt1pt1px1px1pt0pt0px0px0 位地址位地址bchbchbbhbbhbahbahb9hb9hb8hb8h 中断源中断源串行口串行口t1t1int1int1t0t0int0int0 ipip的结构、位名称和位地址如下:的结构、位名称和位地址如下: 例如例如: :若要将若要将int1int1、串行口设置为高优先级,其余中断源串行口设置为高优先级,其余中断源 设置为低优先级,可执行下列指令:设置为低优先级,可执行下列指令: mov ipmov ip,#00010100

27、b#00010100b; 需要指出的是,若置需要指出的是,若置5 5个中断源全部为高优先级,就等于个中断源全部为高优先级,就等于 不分优先级。不分优先级。 mcs-51mcs-51单片机响应中断的基本原则如下:单片机响应中断的基本原则如下: 1 1)低优先级中断可被高优先级中断请求所中断,反之则不)低优先级中断可被高优先级中断请求所中断,反之则不 能。能。 2 2)在同一优先级中(不管是高优先级或低优先级),某个)在同一优先级中(不管是高优先级或低优先级),某个 中断一旦得到响应,与它同级的中断请求就不能再中断它。中断一旦得到响应,与它同级的中断请求就不能再中断它。 cpucpu同时接收到几个

28、中断时,首先响应优先级最高的中断请同时接收到几个中断时,首先响应优先级最高的中断请 求。如果同级的多个中断请求同时出现,则按求。如果同级的多个中断请求同时出现,则按cpucpu查询次序查询次序 确定的中断优先权排队来响应,其确定的查询次序见表确定的中断优先权排队来响应,其确定的查询次序见表5.65.6。 由此可见,各中断源在同一个优先级的条件下,外部中断由此可见,各中断源在同一个优先级的条件下,外部中断0 0 的中断优先权最高,串行口中断优先权最低。的中断优先权最高,串行口中断优先权最低。 查询顺序查询顺序如如表表5-65-6: 表表5-65-6中断源同级优先次序中断源同级优先次序 中断源中断

29、源 中断级别中断级别 外部中断外部中断0 0最高最高 t0t0溢出中断溢出中断 外部中断外部中断1 1 t1t1溢出中断溢出中断 串行口中断串行口中断最低最低 5.3 5.3 中断处理过程中断处理过程 中断处理过程可分为三个阶段,即中断处理过程可分为三个阶段,即中断响应中断响应、中中 断处理断处理和和中断返回中断返回。所有计算机的中断处理都有这样。所有计算机的中断处理都有这样 三个阶段,但不同的计算机由于中断系统的硬件结构三个阶段,但不同的计算机由于中断系统的硬件结构 不完全相同,因而中断响应的方式有所不同,其一般不完全相同,因而中断响应的方式有所不同,其一般 的流程图如图的流程图如图5.45

30、.4所示。所示。 5.3.1 5.3.1 中断响应中断响应 1 1cpucpu的中断响应条件的中断响应条件 cpucpu响应中断的条件主要有以下几点:响应中断的条件主要有以下几点: 1 1)由中断源发出中断申请。由中断源发出中断申请。 2 2)中断总允许位中断总允许位eaea1 1,即,即cpucpu允许所有中断源申请中断。允许所有中断源申请中断。 3 3)申请中断的中断源的中断允许位为申请中断的中断源的中断允许位为1 1,即此中断源没有被屏,即此中断源没有被屏 蔽,可以向蔽,可以向cpucpu申请中断。申请中断。 以上是以上是cpucpu响应中断的基本条件。若满足,响应中断的基本条件。若满足

31、,cpucpu一般会响应中一般会响应中 断,但如果有下列任一种情况存在,中断响应即被封锁。断,但如果有下列任一种情况存在,中断响应即被封锁。 1 1)cpucpu正在执行一个同级或高级的中断服务程序。正在执行一个同级或高级的中断服务程序。 2 2)当前的机器周期不是正在执行的指令的最后一个周期,即正当前的机器周期不是正在执行的指令的最后一个周期,即正 在执行的指令完成前任何中断请求都得不到响应。在执行的指令完成前任何中断请求都得不到响应。 3 3)正在执行的指令是返回指令正在执行的指令是返回指令retireti或者对专用寄存器或者对专用寄存器ieie、ipip进进 行读写的指令时,在执行行读写

32、的指令时,在执行retireti或者读写或者读写ieie或或ipip之后,不会马之后,不会马 上响应中断请求。上响应中断请求。 2 2中断响应过程中断响应过程 如果中断响应条件满足,且不存在中断受阻的情况,如果中断响应条件满足,且不存在中断受阻的情况, 则则cpucpu响应中断。此时,中断系统通过硬件生成的长调用响应中断。此时,中断系统通过硬件生成的长调用 指令指令“lcall”lcall”,自动把断点地址压入堆栈保护(但不保,自动把断点地址压入堆栈保护(但不保 护状态寄存器护状态寄存器pswpsw及其他寄存器内容),然后将对应的中及其他寄存器内容),然后将对应的中 断入口地址装入程序计数器断

33、入口地址装入程序计数器pcpc使程序转向该中断入口地址,使程序转向该中断入口地址, 并执行中断服务程序。并执行中断服务程序。 5.3.2 5.3.2 中断处理中断处理 中断处理(又称中断服务)程序从入口地址开始执行,中断处理(又称中断服务)程序从入口地址开始执行, 直到返回指令直到返回指令“reti”reti”为止,这个过程称为中断处理。为止,这个过程称为中断处理。 5.3.3 5.3.3 中断返回中断返回 中断返回是指中断服务完成后,计算机返回到断点(原来中断返回是指中断服务完成后,计算机返回到断点(原来 断开的位置),继续执行原来的程序。中断返回由专门的中断断开的位置),继续执行原来的程序

34、。中断返回由专门的中断 返回指令返回指令“reti”reti”实现。该指令的功能是把断点地址取出,送实现。该指令的功能是把断点地址取出,送 回到程序计数器回到程序计数器pcpc中去。另外,它还通知中断系统已完成中断中去。另外,它还通知中断系统已完成中断 处理,将清除优先级状态触发器。特别要注意不能用处理,将清除优先级状态触发器。特别要注意不能用“ret”ret”指指 令代替令代替“reti”reti”指令。指令。 恢复断点地址恢复断点地址: : 将原来压入堆栈中的将原来压入堆栈中的pcpc断点地址从堆栈中弹断点地址从堆栈中弹 出,送回出,送回pcpc。这样这样cpucpu就返回到原断点处,继续

35、执行被中断就返回到原断点处,继续执行被中断 的原程序。的原程序。初学者容易模糊的是初学者容易模糊的是,中断返回,返回哪里,中断返回,返回哪里? ? 答答 案是:从什么地方来,回什么地方去。不是返回到相应中断案是:从什么地方来,回什么地方去。不是返回到相应中断 的入口地址,而是返回到中断断点地址。的入口地址,而是返回到中断断点地址。 5.3.4 5.3.4 中断响应时间中断响应时间 外部中断的外部中断的最短最短的响应时间为的响应时间为3 3个机器周期个机器周期: : (1 1)中断请求标志位查询占)中断请求标志位查询占1 1个机器周期个机器周期。 (2 2)子程序调用指令)子程序调用指令lcal

36、llcall转到相应的中断服务程序入口,转到相应的中断服务程序入口, 需需2 2个机器周期个机器周期。 外部中断响应的外部中断响应的最长最长的响应时间为的响应时间为8 8个机器周期个机器周期: (1 1)发生在发生在cpucpu进行中断标志查询时,进行中断标志查询时,刚好是开始执行刚好是开始执行retireti 或是访问或是访问ieie或或ipip的指令,则需把当前指令执行完再继续执的指令,则需把当前指令执行完再继续执 行一条指令后,才能响应中断,当前指令执行完行一条指令后,才能响应中断,当前指令执行完最长需最长需2 2个个 机器周期机器周期。 (2 2)接着再执行一条指令,按最长指令(乘法指

37、令接着再执行一条指令,按最长指令(乘法指令mulmul和除和除 法指令法指令divdiv)来算,也只有来算,也只有4 4个机器周期个机器周期。 (3 3)加上加上硬件子程序调用硬件子程序调用指令指令lcalllcall的执行,需要的执行,需要2 2个机器周个机器周 期期。 所以,外部中断响应最长时间为所以,外部中断响应最长时间为8 8个机器周期。个机器周期。 如果已在处理同级或更高级中断,响应时间无法计算。如果已在处理同级或更高级中断,响应时间无法计算。 在一个单一中断的系统里,在一个单一中断的系统里,mcs-51mcs-51单片机对外部中断请求的单片机对外部中断请求的 响应的时间总是在响应的

38、时间总是在3 38 8个机器周期个机器周期之间。之间。 5.3.5 5.3.5 中断请求的撤销中断请求的撤销 中断源发出中断请求,相应中断请求标志置中断源发出中断请求,相应中断请求标志置“1”“1”。 cpucpu响应中断后,响应中断后,必须必须清除中断请求清除中断请求“1”“1”标志。否则中断响标志。否则中断响 应返回后,将再次进入该中断,引起死循环出错。应返回后,将再次进入该中断,引起死循环出错。 (1 1)定时器中断请求的撤销)定时器中断请求的撤销 对于定时器对于定时器0 0或或1 1溢出中断,溢出中断,cpucpu在响应中断后即由硬件在响应中断后即由硬件自动自动 清除其中断标志位清除其

39、中断标志位tf0tf0或或tf1tf1,无需采取其他措施。,无需采取其他措施。 (2 2)串行口中断请求的撤销)串行口中断请求的撤销 对于串行口中断,对于串行口中断,cpucpu在响应中断后,硬件在响应中断后,硬件不能自动不能自动清除中清除中 断请求标志位断请求标志位titi、riri,必须在中断服务程序中,必须在中断服务程序中用软件用软件将其清将其清 除。除。 (3 3)外部中断请求的撤销)外部中断请求的撤销 外部中断可分为边沿触发型和电平触发型。外部中断可分为边沿触发型和电平触发型。 例:例: 硬件电路如图所示。当外部设备有中断请求时,中硬件电路如图所示。当外部设备有中断请求时,中 断请求

40、信号经反相,加到锁存器断请求信号经反相,加到锁存器cpcp端,作为端,作为cpcp脉冲。由脉冲。由 于于d d端接地为端接地为0 0,q q端输出低点平,触发端输出低点平,触发 int0int0生中断。生中断。当当 cpucpu响应中断后,应在该中断服务程序中按排两条指令响应中断后,应在该中断服务程序中按排两条指令: clr p1.0clr p1.0 setb p1.0 setb p1.0 从而撤消引起重复中断的从而撤消引起重复中断的int0int0低电平信号。低电平信号。 因此一般来说因此一般来说,对外中断,对外中断int0int0、intlintl,应尽量采用应尽量采用 边沿触发方式,以简

41、化硬件电路和软件程序。边沿触发方式,以简化硬件电路和软件程序。 5.4 5.4 中断程序设计结构及应用举例中断程序设计结构及应用举例 中断系统的应用要解决的问题主要是编写应用程序,中断系统的应用要解决的问题主要是编写应用程序, 编写应用程序包括两大部分:编写应用程序包括两大部分:一是一是中断初始化;中断初始化;二是二是中中 断服务程序。本节将介绍中断程序的一般设计方法,并断服务程序。本节将介绍中断程序的一般设计方法,并 通过实例说明中断系统的应用。通过实例说明中断系统的应用。 5.4.1 5.4.1 中断程序的一般设计方法中断程序的一般设计方法 1 1主程序主程序 在编写主程序时应注意以下两点

42、。在编写主程序时应注意以下两点。 1 1)主程序的起始地址)主程序的起始地址:mcs-51mcs-51单片机复位后,单片机复位后,(pc)(pc) 0000h0000h,而各中断源的入口地址为,而各中断源的入口地址为0003h0003h0023h0023h。因此,。因此, 在编写程序时应在在编写程序时应在0000h0000h处使用一条转移指令以跳过上述处使用一条转移指令以跳过上述 区域,主程序则以转移指令的目的地址作为其起始地址。区域,主程序则以转移指令的目的地址作为其起始地址。 2 2)中断系统的初始化)中断系统的初始化 2 2中断服务程序中断服务程序 在编写中断服务程序时应注意以下三点。在

43、编写中断服务程序时应注意以下三点。 1 1)由表由表5.15.1可知,五个中断源的入口地址之间彼此相可知,五个中断源的入口地址之间彼此相 差差8 8个存储单元,一般来说无法容纳下一个完整的中断个存储单元,一般来说无法容纳下一个完整的中断 服务程序。因此,通常在中断服务程序的入口处设置服务程序。因此,通常在中断服务程序的入口处设置 一条三字节长转移指令,这样可使中断服务程序安排一条三字节长转移指令,这样可使中断服务程序安排 在在64kb64kb程序存储器的任何地方。程序存储器的任何地方。 2 2)在中断服务程序的开始应使用软件保护现场,在中在中断服务程序的开始应使用软件保护现场,在中 断处理完成

44、之后、中断返回之前应恢复现场。断处理完成之后、中断返回之前应恢复现场。 3 3)中断服务程序的最后一条指令是中断返回指令中断服务程序的最后一条指令是中断返回指令retireti。 下面通过实例来说明中断程序的一般设计方法。利用外部下面通过实例来说明中断程序的一般设计方法。利用外部 中断中断0向向cpu申请中断,中断服务将申请中断,中断服务将pl口作为输出驱动。口作为输出驱动。 主程序如下:主程序如下: org 0000h ajmp main ;转向主程序;转向主程序 org 0003h ;外部中断;外部中断0入口地址入口地址 ajmp wint ;指向中断服务程序;指向中断服务程序 org 0

45、100h ;主程序;主程序 main:setb it0 ;选择边沿触发方式;选择边沿触发方式 setb ex0 ;允许外部中断;允许外部中断0 setb ea ;cpu允许中断允许中断 here:ajmp here ;主程序踏步;主程序踏步 中断服务程序如下:中断服务程序如下: org 0200h wint:mov a, #0ffh mov p1, a ;输出驱动;输出驱动 reti ;中断返回;中断返回 end 5.4.2 5.4.2 中断程序应用举例中断程序应用举例 【例例5.15.1】 如图如图5.65.6所示,要求每次来一个负脉冲,使连所示,要求每次来一个负脉冲,使连 接到接到p1p1

46、口的发光二极管口的发光二极管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 ;开总允许开关开总允许开关 sjmp $ ;等待等待 int_x1:mov

47、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 rl a reti end 对应的对应的c语言程序如下:语言程序

48、如下: #include unsigned char i=0 x01; 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修饰符修饰符 这个修饰符用于把函数定义为可重入函数。所这个修饰符用于把函数定义为可重入函数。所 谓可重入函数就是允许被递归调用的函数。函数的谓可重入函数就是允许被递归调用的函数。函数的 递归调用是指当一个函数正被调用尚未返回时,又递归调用是指当一个函数正被调用尚未返回时,又

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

50、堆栈区,称为重入栈。重入函数的局部建立一个模拟堆栈区,称为重入栈。重入函数的局部 变量及参数被放在重入栈中,使重入函数可以实现递变量及参数被放在重入栈中,使重入函数可以实现递 归调用。归调用。 (3)在参数的传递上,实际参数可以传递给间接调用)在参数的传递上,实际参数可以传递给间接调用 的重入函数。无重入属性的间接调用函数不能包含调的重入函数。无重入属性的间接调用函数不能包含调 用参数,但是可以使用定义的全局变量来进行参数传用参数,但是可以使用定义的全局变量来进行参数传 递。递。 5interrupt m修饰符修饰符 interrupt m是是c51函数中非常重要的一个修饰符,这函数中非常重要的一个修饰符,这 是因为中断函数必须通过它进行修饰。在是因为中断函数必须通过它进行修饰。在c51程序设计中,程序设计中, 当函数定义时用了当函数定义时用了interrupt m修饰符,系统编译时把对应修饰符,系统编译时把对应 函数转化为中断函数,自动加上程序头段和尾段,并按函数转化为中断函数,自动加上程序头段和尾段,并按 mcs-51系统中断的处理方式自动把它安排在程序存储器系统中断的处理方式自动把它安排在程序存储器 中的相应位置。中的相应位置。 在该修饰符中,在该修饰符中,m的取值为的取值为031,对应的中断情况如下:,对应的中断

温馨提示

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

评论

0/150

提交评论