《单片机原理及接口技术-基于C51+Proteus仿真》-第5章 80C51单片机的中断系统最终_第1页
《单片机原理及接口技术-基于C51+Proteus仿真》-第5章 80C51单片机的中断系统最终_第2页
《单片机原理及接口技术-基于C51+Proteus仿真》-第5章 80C51单片机的中断系统最终_第3页
《单片机原理及接口技术-基于C51+Proteus仿真》-第5章 80C51单片机的中断系统最终_第4页
《单片机原理及接口技术-基于C51+Proteus仿真》-第5章 80C51单片机的中断系统最终_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

15.1中断的概念5.280C51中断系统的结构5.2.1中断源及中断标志位5.2.2中断控制寄存器5.3中断响应过程5.4中断服务函数及应用5.4.1中断服务函数5.4.2外部中断服务函数应用设计2第5章80C51单片机的中断系统本章介绍80C51单片机片内重要功能部件中断系统的结构、工作原理和应用设计,通过本章的学习,读者重点掌握中断系统相关的特殊功能寄存器的使用,能熟练设计中断系统初始化程序以及中断函数。5.1中断的概念在嵌入式系统(包括单片机)应用中,当内部、外部随机事件发生时,能及时响应并实时处理都是利用中断技术实现的。中断是指CPU正在执行程序的过程中,CPU内部或外部某一事件(如内部定时器/计数器的溢出或外部信号通过某一个引脚发生电平的变化、引脚脉冲沿跳变等)作为中断源向CPU发出中断请求信号,要求CPU暂时终止当前正在执行的程序,转去执行相应的中断服务程序,待中断服务请求处理完毕后,再回到原来被中断的程序处(断点)继续执行。这种程序在执行过程中由于内部或外界的随机事件而被中间打断的情况称为“中断”。单片机对中断源中断服务请求的整个响应和处理过程如图5-1所示。3图5-1单片机中断响应和处理过程图

中断的发生是由内部或外部因素随机决定的,程序中无法事先安排调用指令,所以响应中断服务程序的过程是由硬件自动完成的。这种模式的实现依靠中断系统,中断系统是单片机的重要组成部分,实时控制、故障自动处理、计算机与外设间数据传送一般采用中断系统。中断系统的应用大大提高了单片机的工作效率。80C51单片机具有比较完善的中断系统,下面介绍其中断系统的结构及功能。45.280C51中断系统的结构80C51中断系统的结构如图5-2所示。80C51单片机系统有5个中断请求源,分为两个中断优先级,中断服务程序可实现两级嵌套,中断系统功能的实现是通过软件对SFR进行控制,每个中断源可独立设置为允许中断或关中断状态,每个中断源可独立设置为高优先级或低优先级。5.2.1中断源及中断标志位80C51单片机有5个,各中断源是否有中断请求,是由中断请求标志位来表示的。中断源及请求标志位如表5-1所示。中断源的中断请求标志位分别由TCON和SCON的相应位锁存。5表5-1中断源及标志位6图5-280C51中断系统结构示意图75.2.2中断控制寄存器80C51通过对4个特殊功能寄存器的设置来控制5个中断源是否允许中断、各中断源的中断优先级别、中断申请方式以及标识是否有中断请求等。用于中断控制和标识的4个SFR分别是:定时器/计数器及外部中断控制寄存器TCON、串行口控制寄存器SCON、中断允许控制寄存器IE以及中断优先级控制寄存器IP。

1.TCONTCON字节地址为88H,每位可以单独寻址和设置,每位名称、位地址及含义如表5-2所示。TCON中包含2位外部中断请求源的中断触发方式控制位,还包括与中断有关的4位标志位。表5-2TCON寄存器8

(1)TCON中与外部中断有关的2位控制位①IT0:外部中断0的中断触发方式控制位。IT0=0时,外部中断0为电平触发方式,当引脚P3.2为低电平,则IE0自动置1,表示有中断请求。IT0=1时,外部中断0为跳沿触发方式,若CPU检测到引脚P3.2有由高到低的负跳边沿时,则使IE0置1,表示有中断请求。②IT1:外部中断1的中断触发方式控制位。其含义与IT0类同。(2)外部中断触发方式有关外部中断触发方式的说明如下。若ITx(x=0,1)=0,为电平触发方式,在引脚P3.2(P3.3)上被检测的低电平必须保持到CPU响应该中断时为止,且在中断服务程序返回前变为高电平,以免在中断返回后又再次响应该中断而出错。所以电平触发方式适用于外部中断请求输入为低电平(为被CPU采样到,低电平应至少保持12个振荡周期),且能在中断服务程序中撤销请求源的情况。9

②若ITx=1,则为跳沿触发方式。CPU在连续的两个机器周期中,前一个机器周期从P3.2(P3.3)引脚上检测到高电平,后一个机器周期检测到低电平,才置位IEx(IE0或IE1),由IEx发出中断请求。所以跳变触发方式的外部中断,要求输入的负脉冲宽度至少保持12个振荡周期,以确保检测到引脚上的电平跳变。(3)TCON中与中断有关的标志位TCON中与中断有关的标志位有4位,功能如下。①IE0:外部中断0的中断请求标志位。当单片机检测到外部中断0引脚(P3.2)上出现有效的中断请求信号时,由硬件使IE0置1。当CPU响应该中断请求时,由硬件自动对IE0清0。②IE1:外部中断1的中断请求标志。其含义与IE0类同。③TF0:定时器/计数器T0的溢出中断请求标志位,启动定时器T0后,T0从设置初值开始加1计数。当计数器T0最高位产生溢出时,由硬件自动对TF0置1,并向CPU发出中断请求。当CPU响应中断时,由硬件自动使TF0清0。10

④TF1:定时器/计数器T1的溢出中断请求标志位。含义与TF0相同。2.SCONSCON字节地址为98H,每位可以单独寻址和设置,每位名称、位地址及含义如表5-3所示。SCON中包含2位与串口中断有关的标志位。表5-3SCON寄存器

(1)串行口发送中断请求标志TI当CPU每发送完一帧数据后,此时SBUF寄存器空,硬件自动对TI置1,请求中断。CPU响应中断后,必须在中断服务程序中用指令对TI清0。11

(2)串行口接收中断请求标志RI当串行口接收完一帧数据时,此时SBUF寄存器满,硬件自动对RI置1,请求中断。CPU响应中断后,必须在中断服务程序中用指令对RI清0。3.中断允许控制寄存器IEIE字节地址为A8H,每位可以单独寻址并设置,每位名称、位地址及含义如表5-4所示。80C51单片机对中断的开放和关闭采用两级控制。第一级是设置了1个总中断控制位EA(IE.7位),第二级设置了5个中断源的中断开放与否的中断请求允许控制位。表5-4IE寄存器12

(1)中断允许总控制位EAEA=0,关闭所有中断;EA=1,开放所有中断,但是否允许各中断源的中断请求,还取决于各中断源的中断允许控制位的设置。(2)串行口的中断允许位ESES=0:禁止串口中断;ES=1:允许串口中断。(3)定时器/计数器T1的中断允许位ET1ET1=0:禁止T1中断;ET1=1:允许T1中断。(4)外部中断1()的中断允许位EX1EX1=0:禁止外部中断1中断;EX1=1:允许外部中断1中断。(5)定时器/计数器T0的中断允许位ET0ET0=0:禁止T0中断;ET0=1:允许T0中断。13

(6)外部中断0()的中断允许位EX0EX0=0:禁止外部中断0中断;EX0=1:允许外部中断0中断。

4.中断优先级控制寄存器IP80C51单片机设有两级中断优先级,可设置IP寄存器相应位实现2级中断优先级选择。IP字节地址为B8H,各位名称、位地址及含义如表5-5所示。表5-5IP寄存器

(1)串行口中断优先级控制位PSPS=1,设置串口高优先级;PS=0,设置串口低优先级。(2)定时器/计数器T1中断优先级控制位PT114

PT1=1,设置T1高优先级;PT1=0,设置T1低优先级。(3)外部中断1优先级控制位PX1PX1=1,设置外部中断1高优先级;PX1=0,设置外部中断1低优先级。(4)定时器/计数器T0中断优先级控制位PT0PT0=1,设置T0高优先级;PT0=0,设置T0低优先级。(5)外部中断0中断优先级控制位PX0PX0=1,设置外部中断0高优先级;PX0=0,设置外部中断0低优先级。80C51单片机复位后,IP=0,5个中断源都处于低优先级中断。80C51单片机中断系统设置中断优先级控制寄存器IP和中断允许寄存器IE后,如果几个同一优先级的中断源同时向CPU申请中断,CPU通过内部顺序查询逻辑电路,按自然优先级顺15序确定应该响应哪个中断请求。自然优先级由硬件形成,其排列如表5-6所示,依次为外部中断0、定时器0溢出中断、外部中断1、定时器1溢出中断、串行口中断。5个中断源中断请求响应后,程序分别转向对应的5个固定的中断入口地址(中断向量),具体地址如表5-6所示。表5-6中断源入口地址及同一优先级下的自然优先序

【例5-1】若允许开放外部中断0、外部中断1中断,并选择外部中断0为跳沿触发方式,外部中断1为电平出发方式,并设置外部中断1具有高的优先级。参考程序如下:16{……EA=1; //开放总中断EX0=1; //允许外部中断0中断EX1=1; //允许外部中断1中断IT0=1; //设置外部中断0为跳沿触发方式IT1=0; //设置外部中断1为电平触发方式PX1=1; //外部中断1具有高优先级……}5.3中断响应过程80C51单片机对中断源中断请求作出响应,必须满足中断响应条件;中断请求也会遇到被封锁的情况,中断还会出现嵌套,本节讨论中断响应的过程及中断响应时间。1.满足中断响应需要的条件CPU对中断请求进行响应,必须检测到下面5个条件。(1)中断允许总控制位开放,即EA=1。17

(2)某一中断源有请求信号,即中断源对应的中断标志位为1。(3)该中断源对应的中断允许位置1。(4)无同级或更高级中断正在服务。 (5)当前的指令周期已经结束,且当前指令不是RETI或访问IE和IP的指令。CPU响应中断时,第一步置位相应的优先级激活触发器,以便封锁同级和低级的中断。第二步,把程序计数器PC的内容压入堆栈(但不自动保存程序状态字PSW),同时把被响应的中断服务程序的入口地址装入PC中。第三步,在硬件的控制下,程序转向被响应的中断向量,执行中断请求需要的中断服务程序。

2.中断请求被封锁的情况单片机CPU在每个机器周期的S5P2节拍采样中断标志,在下一个机器周期对采样到的中断源查询。如果遇到下列3种情况之一时,对该中断源的响应被封锁。18

(1)CPU正在处理同级或高级的中断。(2)现行的机器周期不是当前所执行指令的最后一个机器周期。(3)当前正在执行的指令是中断返回指令(RETI)或是对IE或IP寄存器访问的指令。

3.中断的嵌套80C51单片机有两个中断优先级。当CPU正在执行中断服务程序时,又有其他中断源发出中断申请,CPU要分析判断,决定是否响应该中断。判决规则如下:(1)若是同级中断源申请中断,CPU将不予理睬;(2)若是高级中断源申请中断,CPU将转去响应高级中断请求,待高级中断服务程序执行完毕,CPU再转回低级中断服务程序断点处接着执行。这就是中断的嵌套,二级中断嵌套程序执行过程如图5-3所示。19图5-380C51中断的嵌套调用过程

4.中断响应时间以外部中断响应为例,单片机在每个机器周期的S5P2时,采集外部中断和的引脚电平,并锁存到IE0和IE1中,这个设置IE0和IEl的标志位在下一个机器周期才被查询电路查询。如果产生了中断请求,而且满足响应的条件,CPU响应中断后,由硬件生成一条双机器周期的长调用指令转到相应的中断向量处,因此,20从中断请求有效到执行中断服务程序的时间间隔至少需要3个完整的机器周期。如果中断请求被封锁,那么80C51将需要更长的响应时间。(1)若同级的或高优先级中断已经在执行,则等待时间取决于正在处理的中断服务程序的长度。(2)若正在执行的是RETI指令或者是访问IE或IP指令,指令执行时间为2个机器周期,则CPU接着还需要执行一条指令才响应中断,如果这条指令是需要最长时间指令,即4个机器周期的MUL或DIV指令,另外加上执行由硬件生成的2个机器周期的长调用指令转到相应的中断向量处所需时间,外部中断响应最长时间为8个机器周期。这样,在单片机应用系统中只有一个中断源的情况下,响应时间总是在3~8个机器周期之间。5.4中断服务函数及应用在第3章中已简要介绍中断服务函数,C51中定义了中断函数来编写中断服务程序,大大减轻了编写中断服务程序的复杂程度。21本节介绍中断服务函数的设计及应用。5.4.1中断服务函数在C51中专门设计interrupt修饰符来定义中断服务函数,对声明为中断服务程序的函数,在系统编译时会自动将当前工作寄存器区内容入栈、函数返回前将被保护的内容出栈,并将中断服务函数安排在程序存储器中的相应位置。中断服务函数的格式为:函数类型函数名(void)interruptnusingm对中断服务函数使用的说明:1.中断函数没有返回值,函数类型建议用void类型。2.interrupt后的n为中断号,对于MCS-51子系列(如80C51),n取值为0~4,对MCS-52子系列,n取值为0~5,中断服务程序从8×n+3的中断向量处开始执行。中断号与中断向量的对应关系如表5-7所示。22表5-7中断号与中断向量的对应关系

3.关键字using是可选项,后面的m用来选择4个工作寄存器区。m取值为0~3。工作寄存器区与工作寄存器地址如表5-8所示。中断号n中断源中断向量8n+30外部中断00003H1定时器/计数器T0000BH2外部中断10013H3定时器/计数器T1001BH4串行口中断0023H5定时器/计数器T2002BH23表5-8工作寄存器区及地址

中断服务函数中如果选用usingm,程序执行开始会自动将PSW入栈,并修改PSW中的工作寄存器组选择位RS1、RS0到m指定的工作区。4.在中断服务程序中调用其他函数,必须保证所调用函数使用的工作寄存器区与中断函数使用的寄存器区不同。工作寄存器区mRS1 RS0 工作寄存器工作寄存器在RAM中的地址000R0~R700~07H101R0~R708~0FH210R0~R710~17H311R0~R718~1FH245.4.2外部中断服务函数应用设计本节通过几个案例,介绍有关外部中断应用程序的设计。例5-2】电路如图5-4所示,设计一个对外部中断0计数的程序。在80C51单片机的P1口连接8只LED,在外部中断0输入引脚P3.2连接一个按钮开关K。要求如下:(1)每按一次K,产生外部中断0请求,在外部中断0服务程序中统计中断发生的次数;(2)主程序实现在8个LED上按16进制方式显示中断次数。25图5-4一个外部中断计数电路26

参考程序如下:#include<reg51.h>#defineucharunsignedcharuchara=0x00;voidDelay(unsignedintx)//延时1ms函数{ucharj;while(x--){for(j=0;j<125;j++);}}voidmain() //主函数{uchartemp;EA=1; //开放总中断EX0=1; //允许外部中断0中断IT0=1; //外部中断0为负跳变触发方式27while(1) {temp=a;temp=~temp;P1=temp;}}voidint0()interrupt0 //外部中断0服务程序{a=a+1;} 【例5-3】设计二个外部中断嵌套程序,电路如图5-5所示。在80C51单片机的P0口连接8只LED,在外部中断0输入引脚P3.2和外部中断1输入引脚P3.3各接一个按钮开关K1和K2。要求如下:(1)K1和K2均未按下时,P0口连接的8只LED呈间隔点亮后交替;(2)按下K1,产生高优先级的外部中断0请求,在28中断服务程序中使8只LED自上而下流水点亮,显示3遍。(3)按下K2,产生低优先级的外部中断1请求,在中断服务程序中使8只LED自下而上流水点亮,显示3遍。图5-5二个外部中断嵌套电路29

参考程序如下:#include<reg51.h>#include<intrins.h> #defineucharunsignedcharuchardisplay[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voidDelay(unsignedintx)//延时1ms函数{ucharj;while(x--){for(j=0;j<125;j++);}}voidmain() //主函数{EA=1; //开放总中断EX0=1; //允许外部中断0中断EX1=1; //允许外部中断1中断30IT0=1; //外部中断0为负跳变触发方式IT1=1; //外部中断1为负跳变触发方式PX0=1; //外部中断0中断具有高优先级PX1=0; //外部中断1中断具有低优先级while(1) {P0=0x55;Delay(500);P0=0xaa;Delay(500);}}voidint0()interrupt0 //外部中断0服务程序{ucharm,a;for(m=0;m<3;m++){for(a=0;a<8;a++) {P0=display[a];31Delay(500);}}} voidint1()interrupt2 //外部中断0服务程序{ucharn;P0=0x7f;Delay(500);for(n=0;n<23;n++){P0=_cror_(P0,1);Delay(500); }}32

【例5-4】设计单片机响应8个外部中断的例子,电路图如图5-6所示。8只开关K1-K8一端接地,另一端连接80C51单片机的P2口,同时连接8输入与非门74LS30的8个输入端。74LS30输出端经反相器74LS04连接至单片机外部中断0输入引脚P3.2,当某个开关按下,表示某个相应外部中断发生,此时地电位信号通过按下的开关送与非门74LS30输入端,74LS30输出的高电平经反相器74LS04取反,生成的低电平信号作为外部中断0的请求信号。单片机响应外部中断0后,在中断程序中通过P2口查询发生的外部中断号。要求编程实现如下要求:(1)K1~K8均未按下时,P1口连接的8只LED呈间隔点亮;(2)若8只开关对应P1口连接的8个LED,当按下某一个开关,则相应的LED点亮。33图5-6单片机响应8个外部中断34

参考程序如下:#include<reg51.h>#include<intrins.h> #defineucharunsignedcharsbitKEY1=P2^0; sbitKEY2=P2^1;sbitKEY3=P2^2;sbitKEY4=P2^3;sbitKEY5=P2^4;sbitKEY6=P2^5;sbitKEY7=P2^6;sbitKEY8=P2^7;uchara=0x55;voidDelay(unsignedintx){ucharj;35while(x--){for(j=0;j<125;j++);}}voidmain() {EA=1; EX0=1; IT0=1; P1=a;Delay(500); while(1) {P1=a;Delay(500);}}36voidint0()interrupt0 {P2=0xff;if(KEY1==0){a=0xfe;}elseif(KEY2==0){a=0xfd;

温馨提示

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

评论

0/150

提交评论