1、前言QIAN YAN 中断系统是微控制器最基本最重要的功能模块之一。中断系统使得微控制器能快速响应和处理突发事件及外设的信息交互请求,使微控制器具有处理多任务的能力,从而有效提高微控制器的实时测控性能。(生活中的中断事件举例)LOGO目录中断系统概述8051微控制器的中断系统中断处理过程中断程序设计IO端口扩展外部中断源0405030201中断系统概述中断的概念中断源中断的作用中断系统的功能5.1中断系统中断:微控制器执行程序过程中,由于内部或者外部的某种原因,要求MCU中止正在运行的程序,转去执行另外一段处理程序,待处理结束后,再回来继续执行被中止了的原程序。这种程序在执行过程中,由于外界的
2、原因而被中间打断的情况称为“中断”。中断的概念中断的概念中断的概念中断是硬件改变CPU程序运行方向的一种技术,既和硬件有关,也和软件有关。先进的中断系统能提高MCU实时处理外界异步事件的能力。中断服务程序主程序断点中断源原来运行的程序(调用程序)中断之后执行的处理程序主程序被中断的位置(地址)引起中断的原因或能发出中断申请的来源中断请求中断源要求服务的请求。中断源发出中断请求是随机的子程序中断程序中断的概念中断系统子程序的调用是程序预先设计安排好的调用中断服务程序的过程类似于程序设计中调用子程序的过程。中断服务程序的调用是无法预知的,中断服务程序的调用过程是计算机系统硬件自动完成的。中断的作用
3、分时操作实时处理故障处理如发生电源掉电,通信故障等,可以向CPU请求中断,以便及时作出处理利用中断可以很好协调快速CPU与慢速外设互相配合高效地工作。 例如:外设打印机、ADC转换 在微机系统中,依靠中断技术能实现实时控制。即控制对象发出实时操作请求时,通过中断可以使CPU快速地作出响应并处理。单片机的输入/输出设备,如A/D、打印机、按键等,定时/计数器;串行口发送完一帧或接收到一帧数据的中断请求 如掉电故障、硬件故障、运算错误、程序运行故障等请求中断 微控制器的控制对象,如电压、温度等检测量超过上下限时,继电器、开关动作时,向CPU请求中断。外部设备故障源内部设备控制对象中断源发出中断请求
4、的内部功能模块或外部设备来源一般统称为“中断源”中断系统的功能中断服务程序主程序断点中断源原来运行的程序(调用程序)中断之后执行的处理程序主程序被中断的位置(地址)引起中断的原因或能发出中断申请的来源;1.中断的允许和禁止 即关中断和开中断,根据需要能够用指令控制中断的开放和关闭。只有在开中断情况下,CPU才能响应中断源的请求。2.中断响应和返回中断系统的功能保护断点CPU在现行指令执行完毕、转到中断程序前,把断点处的PC值(即下一条指令的地址)压入堆栈(由硬件自动完成)保护现场用户在编写中断服务程序时,须对中断程序中用到的工作寄存器和SFR等内容进行保护。恢复现场在中断返回前,恢复保护的内容
5、中断返回中断服务程序的最后一条指令必须为中断返回指令RETI,其功能是自动恢复断点地址送到PC,使CPU返回到断点处继续执行主程序。2.中断响应和返回中断优先级当有多个中断源同时请求中断时,CPU会根据各中断源的优先级别,首先响应优先级高的中断请求。这个过程是MCU的中断系统自动完成的。当CPU正在执行低级的中断服务程序时,若有高级中断源申请中断,则能够停下低级中断服务程序转去执行高级中断源的服务程序,实现中断嵌套,并能逐级正确返回。中断嵌套注如果新的中断请求的优先级与正在处理的中断是同级别或低一级,则CPU暂时不响应这个新中断申请,直到正在处理的中断服务程序执行完毕,才会给予响应。中断系统的
6、功能3.中断优先级与中断嵌套中断系统的功能中断服务程序中断服务程序1中断服务程序中断服务程序 2非预料事件非预料事件1非预料事件非预料事件 2主程序中断嵌套的过程8051微控制器的中断系统中断系统的结构中断的控制02中断系统的结构INT0定时器1串行口外设0INT10IE0IE1TF0TF1定时器0TCONRITISCONEX0ET0EX1ET1ESIEEAPX001PT001PX101PT101PS01IP0003H000BH0013H001BH0023H0003H000BH0013H001BH0023HPC高低中断源外设 由5个中断源、4个SFR(TCON、SCON、IE、IP)、中断入口
7、、中断查询逻辑电路等组成。中断系统的结构 8051微控制器有5个中断源。分别是外部中断、定时器/计数器中断和串行口中断。两个外部中断源:INT0和INT1,外部中断请求信号分别从引脚INT0 (P3.2) 和INT1 (P3.3) 引入。外设如按键、掉电检测电路信号等可以请求外部中断。 二种中断触发方式:低电平触发和下降沿触发,可通过编程进行选择外部中断 T0、T1溢出中断:当T0、T1定时时间到或发生溢出时,向CPU请求中断。定时中断当串行口发送完一个字节数据或接收到一个字节数据时,产生中断请求串行口中断中断源中断系统的结构中断系统的结构 当CPU响应某中断源的中断请求后,硬件自动将断电地址
8、压入堆栈保护,并将此中断源的中断入口地址赋给PC,使CPU执行该中断的中断服务程序。中断的控制8051微控制器中与中断系统有关的SFR有TCON、SCON、IE、IP。1.定时器/计数器控制寄存器TCON(Timer Control)TCON的字节地址为88H,是可以位寻址的SFR。76543210位符号TF1TR1TF0TR0IE1IT1IE0IT0英文注释Timer1 OverflowTimer1 Run Timer0 OverflowTimer0 Run Interrupt External 1 flagInterrupt 1 Type control bitInterrupt Exte
9、rnal 0 flagInterrupt 0 Type control bit中断的控制 T1溢出标志,溢出时由硬件置1,并请求中断,CPU响应后,由硬件自动将TF1清0;查询方式时,要用软件清0。INT0中断标志,发生INT0中断时,硬件置IE0为1,并向CPU请求中断。INT1中断标志,发生INT1中断时,硬件置IE1为1,并向CPU请求中断。T0溢出标志,溢出时由硬件置1,并请求中断,CPU响应后,由硬件自动将TF0清0;查询方式时,要用软件清0。外部中断0的触发方式选择位,设置为“0”时,表示选择低电平触发;设置为“1”时,表示选择下降沿触发(边沿触发)。风格外部中断1的触发方式选择位
10、,设置为“0”时,表示选择低电平触发;设置为“1”时,表示选择下降沿触发(边沿触发)。TF1TF0IE0IE1IT0IT1外部中断的检测过程对于低电平触发方式对于下降沿触发方式INT0、INT1引脚上中断请求信号的高、低电平至少应各保持一个机器周期CPU每个机器周期检测一次INT0、INT1引脚,对中断请求信号的要求为: INT0、INT1引脚上中断请求信号的低电平应保持到CPU响应中断为止。实际使用时,常采用下降沿触发方式,低电平触发很少使用。中断的控制中断的控制 SCON的字节地址为98H,可位寻址,用于串行口的操作管理,其中两位为串行口的中断标志RI和TI。2. 2.串行口控制寄存器串行
11、口控制寄存器SCONSCON(Serial ControlSerial Control)中断的控制76543210位符号SM0SM1SM2RENTB8RB8TIRI英文注释Serial Modebit0 Serial M o d e bit1Serial Mode bit2Receive Enable Transmit bit 8Receive bit 8Transmit Interrupt flagReceive Interrupt flagTI:发送中断标志。当串行口发送完一帧数据时,硬件自动将TI置位。RI:接收中断标志。当串行口接收到一帧数据时,硬件自动将RI置位。中断的控制INT0定
12、时器1串行口外设0INT10IE0IE1TF0TF1定时器0TCONRITISCONEX0ET0EX1ET1ESIEEAPX001PT001PX101PT101PS01IP0003H000BH0013H001BH0023H0003H000BH0013H001BH0023HPC高低中断源外设 当中断源有请求时,会在相关的SFR建立相应的中断标志位,表示该中断源请求了中断(伴随中断请求在SFR中设置标记)。 6个中断请求对应的中断标志分别为IE0、TF0、IE1、TF1、TI、RI,其中TI和RI这两个标志经一个“门电路”后,输出串口的中断请求。外部中断标志:对于下降沿触发方式,IE0、IE1一直
13、保持到CPU响应中断,并由硬件自动清除。如果是低电平触发方式,只有当中断引脚变为高电平时, 才会消除。串行口中断标志:不论在中断方式还是查询方式,均必须通过软件清除。T0、T1中断标志中断:硬件自动清 0查询:软件清 0关于中断标志的清除中断的控制中断的控制3.中断允许控制寄存器IE(Interrupt Enable)IE用于管理各中断源中断的允许与禁止 76543210位符号EAESET1EX1ET0EX0英文注释Enable All interrupts Enable Serial interrupt E n a b l e Timer1 interrupt E n a b l e Ext
14、ernal 1 interrupt Enable Timer0 interrupt E n a b l e External 0 interrupt 微控制器复位后,IE中各位均被清0,即禁止所有中断。EACPU中断允许位,也称总允许位。EA=1,CPU开中断,此时每个中断源的中断允许位决定EA=0,CPU开关断,禁止任何中断请求EX1ET0T0中断允许位。 ET0 =1,允许T0中断; ET0 =0,禁止T1中断ES串行中断允许位。ES=1,允许串行口的接受和发送中断; ES=0,禁止串行口中断EX0ET1ET1中断允许位。 ET1 =1,允许T1中断; ET1 =0,禁止T1中断中断的控制
15、中断的控制4.中断优先级寄存器IP(Interrupt Priority)76543210位符号PSPT1PX1PT0PX0英文注释 Serial Interrupt Priority Timer1 Interrupt PriorityExternal 1 Interrupt Priority Timer0 Interrupt Priority External 0 Interrupt Priority PS串行口中断优先级控制位。PS=1,选择高优先级;PS=0,选择低优先级PX1PT0T0中断优先级控制位。PT0=1,选择高优先级;PT0=0,选择低优先级PT1T1中断优先级控制位。PT1
16、=1,选择高优先级;PT1=0,选择低优先级PX0中断的控制微控制器复位后,IP内容为0,所有中断源均被设置为低优先级中断。中断的控制4.中断优先级寄存器IP(Interrupt Priority)例:若一个微控制器系统有2个中断源,一个是T0的10ms定时中断,一个是外部INT0的按键中断,希望T0中断在任何时刻能及时响应,则可以设置T0中断为?优先级中断,INT0中断为?优先级中断。即 SETB PT0 CLR PX0这样T0中断能打断INT0的中断服务,反之则不能。低级不打断高级,高级不睬低级,同级不能打断,010203同级、同时中断,事先约定04中断的控制对IP编程可把5个中断设置为高
17、低两个优先级,它们遵循中断优先原则。中断的控制 如果几个相同优先级的中断源,同时向CPU请求中断,哪一个中断源先得到响应,取决于CPU中断系统内部的查询顺序。这相当于在每个优先级内,还存在一个辅助优先级结构(内部查询的自然优先顺序)。4.中断优先级寄存器IP(Interrupt Priority)中断源 串行口中断 外部中断1 定时器T0中断 外部中断0 定时器T1中断中断的控制中断的控制例如 某软件中对寄存器IE、IP设置如下: MOV IE,10001111B MOV IP, 00000110B 此时该系统中: CPU中断允许;允许?发出的中断申请。 允许中断源的中断优先次序为:?。中断的
18、控制INT0定时器1串行口外设0INT10IE0IE1TF0TF1定时器0TCONRITISCONEX0ET0EX1ET1ESIEEAPX001PT001PX101PT101PS01IP0003H000BH0013H001BH0023H0003H000BH0013H001BH0023HCPU高低中断源1外设中断处理过程中断响应的自主操作过程中断响应条件中断响应时间中断响应过程响应中断与调用子程序的异同03主要介绍中断响应的自主操作,中断响应条件、响应过程、响应时间以及响应中断与调用子程序的异同。主要内容中断处理过程中断响应的自主操作:在中断检测和中断响应过程中,由中断系统硬件自动完成的操作。中
19、断响应的自主操作过程1.中断请求的自动查询2.中断响应时的自主操作、3.中断返回时的自主操作中断请求的自动查询 8051微控制器中,中断系统在每个机器周期的S6状态查询各中断源是否有请求(即相应的中断标志是否为1),并按优先级管理规则处理同时请求的中断源,且在下一个机器周期的S1状态响应最高级中断请求。正在执行RETI 指令或读/写IE、IP的指令,则要延后一条指令予以响应。正在执行多机器周期指令,并还未执行到最后一个机器周期;CPU正在处理相同或更高优先级中断123有以下情况则除外哦!中断请求的自动查询2中断响应时的自主操作1)2)3)4)置位相应的“优先级标志”,以标明所响应中断的优先级别
20、中断源标志清0(TI、RI除外)中断断点地址装入堆栈保护(不保护寄存器等)中断入口地址装入PC,以便使程序转到中断入口地址处。中断响应的自主操作过程中断响应的自主操作过程断点地址送入PC,以便使程序返回到断点处。“优先级标志”清01)23. 3.中断返回时的自主操作中断返回时的自主操作2)中断响应条件中断响应中断响应:中断源发出中断请求、在满足CPU中断响应条件之后,CPU处理中断请求的过程。中断响应的条件1)有中断源发出中断请求;2)在此录入上述图表的综合描述CPU中断允许位(总允许)置位,即EA=13)申请中断的中断源的中断允许位(源允许)置位,即允许该中断源中断。4)无同级或高级中断正在
21、服务5)现行指令已执行完毕6)若执行指令为RETI或是读/写IE或IP指令时,则该指令的下一条指令也执行完毕。中断响应的基本条件CPU在每个机器周期,按优先次序查询各中断标志,找到所有有效的中断请求,并对其优先级排队,如果满足CPU便在紧接着的下一个机器周期响应中断,否则将丢弃中断查询结果检测中断源自动清除中断标志(TI和RI除外)执行中断服务程序,直至遇到RETI指令为止自动设置“优先级标志”为1自动保护断点RETI指令清除“优先级标志”, 继续执行主程序 中断响应过程中断响应过程中断的响应时间:最短为3个机器周期,最长为8个机器周期中断响应时间中断响应时间3个机器周期情况:查询中断标志位占
22、1个机器周期,硬件自动保护断点地址(相当于自动插入一条长调用LCALL指令)需要2个机器周期。8个机器周期情况:如果检测到中断标志位时,CPU正在执行RETI指令或访问IE、IP的指令(2个机器周期),则执行该指令后,还必须再执行一条指令才能响应中断。若再执行的一条指令恰好为乘法或除法指令(4个机器周期),再加上自动保护断点地址的2个机器周期,总共需要8个机器周期。中断响应时间 如果存在多个中断源,而且CPU正在处理高级或同级中断,那么中断响应的时间还取决于正在执行的中断服务程序的长短。都可以实现嵌套。中断程序可以实现2级嵌套,子程序可以更多级的嵌套。都是由硬件自动把断点地址压入堆栈子程序和中
23、断服务程序的现场保护和恢复,都需要编写程序实现。执行中断程序和子程序的返回指令时,都会自动返回到断点处,继续原程序的执行。都是中断当前正在执行的程序,转去执行子程序或中断服务程序。01020304响应中断与调用子程序的异同响应中断与调用子程序的相同点中断服务程序的返回指令是RETI,子程序的返回指令是RET,两者不能互换。响应中断后,转去执行存放在相应中断入口地址处的中断服务程序,而子程序的地址由程序设计时安排的。中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的中断请求是随机的,在程序执行的任何时刻都有可能发生;而子程序的调用是由程序设计安排的。01020304响应中断与调
24、用子程序的异同响应中断与调用子程序的差别中断程序设计中断初始化C51的中断函数和处理利用I/O端口扩展外部中断源04中断程序设计举例主要介绍中断的初始化、汇编中断服务程序设计,C51的中断函数与处理,以及中断程序设计举例。主要内容中断程序设计中断初始化 中断初始化:对中断相关SFR(TCON、SCON、IE和IP)的设置,使得MCU的中断系统能够按照设置要求对中断源进行管理和控制。设置外部中断请求的触发方式如定时器/计数器或串行口的初始化)对相关中断源的初始化选择CPU中断的允许或禁止设置CPU中断控制位选择各中断源中断的允许或禁止设置各中断源的中断控制位选择高优先级或低优先级设置各中断源的中
25、断优先级别0102030504中断初始化中断初始化主要包括以下内容Interrupt:表示 是中断函数m为中断号,取值范围为0-4(可扩展为0-31)Using n用于选择工作寄存器组;n为工作寄存器组号void void 函数名函数名(void) interrupt m using n(void) interrupt m using n定义形式(03),缺省时,表示中断函数使用的工作寄存器与主程序为同一组。C51的中断函数和处理C51的中断函数和处理1.C51编译器对中断函数的自动处理功能自动保存断点地址,并自动保存SFR中的ACC、B、DPH、DPL和PSW的值到堆栈中。自动产生中断向量地
26、址(中断入口),跳转到相应的中断入口执行中断函数。在中断函数中,如没有用using n选项来指定中断函数使用的寄存器组,则默认其与调用函数采用同一组寄存器;此时,编译器要自动保护和恢复R0-R7,所以执行速度会慢一些。如果使用using n 选项,编译器就不产生保护和恢复R0-R7的代码,因此执行速度会快一些。一般情况下,主程序和低优先级中断使用同一组寄存器,而高优先级中断可使用using n指定工作寄存器组。中断函数执行完毕后,自动恢复存放在堆栈中的工作寄存器和特殊功能寄存器的值,并返回。若中断函数中要调用函数,则该函数必须使用和该中断函数相同的寄存器对于不使用的中断,为提高系统的可靠性,应
27、编写一个空的中断函数,当意外发生中断时,使之能自动返回主程序。例如不用外部中断0,可编写如下的空中断函数。 void exter0_ISR() interrupt 0 不能进行参数传递,即中断函数不能有形参不能有返回值。其返回值类型必须声明为void任何函数均不能直接调用中断函数,也不能通过函数指针间接调用中断函数0102030504C51的中断函数和处理2.编写和使用中断函数的注意点初始化主要包括以下内容中断程序设计举例#include main()int xdata *p=0 x3000; /源数据指针int data *q=0 x40; /目的地址指针int i;EA=1; EX0=1;
28、 /允许外部中断0 PX0=1; /设置外部中断0为高优先级中断 IT0=1 ; /设置外部中断0下降沿触发有效for( i=0; i32; i+)*q = *p; /将数据从外部数据存储区传送到内部RAM中p+;q+; C51程序:void Int0int(void ) interrupt 0 using 1 . /中断函数内容利用I/O端口扩展外部中断源 将4个按键(外部中断源)连接到一个4“与门”的输入端,当其中一个或几个按键按下时,“与门”输出从高电平变为低电平,该下降沿触发MCU的INT0。在中断服务程序中,按程序设置的顺序查询4条I/O口线的状态,确定本次是哪个按键按下引起的中断,
29、然后进行相应的按键处理。 利用I/O端扩展外部中断源C51程序:void service_int() interrupt 0 using 2 /INT0中断函数,使用第2组工作寄存器 keyflag=1; /设置按键中断标志 status=0 x0f&P1; /读入P1口状态,并保留低4位的状态K0按下,P1.0=0,status=1110B=14;K1按下,P1.1=0,status=1101B=13;K2按下,P1.2=0,status=1011B=11;K3按下,P1.3=0,status=0111B=7;利用I/O端口扩展外部中断源#include unsigned char status;bit keyflag=0;main() EA=1; EX0=1; /INT0开中断,CPU开中断 IT0=1; while(1) if(keyflag) /进入过中断,有键按下 switch(status) /根据中断源分支 case 14: . break; /处理K0 case 13: . break; /处理K1 case 11: . break; /处理K2 case 7 . break; /处理K3 default: break; /无键按下退出 keyflag=0; /清按键中断标志
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。