资源描述
单片机原理及接口,第二级,第三级,第四级,第五级,第7章:,第6章:中断系统,本章基本要求:,中断的概念,51的中断系统*,51中断源的扩展,6.1中断的概念,6.1.1 中断的定义和作用,中断:是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序(中断服务程序),待处理结束之后,再回来继续执行被中止的原程序的过程。,这个过程还可以描述为:CPU自动执行中断服务程序并返回原程序执行的过程。,为什么要设置中断?,提高CPU工作效率,具有实时处理功能,具有故障处理功能,实现分时操作,中断功能强弱是计算机性能优劣的重要标志,6.1中断的概念,中断系统主要作用:,有效地解决了快速CPU与慢速外设之间的矛盾,可使CPU与外设并行工作,大大提高了工作效率。,可以及时处理控制系统中许多随机产生的参数与信息,即计算机具有实时处理能力,以此提高控制系统的性能。,使系统具备了及时处理故障的能力,提高了系统自身的可靠性。,中断源,中断申请,开放中断,保护现场,中断服务,恢复现场,中断返回,中断涉及的几个环节,6.1中断的概念,MCS-51单片机CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。,CPU识别中断申请的依据:,6.1中断的概念,6.1中断的概念,6.1.2 中断源,中断源:是指在计算机系统中向CPU发出中断请求的来源,中断可以人为设定,也可以是为响应突发性随机事件而设置的。通常有特殊指令、I/O设备、实时控制系统中的随机参数以及信息故障源。,中断请求:一般情况下可以是中断源向CPU发出的电信号,该信号能够被CPU识别并响应。,6.1中断的概念,对于各种计算机来说,其中断源的允许数目是不一样的,例如Z80允许128个中断源(不包括非屏蔽中断),而8086/8088则允许256个中断源。,MCS-51单片机相对来说较为简单,只提供了5个中断源:,2个外部中断请求INT0和INT1、,2个片内定时器/计数器T0和T1的溢出中断请求,串行口中断请求TI或RI(合为一个中断源)。,6.1中断的概念,6.1.3 中断的分类,可分为三类:,*可屏蔽中断:由CPU的可屏蔽中断引脚INT引起的中断。,*非屏蔽中断:由CPU的非屏蔽中断引脚NMI引起的中断(8086CPU)。,*软件中断:由中断指令引起的中断(8086CPU)。,51单片机的中断可以分为:,外部中断,由外部可屏蔽中断和外部计数器中断组成;内部中断,由内部定时器、串口传输中断等组成。,中断嵌套,当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。,中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。,中断嵌套结构类似与调用子程序嵌套,不同的是:,子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。,子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。,6.1中断的概念,6.1.5 中断系统功能,一个中断系统具备如下功能:,1、中断优先权排队,2、实现中断嵌套,3、自动响应中断,4、实现中断返回,中断系统需要解决两个主要问题:,一、是如何从主程序转到中断服务程序;,二、是如何从中断服务程序返回主程序。,6.251单片机的中断系统,6.2.1 51系列单片机中断源和中断标志,51系列单片机中:8031、8051、8751有5级中断;8032、8052、8752有6级中断;,1、中断源,51单片机五级中断源分为:两个外部中断、两个定时器溢出中断、一个串口中断。,外部中断源:,INT0、INT1,两条外部中断请求输入引脚。允许用户设定外部中断源以低电平或者是负跳变方式触发。,6.251单片机的中断系统,定时器溢出中断源:,内部中断,51内部有两个16位定时/计数器,它们由内部定时脉冲(主脉冲12分频)或外部引脚T0、T1输入的外部计数脉冲计数。当计数值溢出时,产生中断请求。这两个16位定时/计数器的初值可由用户设定。,串口中断源:,由51内部串行通讯口产生。可细分为串口发送、接收中断两种。当串行接口进行发送/接收完一组串行数据时,串口电路自动发出串口中断请求。,6.251单片机的中断系统,用户对中断系统的使用,一是通过设置和中断有关的控制字,二是通过设置中断服务程序来实现的。,在,51,系统中和中断有关的控制字有四个:,TCON控制字,字节地址:88H,串口SCON控制字,字节地址:98H,中断允许控制字IE,字节地址:A8H,中断优先权控制字IP,字节地址:B8H,2、TCON控制字的设定,TCON控制字的格式内容如下:字节地址:88H,6.251单片机的中断系统,说明:对,INT0、INT1,的检测:在每个机器周期的S5P2时,检测该引脚是否有效。,对定时器/计数器溢出的判断:同上。,对TCON的设定使用位地址。,分清哪些位是设定的和自动生成的。,TCON,D7,D6,D5,D4,D3,D2,D1,D0,位名称,TF1,TF0,IE1,IT1,IE0,IT0,位地址,8FH,8EH,8DH,8CH,8BH,8AH,89H,88H,功能,T1,中断,标志,T0,中断,标志,中断,标志,触发,方式,中断,标志,触发,方式,TCON,的结构、位名称、位地址和功能如下:,TCON位功能:,TF1 T1溢出中断请求标志,T1计数溢出后,TF1=1,TF0 T0溢出中断请求标志,T0计数溢出后,TF0=1,TF0/TF1:定时器溢出中断申请标志位:,=0:定时器未溢出;,=1:定时器溢出申请中断,进中断后自动清零。,IE1 外中断中断请求标志,当P3.3引脚信号有效时,IE1=1,IE0 外中断中断请求标志,当P3.2引脚信号有效时,IE0=1,IE0/IE1:外部中断申请标志位:,=0:没有外部中断申请;,=1:有外部中断申请。,TCON位功能:,IT1 外中断触发方式控制位,IT1=1,边沿触发方式;,IT1=0,电平触发方式。,IT0 外中断触发方式控制位,IT0=1,边沿触发方式;,IT0=0,电平触发方式。,IT0/IT1:外部中断请求的触发方式选择位:,=0:在INT0/INT1端申请中断的信号低电平有效;,=1:在INT0/INT1端申请中断的信号负跳变有效.,6.251单片机的中断系统,3、串行口中断设定,串行控制寄存器SCON,控制字,字节地址:98H,SCON,D7,D6,D5,D4,D3,D2,D1,D0,位名称,TI,RI,位地址,99H,98H,功能,串行发送,中断标志,串行接收,中断标志,TI 串行口发送中断请求标志,RI 串行口接收中断请求标志,6.251单片机的中断系统,说明:,TI:串行口发送中断标志。,在串行口以方式0发送时,每当发送完8位数据后,由硬件置位TI;若以方式1、2、3发送时,在发送停止位的开始时置位TI。TI=1表示串行口发送器正在向CPU申请中断。注意:当CPU响应该中断后,转向中断服务程序时并不复位TI,TI必须由用户在中断服务程序中用软件清0(可用CLR TI或其它指令)。,RI:串行口接收中断标志。,若串行口接收器允许接收并以方式0工作,则每当接收到第8位数据时置位RI;若以方式1、2、3工作,且SM2=0时,则每当接收器接收到停止位的中间时置位RI;当串行口以方式2或方式3工作,且SM2=1时,仅当接收到的第9位数据RB8为1后,同时还要接收到停止位的中间时置位RI。RI为1表示串行口接收器正向CPU申请中断,同样RI必须由用户在中断服务程序中清0。,6.251单片机的中断系统,6.2.251单片机对中断请求的控制,1、对中断允许的控制,中断允许寄存器IE,字节地址:A8H,IE的结构、位名称和位地址如下:,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,EA,ES,ET1,EX1,ET0,EX0,位地址,AFH,ACH,ABH,AAH,A9H,A8H,中断源,CPU,串行口,T1,T0,EA CPU中断允许控制位(总开关),EA=1,CPU开中断,EA=0,CPU关中断,且屏蔽所有5个中断源。,EX0 外中断INT0中断允许控制位,EX0=1,开INT0中断;EX0=0,关INT0中断。,EX1 外中断INT1中断允许控制位,EX1=1,开INT1中断;EX1=0,关INT1中,断,。,ET0 定时/计数器T0中断允许控制位,ET0=1,开T0中,断,;ET0=0,关T0中,断,。,ET1 定时/计数器T1中断允许控制位,ET1=1,开T1中,断,;ET1=0,关T1中,断,。,ES 串行口中断(包括串发、串收)允许控制位,ES=1,开串行口中,断,;ES=0,关串行口中,断,。,说明:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”。,6.251单片机的中断系统,例如:,要打开INT0中断(其余中断关闭),可执行下列指令:,MOV IE,#1000000lB;,或者:SETB EA ;,SETB EX0 ;,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,EA,ES,ET1,EX1,ET0,EX0,位地址,AFH,ACH,ABH,AAH,A9H,A8H,中断源,CPU,串行口,T1,T0,6.251单片机的中断系统,2、中断优先级控制,中断优先级控制字IP,字节地址:B8H,8051有5个中断源,划分为2个中断优先级:高优先级和低优先级。,IP的结构、位名称和位地址如下:,IE,D7,D6,D5,D4,D3,D2,D1,D0,位名称,PS,PT1,PX1,PT0,PX0,位地址,BCH,BBH,BAH,B9H,B8H,中断源,串行口,T1,INT1,T0,INT0,JB P1.,中断请求:一般情况下可以是中断源向CPU发出的电信号,该信号能够被CPU识别并响应。,0,LWK20 ;P1.,251单片机的中断系统,可以及时处理控制系统中许多随机产生的参数与信息,即计算机具有实时处理能力,以此提高控制系统的性能。,ANL TCON,#0FBH ;置INT1为电平触发,HERE:SJMP HERE ;原地等待中断申请,串行口中断请求TI或RI(合为一个中断源)。,利用MCS-51内部定时/计数器计数溢出时向CPU申请中断。,MAIN:MOVSP,#60H ;置堆栈指针,MOV IE,#1000000lB;,POP DPL ;恢复现场,串行控制寄存器SCON控制字,字节地址:98H,关中断:设置EA=0。,;主程序内容,6.251单片机的中断系统,说明:,51单片机的中断优先级只有高、低两级。,所有各位均用指令设定。当设置为1时,该位对应的中断源既为高级中断,否则,为低级中断。,按照优先级的概念,只有高级中断可以打断低级中断,同级中断按照:INT0,T0,INT1,T1,串行口的顺序先后相应处理。,在复位操作时,该控制字均被设置为0,用户应该使用指令将需要的位设置为1。,6.251单片机的中断系统,51单片机的中断系统结构汇总示意图如下图所示。,外部中断0,定时器0,外部中断1,定时器1,中断允许,总允许,优先级,串行口中断,6.251单片机的中断系统,6.2.351单片机对中断的响应,51应满足如下条件,才会响应中断。,处在开中断状态;,没有中断处理;若正在中断处理,而新的请求来自更高级中断源;,执行完现行指令以后;,若,正在执行RETI或执行和IP、IE有关的指令,则要求在处理其后一条指令后;,中断响应时,51自动执行:,6.251单片机的中断系统,中断响应时,51自动执行如下三步:,保护断点:断点入栈,。,关中断:设置EA=0。,根据中断源转到对应的服务程序,转移的依据如下:,MCS-51五个中断入口地址:,INT0:0003H,T0:000BH,INT1:0013H,T1:001BH,串行口:0023H,中断响应过程,每个周期S6对中断源进行采样在下一个周期按优先级顺序依次查询如果某个中断标志在上一个周期S6已被置“1”CPU执行硬件LCALL转向相应中断的特定单元,进入中断服务程序,但是如果遇上下列条件之一,硬件将受阻:,(1)正在执行同级或高级中断服务程序。,(2)当前的查询周期不是执行指令的最后一个机器周期。,(3)正在执行RETI或任何仿问IE或IP的指令。,CPU响应中断时先置“1”相应的优先级触发器,然后执行硬件LCALL(压栈与转移),同时清“0”中断请求标志(TI、RI除外),。,6.251单片机的中断系统,6.2.451单片机对中断的响应时间,在实时控制中,这是一个很重要的概念。一般情况下,需要,38,个机器周期。,但是,若CPU正在处理高级中断的服务程序,则对同级或低级中断的请求,只有在处理完当前的服务程序以后才会响应。,6.251单片机的中断系统,6.2.551单片机,对中断请求的撤消,在有中断请求时,其对应的状态是被所存在TCON和SCON中。一旦某个中断请求被响应,CPU必须将相应的中断标志位清0,否则会因中断的重复响应而出错。,51对他的五个中断有如下的清除标志方法:,1、定时器中断请求的撤除,51在响应定时器T0、T1的中断请求以后,会自动清除它们的中断请求标志TF0、TF1。,6.251单片机的中断系统,2、串行口中断请求的撤除,51在响应串行口中断请求以后,不会自动清除它们的中断请求标志TI、RI。用户必须在串口中断服务程序中使用指令清除这些标志。,3、外部中断请求的撤除,因外部中断请求有两种触发方式:负电平触发和下降沿触发。,对下降沿触发方式:51是依据先后两次检测到INT0、INT1的下降沿来触发IE0、IE1的,并且在相应中断之后自动清除IE0、IE1。因此,只要中断源没有得到服务之前不再产生负跳变,就不会使IE0、IE1再次有效。,6.251单片机的中断系统,对负电平触发方式:,51单片机是依据,INT0、INT1,上的电平状态来设置中断标志IE0、IE1的,并且在响应中断之后自动清除IE0、IE1。,因此,51单片机在响应这些中断请求之后,中断源必须撤销中断请求,否则将导致中断的重复响应。,6.251单片机的中断系统,6.2.6 51单片机中断系统,的初始化,其含义是:系统在开始运行时,用户在程序中如何对中断所涉及的控制字进行设置。,中断系统的初始化步骤为:,为中断源开放中断。,设定个中断源的优先级。,若有外部中断,应设定触发方式。,6.251单片机的中断系统,例6.1请写出INT1为低电平触发和高中断优先级的中断系统初始化程序。,解:1、采用位操作指令,SETB EA ;打开总中断开关,SETB EX1 ;开INT1中断,SETB PX1 ;置INT1为高中断优先级,CLR IT1 ;置INT1为电平触发,2、采用字节型指令,MOV IE,#84H ;开INT1中断,ORL IP,#04H ;置INT1为高中断优先级,ANL TCON,#0FBH ;置INT1为电平触发,6.4MCS-51单片机对外部中断的扩展,MCS-51单片机只有2个外部中断,为了使它与更多外部设备联机工作,其中中断源个数必须加以扩展。,常采用扩展方法:,1.借用定时器溢出中断;,2.采用查寻法;,3.采用扩展中断控制器接口芯片Intel 8259;,6.4.1借用定时器溢出中断扩展外部中断源,利用MCS-51内部定时/计数器计数溢出时向CPU申请中断。,编程方法如下:,使被借用定时/计数器工作在方式2(8位自动重,装),并设定计数工作方式。,定时器装载初值FFFFH,每来一个脉冲产生一次溢出,中断。,将定时器的计数脉冲输入端T0(或T1)作为扩展外,部中断源的中断输入端,在被借用定时器终端入口地址000BH(或001BH)处存,放一条三字节长转移指令。,6.4MCS-51单片机对外部中断的扩展,6.4MCS-51单片机对外部中断的扩展,例6.6 写出定时器T0中断源用作外部中断源的初始化程序。,解:,MOV TOMD,#06H ;定时器方式送TOMD,MOV TL0,#0FFH ;送低8位定时器初值,MOV TH0,#0FFH ;送高8位定时器初值,SETB EA ;打开总中断开关,SETB ET0 ;允许定时器0中断,SETB TR0 ;起动定时器0工作,.,END,例:,现有5个外中断源EX1、EX20、EX21、EX22和EX23,高电平时表示请求中断,要求执行相应中断服务程序,试编制程序。,解:,ORG0000H;复位地址,LJMPMAIN;转主程序,ORG0003H;中断入口地址,LJMPPINT0;转中断服务程序,ORG0013H;中断入口地址,LJMPPINT1;转中断服务程序,ORG0100H ;主程序首地址,MAIN:MOVSP,#60H ;置堆栈指针,ORLTCON,#05H;置INT0、INT1为边沿触发方式,SETBPX0 ;置为高优先级,MOVIE,#0FFH;全部开中,;主程序内容,ORG 1000H ;中断服务程序首地址,PINT0:PUSHAcc;中断,保护现场,LCALL WORK1 ;调用EX1服务子程序,POPAcc;恢复现场,RETI;中断返回,ORG 2000H ;中断服务程序首地址,PINT1:CLR EA ;CPU禁中断,PUSH Acc ;中断保护现场,PUSH DPH ;,PUSH DPL ;,SETB EA ;CPU开中断,JB P1.0,LWK20 ;P1.0=1,EX20请求中断,JB P1.1,LWK21 ;P1.1=1,EX21请求中断,JB P1.2,LWK22 ;P1.2=1,EX22请求中断,LCALL WORK23 ;P1.3=1,调用EX23服务子,LRET:CLR EA ;CPU禁中,POP DPL ;恢复现场,POP DPH ;,POP Acc ;,SETB EA ;CPU开中,RETI ;中断返回,LWK20:LCALL WORK20 ;P1.0=1,调用EX20服务子程序,SJMP LRET ;转中断返回,LWK21:LCALL WORK21 ;P1.1=1,调用EX21服务子程序,SJMP LRET ;转中断返回,LWK22:LCALL WORK22 ;P1.2=1,调用EX22服务子程序,SJMP LRET ;转中断返回,例:,通过外部中断1,在中断服务中将B寄存器里的内容左环,移一位。已知:(B)=01h,要求采用边沿触发,低优先级。,此例的实际意义:在INT1引脚接一个按钮开关到地,每按一下按钮就申请一次中断,中断服务则是:依次点亮八盏灯中的一盏。,ORG 0000H,LJMP MAIN,ORG 0013H ;,中断矢量,LJMP INT,MAIN:SETB EA ;开总中断允许“开关”,SETB EX1 ;开分中断允许“开关”,CLR PX1 ;0 优先级(也可不要此句),SETB IT1 ;边沿触发,MOV B,#01H;给 B 寄存器赋初值,HERE:SJMP HERE ;原地等待中断申请,INT:MOV A,B ;自B寄存器中,取数,RL A ;左环移一次,MOV B,A ;存回B,备下次取用,MOV P1,A ;输出到P1口,RETI ;中断返回,中断服 务程序,
展开阅读全文