第5章单片机的中断系统课件.ppt

上传人:牧羊曲112 文档编号:1561038 上传时间:2022-12-05 格式:PPT 页数:44 大小:487.50KB
返回 下载 相关 举报
第5章单片机的中断系统课件.ppt_第1页
第1页 / 共44页
第5章单片机的中断系统课件.ppt_第2页
第2页 / 共44页
第5章单片机的中断系统课件.ppt_第3页
第3页 / 共44页
第5章单片机的中断系统课件.ppt_第4页
第4页 / 共44页
第5章单片机的中断系统课件.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第5章单片机的中断系统课件.ppt》由会员分享,可在线阅读,更多相关《第5章单片机的中断系统课件.ppt(44页珍藏版)》请在三一办公上搜索。

1、,第5章 单片机的中断系统 51单片机的中断系统是8位机中功能较强的,可以提供5个中断源(52系列是6个),具有两个中断优先级,可以实现两级中断嵌套。5.1 中断的基本知识 5.1.1 中断源及中断结构 MCS-51单片机的5个中断源分为两种类型:一类是外部中断源,包括 和 ;一类是内部中断源,包括两个定时器/计数器(T0和T1)的溢出中断和串行口的发送/接收中断。MCS-51单片机中断系统结构图5-1所示。,1讲,图5-1 MCS-51 单片机中断系统结构,1. 外部中断 它们的中断请求信号有效方式分为电平触发和脉冲触发两种。电平方式是低电平有效,脉冲方式为负跳变触发有效。对于电平方式,只要

2、检测到低电平信号即为有效申请。对于脉冲方式 ,则需要比较两次检测到的信号,才能确定中断请求信号是否有效。中断请求信号高低电平的状态都应该至少维持一个机器周期,以确保电平变化能被单片机检测到。 2. 内部中断除外部中断外,内部还有TF0、TF1、TI/RI分别为定时/计数器溢出中断和串行口的发送/接收中断的中断源。5.1.2 中断控制 MCS-51单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。 1. 定时器控制寄存器(TCON) TCON的格式如图5-2所示。,图5-2 TCON的格式,在该寄存器中,TR1、TR0用于定时/计数器的启动控制,其余6位用于中断控制,其作

3、用如下: 1) IT0为外中断0请求信号方式控制位。IT0=1为脉冲触发方式(负跳变有效),IT0=0为电平方式(低电平有效)。 2) IE0为外部中断0请求标志位。当CPU检测到(P3.2)端有中断请求信号时,由硬件置位,使IE0=1请求中断,中断响应后转向中断服务程序时,由硬件自动清零。 3) IT1为外部中断1请求信号方式控制位,其作用同IT0。 4) IE1为外部中断1请求标志位,其作用同IE0。 5) TF0(TF1)为定时/计数器溢出标志位,此标志的作用将在5.3节说明。,2. 串行口控制寄存器(SCON)SCON的格式如图5-3所示。,TCON (98H),图5-3 SCON的格

4、式,SCON中的高6位用于串行口控制,低2位(RI、TI)用于中断控制,其作用如下: 1) TI为串行口发送中断请求标志位,发送完一帧串行数据后,由硬件置1,其清零必须由软件完成。 2) RI为串行口接收中断请求标志位,接收完一帧串行数据后,由硬件置1,其清零必须由软件完成。,在MCS-51单片机串行口中,以TI和RI的逻辑“或”作为一个内部中断源,二者之一置位就可以产生串行口中断请求,然后在中断服务程序中测试这两个标志位,以决定是发送中断还是接收中断。3. 中断允许控制寄存器(IE)中断允许控制寄存器的格式如图5-4所示。,图5-4 中断允许控制寄存器的格式,寄存器中用于控制中断的共6位,实

5、现中断管理,其作用如下。EA为中断允许总控制位。EA=1时,CPU开放中断;EA=0时,CPU屏蔽所有中断请求。,ES、ET1、EX1、ET0、EX0为对应的串行口中断、定时/计数器1中断、外部中断1中断、定时器/计数器0中断、外部中断0中断的中断允许位。对应位为1时,允许其中断,对应位为0时,禁止其中断。MCS-51单片机中断系统的管理是由中断允许总控制EA和各中断源的控制位联合作用实现的,缺一不可。MCS-51单片机系统复位后,IE各位均清零,即禁止所有中断。 4. 中断优先级控制寄存器(IP)中断优先级控制寄存器的格式如图5-5所示。,图5-5 中断优先级控制寄存器的格式,图5-5 中断

6、优先级控制寄存器的格式 MCS-51单片机规定了两个中断优先级:高级中断和低级中断。用中断优先级寄存器(IP)的5位状态管理5个中断源的优先级别,即PS、PT1、TX1、PT0、PX0分别对应串行口中断、定时器/计数器1中断、外部中断1中断、定时器/计数器0中断、外部中断0中断。当相应位为1时,设置其为高级中断;相应位为0时,设置其为低级中断。5.1.3 中断优先级结构 MCS-51中断系统具有两级优先级(由IP寄存器把各中断源的优先级分为高优先级和低优先级),它们遵循下列两条基本原则:1). 为了实现中断嵌套,高优先级中断请求可以中断低优先级的中断服务,反之,则不允许;,2). 同等优先级中

7、断源之间不能中断对方的中断服务过程。为了实现上述两条原则,中断系统内部包含两个不可寻址的优先级状态触发器。其中一个用来指示某个高优先级的中断源正在得到服务,并阻止所有其他中断的响应;另一个触发器则指出某低优先级的中断正得到服务,所有同级的中断都被阻止,但不阻止高优先级中断源。当同时收到几个同一优先能的中断时,响应哪一个中断源取决于内部查询顺序。其优先级排列如图5-6所示。,图5-6 中断优先级排列,5.1.4 中断服务程序入口地址 MCS-51单片机5个中断源的中断服务程序入口地址如表5-1所示。,表5-1 MCS-51中断服务程序入口地址表,5.1.5 中断请求的撤除在中断请求被响应前,中断

8、源发出的中断请求由CPU锁存在特殊功能寄存器TCON和SCON的相应中断标志位中。一旦某个中断请求得到响应,CPU必须把它的响应标志位复位成0状态,否则MCS-51就会因中断未能得到及时撤除而重复响应同一中断请求,这是绝对不允许的。MCS-51单片机有5个中断源,但实际上只分属于3种中断类型。这3种类型是:外部中断、定时器溢出中断和串行口中断。对于这3种中断类型的中断请求,其撤除方法是不同的。1. 定时器溢出中断请求的撤除 TF0和TF1是定时器溢出中断标志位,它们因定时器溢出中断请求的输入而置位,因定时器溢出中断得到响应而自动复位成0状态。因此,定时器溢出中断源的中断请求是自动撤除的,用户根

9、本不必专门为它们撤除。,2. 串行口中断请求的撤除TI和RI是串行口中断的标志位,中断系统不能自动将它们撤除,这是因为MCS-51进入串行口中断服务程序后常需要对它们进行检测,以测定串行口发生了接收中断还是发送中断。为了防止CPU再次响应这类中断,用户应在中断服务程序的适当位置处通过指令将它们撤除: CLR TI ; 撤除发送中断 CLR RI ; 撤除接收中断若采用字节指令,则也可采用如下指令: ANL SCON,#0FCH ;撤除发送和接收中断 或采用位判断清除指令: JBC TI, rel; 判断TI标志是否置位,若置位则跳转并撤除发送中断 JBC RI, rel; 判断RI标志是否置位

10、,若置位则跳转并撤除接收中断,3. 外部中断的撤除外部中断请求有两种触发方式:电平触发和负边沿触发。对于这两种不同的中断触发方式,MCS-51撤除它们的中断请求的方法是不相同的。在负边沿触发方式下,外部中断标志IE0和IE1是依靠CPU两次检测 或 上触发电平状态而设置的。因此,芯片设计者使CPU在响应中断时自动复位IE0或IE1,就可撤除 或 上的中断请求,因为外部中断源在中断服务程序时是不可能再在 或 上产生负边沿,而使相应的中断标志IE0或IE1置位。 在电平触发方式下,外部中断标志IE0和IE1是依靠CUP检测或上低电平而置位的。尽管CPU响应中断时相应中断标志IE0或IE1,能自动复

11、位成状态,但若外部中断源不能及时撤除它在或上的低电平,就会再次使已经变的中断IE0或IE1置位,这是绝对不允许的。,因此,电平触发型外部中断请求的撤除必须使或上的低电平随着其中断被CPU响应而变为高电平。一种可供采用的电平型外部中断的撤除电路如图5-7所示。,图5-7 电平型外部中断的撤除电路,由图可见,当外部中断源产生中断请求时,D触发器的复位成状态,Q端的低电平被送到 ,该低电平被8051检测后就使中断标志IE0置。8051响应 上的中断请求可使 中断服务程序执行,故可以在中断服务程序开头安排如下程序来使 上的电平拉高。INSVR:ORL P1, #01H ANL P1, #0FEH CL

12、R IE0 END 8051执行上述程序就可使P1.0上产生一个宽度为两个机器周期的负脉冲。在该负脉冲作用下,D触发器被置位成1状态, 上的电平也因此而变高,从而撤除了其上的中断请求。,5.1.6 中断系统的初始化 MCS-51中断系统功能,是可以通过上述特殊功能寄存器进行统一管理的,中断系统初始化是指对这些特殊功能的寄存器中各控制位进行赋值。中断系统初始化步骤如下:1). 置位相应中断源的中断允许;2). 设定所有中断源的中断优先级; 3). 若为外部中断,则应规定低电平还是负边沿的中断触发方式。 例如,用 为低电平触发的中断系统初始化程序。 1. 采用位操作指令 SETB EA ; SET

13、B EX0 ; 开 中断 中断 SETB PX0 ; 令 为 高优先级 CLR IT0 ; 令 为 电平触发,2. 采用字节操作指令 MOV IE,#81H ; 开 中断 ORL IP,#01H ; 令 为高优先级 ORL TCON,#0FEH ; 令 电平触发 显然,采用位操作指令进行中断系统初始化是比较简单的。因为用户不必记住各控制位在寄存器中的位置,只需按各控制位名称来设置,而各控制位名称是比较容易记忆的。,5.2 中断的编程及应用实例 C51语言编译器支持在C语言源程序中直接编写51单片机的中断服务函数程序,从而减轻了采用汇编语言编写中断服务程序的烦琐程序。为了能在C语言源程序中直接编

14、写中断服务函数,C51语言编译器对函数的定义有所扩展,增加了一个扩展关键字interrupt。关键字interrupt是函数定义时的一个选项,加上这个选项即可将函数定义成中断服务函数。 定义中断服务函数的一般形式为: 函数类型 函数名(形式参数表) interrupt n using minterrupt 后面的n 是中断号,n的取值范围为031。编译器从8n+3处产生中断向量,具体的中断号n和中断向量取决于不同的51系列单片机芯片。对于MCS-51单片机而言,外部中断0中断、定时器/计数器0溢出中断、外部中断1中断、定时器/计数器1溢出中断、串行口发送/接收中断对应的中断号分别为0、1、2、

15、3、4。using后面的m是选择哪个工作寄存器区,分别为0、1、2、3。,【例5-1】 外部中断在本实例中,首先通过P1.7口点亮发光二极管,然后外部输入一脉冲串,则发光二极管亮、暗交替。电路如图5-8所示。,图5-8 发光二极管交替亮、暗,编写程序如下: #includesbit P1_7=P17;void interrupt0( ) interrupt 0 using 0 /定义定时器0 P1_7=!P1_7;void main( ) EA=1; /开中断 IT0=1; /外部中断0脉冲触发 EX0=1; /外部中断0 P1_7=0; do while(1);,【例5-2】如图5-9所示,

16、8只LED阴极接至单片机P0口,两开关S0、S1分别接至单片机引脚P3.2和P3.3。 编写程序控制LED状态:按下S0后,如果8只LED为熄灭状态,则点亮,如果8只LED为点亮状态,则保持;按下S1后,不管8只LED是熄灭状态还是点亮状态,都变为闪烁状态。,图5-9 利用中断控制发光二极管,2讲,S0,S1,程序代码如下:#includevoid delay(unsigned int d) /定义延时子函数while(-d0);void main()P0=0 xff; /熄灭LEDEA=1;/开总中断EX0=1; /开外中断0EX1=1;/开外中断1IT0=1;/外中断0脉冲触发方式IT1=

17、1;/外中断1脉冲触发方式for(;) /延时等待中断发生;,void INT0_ISR( ) interrupt 0 /外中断0中断服务函数P0=0 x00;PX0=0;PX1=1;void INT1_ISR( ) interrupt 2 /外中断1中断服务函数while(1) delay(5000); P0=0 x00; delay(5000); P0=0 xff; 在本例中,外中断0、外中断1均设为脉冲触发方式,且为满足功能要求。注意:中断的优先级别是不同的,【例5-3】利用外中断控制外设的数据传送如图5-10所示,外设数据经P1口输入单片机,每准备好一个数据,发出选通信号,使触发器输出

18、1再经非门得0至外中断/INT0,向CPU发出中断请求,CPU响应这个中断请求后,在中断处理程序中先撤除中断请求信号,(通过P3.0=0,使/INT0=1),再由P1口输入数据到单片机内部。,图5-10 利用中断控制数传送,程序代码如下:#includeunsigned char temp; /定义临时变量,来存取送到P1口的数据sbit P3_0=P30; /定义位变量void main( )P3_0=1;/初始化外中断0引脚,其为高电平EA=1;/开总中断EX0=1;/开外中断0IT0=1;/外中断脉冲触发方式for( ; ; )/延时等待中断发生 ; void INT0_ISR() in

19、terrupt 0 /外中断0中断服务函数P3_0=0;/恢复外中断0引脚电平,除中断请求信号P1=0 xff;/初始化P1temp=P1;/读取送至P1口的数据,MCS-51单片机的外部中断源只有两个,当需要扩展时,可以采用例5-4、例5-5、例5-6的方法进行外部中断源的扩展。【例5-4】利用定时/计数器扩展外部中断。利用定时/计数器扩展外部中断源,是把定时/计数器溢出中断做成外部中断,即将定时/计数器设置为计数模式,然后把信号接到计数器相应的引脚上(T0或T1)。为了使每出现一个从高到低的脉冲时都产生一个中断,可以把定时器设置为自动重装模式,令重装值为FFH。当计时器检测到从高到低的脉冲

20、时,定时器将溢出,这时将产生一个中断请求。程序代码如下: #include void main(void).TMOD=0 x66;/两个定时/计数器都设置成8位模式,TH1=0 xff; /设定重装值TH0=0 xff;TL0=0 xff;TL1=0 xff;TCON=0 x50;/开始计数IE=0 x9f; /中断使能./*定时器0中断服务程序*/void timer0_int(void) interrupt 1. /*定时器1中断服务程序*/void timer1_int(void) interrupt 3while(!TI) . ,这种方法还是有一定的限制的。首先,它只能是边沿触发,所以

21、当需要的是一个电平触发的中断时,就要在中断中不断地对T0或T1进行采样,直到它们变为高。其次,检测到下降沿和产生终端之间一个指令周期的延时,这是因为在检测到下降沿一个指令周期之后,计数器才加1。如果使用的8051单片机有多个定时器,而且有外部引脚,可以用这种方法来扩充边沿触发的外部中断。值得重申的一点是,当使用定时器作为外部中断时,它以前的功能将不能使用,除非用软件对它进行复位。【例5-5】利用外部中断和查询相结合的方法扩展外部中断。 如果系统有多个外中断请求源,可以按照它们的轻重缓急进行排队,把其中最高级别的中断源直接连接到单片机外中断0输入引脚,其余的外部中断请求可以用利用逻辑器件通过“与

22、”或者“或”的办法连接到单片机外中断1引脚,同时还连接到输入/输出端口(如P0或P1)的若干引脚,用来查询判断具体是哪一个中断请求源发生的中断事件。,如图5-11所示,利用单片机扩展5个外部中断源,中断的优先次序这S0S4,其中S0接到外部中断0上,S1S4通过“与”门接到外部中断1上;单片机的P1.4P1.7接4个发光二极管用来作为输出指示;当有S1S4其中一个外部中断发生时,相应的发光二极管VD1VD4点亮;当S0外部中断发生时,4个发光二极管全亮。,图5-11 外部中断扩展电路,程序代码如下:#includesbit P1_0=P10;/定义位变量sbit P1_1=P11;.sbit

23、P1_7=P17;void main()P1=0 xff;/熄灭LEDEA=1;/开总中断EX0=1;/开外中断0EX1=1;/开外中断1IT0=0;/外中断0脉冲触发方式 IT1=0;/外中断1脉冲触发方式PX0=1;/外中断0高优先级PX1=0;/外中断1低优先级for( ; ; )/延时等待中断发生 ; ,void INT0_ISP() interrupt 0/外中断0服务函数P1=0 x0f; /P1口高4位置0,点亮4个LED void INT1_ISR() interrupt 2/外中断1服务函数if(P1_0=0) P1=P1/点亮VD4,【例5-6】利用优先编码器扩展外部中断。

24、从例5-5可以看出,利用与门、或门扩展外中断所占端口引脚较多,在实际应用中,还可以采用优先级解码芯片如74LS148,把多个中断源信号作为一个中断。如图5-12所示,在有8个中断源的情况下,经74LS148优先译码后,只占3个I/O引脚,即用3根引脚可分辨8个中断源,从而节省了I/O口资源。,图5-12 利用优先编码器扩展外部中断的电路,程序代码如下:#includeunsigned char status;/定义一变量,用来读取P0口状态void main( )EA=1;/开总中断EX0=1;/开外中断0PX0=1;/外中断0高优先级for( ; ; )/延时等待中断发生 ; void IN

25、T0_ISR( ) interrupt 0 /外中断0中断服务函数status=P0 /读取P0口低三位状态,不同的值 switch(status) /对应不同的中断源 ,case0: /处理中断源0break; case 7: /处理中断源7 break; 【例5-7】中断嵌套。 外部中断/INT1触发后,启动计数器0。计数达到10次后停止计数,启动定时器1。由定时器1控制定时,由P1.7输出周期为200ms的方波信号,接收两次中断后关闭方波发生器,P1.7置低。,程序如下:#include#define uchar unsigned charuchar date a,b,c;void in

26、terrupt0( ) interrupt 2 using 1/定义外部中断1a+; void timer0( ) interrupt 1 using 2/定义计数器0(T0)TL0=0 xff;b+;void time1( ) interrupt 3 using 3/定义定时器1(T1)TH1=0 x06;c-;sbit P1_7=P17;,void mian(void)P1_7=1; /初始化TCON=0 x01; /外部中断为低电平触发方式TMOD=0 x27; /启动定时器1和计数器0,工作方式2IE=0 x8b;/开中断a=0;do while(a!=1);/等待外部中断P1_7=!

27、P1_7;/取反TL0=0 xff;/初值TH0=0 x06;/初值b=0;TR0=0;/停止计数器0工作TR1=1;/启动定时器1,do c=0 xc8;do while(c!=0); /定时输出方波P1_7=!P1_7; while(a!=3);/等待两次外部中断TR1=0;/关定时器1P1_7=0;EA=0;/关总中断EX0=0;/禁止外部中断【例5-8】利用外部中断实现发光二极管的简单控制。本例将介绍一个中断使用的演示程序,通过这个程序,读者可以了解到各种中断的使用方法。,程序如下:#includesbit led0=P10;/定义I/O引脚sbit led1=P11;sbit led

28、2=P12;sbit led3=P13;bit FINT0;/全局变量及位标志定义bit FINT1;bit FT0;bit FT1;bit FT2;unsigned char T0_10ms;unsigned char T0_50ms;unsigned char T0_100ms;void int_0( );/函数声明void int_1( );void timer_0( );void timer_1( );void serial_1( );void timer_2( );,void initial();/用户函数声明 初始化void main(void)initial( );while(1

29、)if(FINT0)/中断0到,则进入循环体FINT0=0;led0=0;/中断/INT0时灯点亮 led1=0;led2=0;led3=0;if(FINT1)/中断1到,则进入循环体,FINT1=0; led0=1;/中断/INT1时灯熄灭led1=1; led2=1;led3=1;if(FT0)FT0=0;if(+T0_10ms30) T0_10ms=0;/未在初始化里设置定时器,void initial()EA=1;/CPU所有中断开EX0=1;/中断开 IT0=1;/低电平触发EX1=1;/中断开IT1=1;/低电平触发return;void int_0() interrupt 0 u

30、sing 0/中断/INT0FINT0=1;void int_1() interrupt 2 using 1/中断/INT2FINT1=1;void timer_0() interrupt 1 using 2/定时器0中断FT0=1;void timer_1() interrupt 3 using 3/定时器1中断FT1=1;void serial_1() interrupt 4/串行口中断void timer_2() interrupt 5/定时器2中断FT2=1;,本章小结 对51单片机中断系统进行C51语言编程时,应重点考虑与掌握下面的问题。 1. 中断源对51单片机具有5个中断源,分别

31、是外部中断0、定时器/计数器T0溢出中断、外部中断1、定时器/计数器T1溢出中断、串行口的发送/接收中断,5个中断源对应的中断型号分别为0、1、2、3、4。 2. 与中断有关的寄存器 与中断有关的寄存器有4个 (1) 定时器控制寄存器(TCON) 有关的位:IT0、IE0、IT1、IE1、TF0、TF1。 (2) 串行口控制寄存器(SCON) 有关的位:RI、TI。 (3) 中断允许控制寄存器(IE) 有关的位:EA、ES、ET1、EX1、ET0、EX0。 (4) 中断优先级控制寄存器(IP) 有关的位:PS、PT1、PX1、PT0、PX0。,3. 中断请求的撤除 (1) 定时器溢出中断请求的

32、撤除定时器溢出中断源的中断请求是自动撤除的,用户不必专门为它们撤除。 (2) 串行口中断请求的撤除 在中断服务程序的适当位置处通过指令将它们撤除:CLR TI ; 撤除发送中断CLR RI : 撤除接收中断 (3) 外部中断的撤除 在负边沿触发方式下,CPU在响应中断时自动复位IE0或IE1。 在电平触发方式下,要通过外部电路来撤除。 4. 中断服务函数的一般形式 函数类型 函数名(形式参数表) interrupt n using ninterrupt 后面的n 是中断号,51单片机分别为0、1、2、3、4。using后面的n是选择哪个工作寄存器区,分别为0、1、2、3。,思考题及习题51.

33、什么叫中断?设置中断有什么优点和功能?2. 80C51有几个中断源?写出其名称。3.涉及80C51单片机中断控制的有哪几个特殊功能寄存器?4.写出80C51五个中断源的中断请求标志名称、位地址和在哪一个特殊功能寄存器中? 5写出80C51中断允许控制寄存器IE结构、位名称和位地址,如何设置才能开中断?如何设置才能关中断?6.什么叫中断优先级?如何设置?80C51中断优先级和中断优先权有什么区别?7.80C51中断处理过程包括哪些步骤?简述中断处理过程。8.80C51响应中断有什么条件?9.什么叫保护现场?需要保护那些内容?什么叫恢复现场?恢复现场与保护现场有什么关系?须遵循什么规则?10.中断初始化包括那些内容?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号