精华内容
下载资源
问答
  • 什么是中断中断作用

    千次阅读 2020-12-28 09:43:04
    中断使得计算机系统具备应对对处理突发事件的能力,提高了CPU的工作效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率...

    中断即打断,实至CPU再执行当前程序时,由于系统出现了某种需要处理的紧急情况,CPU暂停正在执行的程序,转而去执行另一段特殊程序来处理的出现的紧急事务,处理结束后CPU自动返回到原先暂停的程序中去继续执行,这种执行过程由于外界的的原因被中间打断的情况成为中断。
    中断的作用:
    中断使得计算机系统具备应对对处理突发事件的能力,提高了CPU的工作效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低,却不能及时响应紧急事件。

    展开全文
  • 单片机的中断系统 多级中断控制实例

    1.前言

    记录对51单片机中断、定时/计数器的重要知识点以及难点理解,并且举例中断在实际编程中的应用,从而加深对单片机中断、定时/计数器的理解,熟练的使用中断。

    2.什么是中断

    中断就是计算机在执行某一程序的过程中,由计算机系统内部或外部的某种原因而必须终止当前程序的运行先去执行相应的处理程序,然后再返回继续执行原程序

    3.什么是中断系统

    实现中断功能的软、硬件系统统称为中断系统。

    4.中断的流程

    在这里插入图片描述
    即:中断请求中断响应中断处理中断返回

    5.中断的优先级控制

    通常情况下,一个程序中可能会有多个中断,优先级越高的中断优先执行。如果在一个中断的服务过程中,有一个优先级更高的中断插入,则当前中断暂停,前往执行优先级更高的中断。当优先级高的中断执行完毕后再返回继续执行低优先级的中断。

    6.中断源

    MCS-51共有五个中断源

    1. 外部中断INT0INT1
    2. 定时/计数器T0T1的溢出中断
    3. 串行口的发送和接受中断(只占用一个中断源)
    中断源 功能
    INT0 外部中断0请求,由INT0引脚(P3.2)输入。低电平/负跳变有效,中断请求标志为IE0
    INT1 外部中断1请求,由INT1引脚(P3.3)输入。低电平/负跳变有效,中断请求标志为IE1
    T0 定时/计数器0溢出中断请求,中断标志位为TF0
    T1 定时/计数器1溢出中断请求,中断标志位为TF1
    RXD/TXD 串行口中断请求,中断请求标志位TIRI

    外部中断

    从单片机外部引脚INT0INT1输入中断请求信号的中断。
    外部中断的触发方式有两种电平触发IT0 =0跳变触发(边沿)IT0 = 1,可以通过定时/计数器控制寄存器TCON编程选择。

    7.与中断有关的特殊功能寄存器

    与中断有关的特殊功能寄存器一共有4个。

    1. 定时/计数器控制寄存器(TCON)、
    2. 串行口控制寄存器(SCON)、
    3. 中断允许控制寄存器(IE)、
    4. 中断优先级控制寄存器(IP)

    7.1.定时/计数器控制寄存器 TCON

    作用

    1. 控制定时/计数器T0T1的溢出中断
    2. 控制外部中断的触发方式.由IT0IT1控制
    3. 锁存外部中断请求标志位
    位地址 位定义 功能
    88H IT0 选择外部中断0的中断触发方式。由软件控制。IT0=0为电平触发方式IT0=1为下降沿触发方式
    89H IE0 选择外部中断1的中断触发方式。功能与IT0相似
    8AH

    7.2.串行口控制寄存器 SCON

    串行口的接收发送数据中断请求标志位(RITI)

    位定义 功能
    TI 串行口发送中断请求标志位。CPU每发送一帧数据,硬件置位1(TI=1),但是中断被响应时,需要在中断服务程序中通过软件对TI清零
    RI 串行口接受中断请求标志位。每接收一帧数据,硬件置位1(TI=1),但是中断被响应时,一样需要在中断服务程序中通过软件对TI清零

    串行口中断不能由硬件自动清除中断请求标志位,需要用户通过软件进行控制清零。

    7.3.中断允许控制寄存器 IE

    IE是控制中断的开关,通过对IE的清0和置1操作来控制中断的屏蔽和开放。

    中断允许控制寄存器IE对中断的开放与屏蔽实现两级控制,存在一个总的中断控制位EA

    位定义 功能
    EA 总中断允许控制位。当EA=0时,不允许任何中断请求。
    ES 串行口中断控制位。当ES=0时,不允许串行口中断;当EA=1ES=1时,允许串行口中断。
    ET1 定时/计数器1中断允许控制位。当ET1=0时,屏蔽T1的溢出中断;当EA=1且ET1=1时,允许T1溢出中断
    ET0 定时/计数器0中断允许控制位。功能与ET1相同。
    EX1 外部中断1的中断允许控制位。当EX1=0时,屏蔽外部中断1的中断请求;当EA=1EX1=1时,允许外部中断1的中断请求
    EX0 外部中断0的中断允许控制位。功能与EX1相同

    若某个中断源被允许,出来IE对应位置1外,还需要总中断控制位EA置1。

    实例:若允许片内两个定时/计数器中断,禁止其他中断源的中断请求,尝试编写出设置IE的响应指令

    #include <reg51.h>
    
    EX0 = 0; // 禁止外部中断0
    EX1 = 0; // 禁止外部中断1
    ES = 0;  // 禁止串行口中断
    ET0 = 1; // 允许定时/计数器0中断
    ET1 = 1; // 允许定时/计数器1中断
    EA = 1;  // 总中断控制器打开
    

    7.4.中断优先级控制寄存器 IP

    位定义 功能
    PS 串行口中断优先级控制位。PS=1,串行口中断为高优先级;PS=0,为低优先级。
    PT1 定时/计数器1中断优先级控制位。当PT1=0时,T1溢出中断为低优先级;当PT1=1时,T1溢出中断为高优先级。
    PT0 定时/计数器0中断优先级控制位。当PT0=0时,T0溢出中断为低优先级;当PT0=1时,T0溢出中断为高优先级。
    PX1 外部中断1的中断优先级控制位。当PX1=0时,外部中断1为低优先级;当PX1=1时,外部中断1为高优先级。
    PX0 外部中断0的中断优先级控制位。当PX0=0时,外部中断0为低优先级;当PX0=1时,外部中断0为高优先级。

    同级内第二优先级的次序
    外部中断0 > T0溢出中断 > 外部中断1 > T1溢出中断 > 串行口中断

    8.中断系统在实际编程中的应用

    8.1.实例一:中断的初始化

    #include <reg51.h>
    
    void init() // 中断的初始化函数
    {
        EA = 1; // 总中断控制位
        ES = 1; // 串行口中断允许
        EX0 = 1; // 外部中断0允许
        EX1 = 1; // 外部中断1允许
        ET0 = 1; // 定时/计数器0中断允许
        ET1 = 1; // 定时/计数器1中断允许
        IT0 = 1; // 选择外部中断0的触发方式
        IT1 = 1; // 选择外部中断1的触发方式
    }
    

    例1:假设允许外部中断0和1中断,并设定外部中断0为高级中断,外部中断1为低级中断,外部中断0为下降沿触发方式,外部中断1为电平触发方式。试写出该程序的中断初始化程序。

    #include <reg51.h>
    
    void init() // 
    {
        EA = 1; 打开中断控制
        EX0 = 1; 允许外部中断0
        EX1 = 1; 允许外部中断1
        IT0 = 1; 外部中断1采取边沿触发方式
        IT1 = 0; 外部中断0采取电平触发方式
        PX0 = 1; 外部中断0为高优先级
        PX1 = 0; 外部中断1为低优先级
    }
    
    

    8.2.实例二:利用中断控制LED闪烁形式

    要求

    用80C51单片机控制8个LED灯,在外部中断0输入引脚(P3.2)接一个开关K1。要求将外部中断0设置为下降沿触发,程序启动是8个LED以跑马灯的形式交替闪烁。每按一次开关K1,使引脚接地,产生一个下降沿触发的外部中断请求。在中断服务程序中,8个LED高四位和低四位交替闪烁5次,然后中断返回,8个LED继续以跑马灯形式闪烁。

    采用Protues+Keil仿真

    元器件

    • 单片机:80C51 *1
    • 开关按钮:Button *1
    • 电阻:MINRES470K *1
    • LED:LED-BLUE *8

    仿真图

    在这里插入图片描述
    代码

    #include<reg52.h>
    
    unsigned char code table[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0xff};	// 控制P2端口的状态
    
    unsigned char i,j,k,num;
    
    void delay()			 // 延时函数
    {
    	for(i = 0;i<100;i++)
    	{
    		for(j=0;j<200;j++)
    		;
    	}
    }
    
    void init()		   // 中断的初始化
    {
    	EA = 1;	   // 打开总中断控制
    	EX0 = 1;   // 允许外部中断0
    	IT0 = 1;   // 外部中断为下降沿触发方式
    }
    
    
    void main()	   
    {
    	init();
    	while(1)
    	{
    		for(num =0;num<10;num++)
    		{
    			P2 = table[num];
    			delay();
    		}
    	}
    }
    
    void int0() interrupt 0			   // 中断服务程序
    {
    	for(k = 0;k<5;k++){
    		P2 = 0xf0;
    		delay();
    		P2=0x0f;
    		delay();
    	}
    }
    

    8.3.实例三:多级中断控制LED不形式闪烁

    要求:在例2的基础上,在外部中断1输入引脚(P3.3)接一只按钮开关K2。当按下K1时,外部中断0下降沿触发方式触发,进入外部中断0服务程序,上下4个灯交替闪烁;此时按下K2,外部中断1下降沿触发方式触发,进入外部中断1服务程序,8个灯交替闪烁。当外部中断1响应完毕后,返回继续响应外部中断0,直到外部中断0响应完毕,返回执行主程序。
    首先我们分析一波中断初始化函数

    1. 两个外部中断0和1。外部中断0的服务程序为上下4灯交替闪烁,外部中断1的服务程序为8灯闪烁。即EA = 1; EX0 = 1; EX1 = 1;

    2. 优先级:外部中断1 > 外部中断0 即PX1 = 1; PX0 = 0;

    3. 触发方式:都为下降沿触发。即IT0 = 1; IT1 = 1;

    这样我们的中断初始化程序基本完成

    void init()
    {
        EA = 1;
        EX0 = 1; EX1 = 1;
        PX0 = 0; PX1 = 1;
        IT0 = 1; IT1 = 1;
    }
    
    

    其次我们再捯饬一下主程序

    void main()	   
    {
    	init();
    	while(1)
    	{
    		for(num =0;num<10;num++)
    		{
    			P2 = table[num];
    			delay();
    		}
    	}
    }
    
    

    另外我们再搞一下外部中断0的服务程序

    void int0() interrupt 0
    {
    	for(k = 0;k<5;k++)
        {
    		P2 = 0xf0;
    		delay();
    		P2=0x0f;
    		delay();
    	}
    }
    

    最后我们再他喵的弄一下外部中断1的服务程序

    
    void int1() interrupt 2			  // 外部中断1服务程序
    {
    	for(l = 0;l < 5; l++)
    	{
    		P2 = 0x00;
    		delay();
    		P2 = 0xff;
    		delay();
    	}
    }
    

    完整代码

    #include<reg52.h>
    
    unsigned char code table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0x00, 0xff};	// 控制P2端口的状态
    
    unsigned char i, j, k, l, num;
    
    void delay()			 // 延时函数
    {
    	for(i = 0; i < 200; i++)
    	{
    		for(j = 0; j < 200; j++)
    		;
    	}
    }
    
    void init()		   // 中断的初始化
    {
    	EA = 1;
        EX0 = 1; EX1 = 1;
        PX0 = 0; PX1 = 1;
        IT0 = 1; IT1 = 1;
    }
    
    void main()	   
    {
    	init();
    	while(1)
    	{
    		for(num = 0; num < 10; num++)
    		{
    			P2 = table[num];
    			delay();
    		}
    	}
    }
    
    void int0() interrupt 0			   // 外部中断0中断服务程序
    {
    	EX0 = 0;
    	for(k = 0; k < 5; k++)
    	{
    		P2 = 0xf0;
    		delay();
    		P2 = 0x0f;
    		delay();
    		EX0 = 1;
    	}
    }
    
    void int1() interrupt 2			  // 外部中断1服务程序
    {
    	for(l = 0;l < 5; l++)
    	{
    		P2 = 0x00;
    		delay();
    		P2 = 0xff;
    		delay();
    	}
    }
    

    仿真图

    在这里插入图片描述
    文章来源:中断系统

    展开全文
  • 中断作用

    万次阅读 2018-05-15 10:31:36
    所有的事物都是依靠中断来解决问题的。计算机更是如此,依靠时钟发生器,人为的设置没几个时钟周期做一个任务,不管是否做完,一旦规定的时间到了,那么就要强制“中断”,以作下一个任务……就这样,直道所有的任务...

    所有的事物都是依靠中断来解决问题的。计算机更是如此,依靠时钟发生器,人为的设置没几个时钟周期做一个任务,不管是否做完,一旦规定的时间到了,那么就要强制“中断”,以作下一个任务……就这样,直道所有的任务都作过了(但不一定都做完毕),再接着做第一个没有做完的任务,就这样走而复始循环工作。完成所谓的“多任务”。

    要不然,一个cpu,如果即能一边打字,一边看到屏幕呢?这就是一个cpu核心,不断地一会检测键盘,一会检测屏幕……
    还有就是软中断,具体详细的细节,可以参考微机原理。

    中断系统

    中断装置和中断处理程序统称为中断系统

    中断系统是计算机的重要组成部分。实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。中断系统的应用大大提高了计算机效率。

    不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。计算机的中断系统能够加强CPU对多任务事件的处理能力。中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。中断是实现多道程序设计的必要条件。中断是CPU对系统发生的某个事件作出的一种反应。引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点成为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分成为软件处理程序。

    中断系统的功能

    1)实现中断响应和中断返回

    当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急、更重要的工作,则在执行完当前指令后响应这一中断请求。CPU中断响应过程如下:首先,将断点处的PC值(即下一条应执行指令的地址)推入堆栈保留下来,这称为保护断点,由硬件自动执行。然后,将有关的寄存器内容和标志位状态推入堆栈保留下来,这称为保护现场,由用户自己编程完成。保护断点和现场后即可执行中断服务程序,执行完毕,CPU由中断服务程序返回主程序,中断返回过程如下:首先恢复原保留寄存器的内容和标志位的状态,这称为恢复现场,由用户编程完成。然后,再加返回指令RETI,RETI指令的功能是恢复PC值,使CPU返回断点,这称为恢复断点。恢复现场和断点后,CPU将继续执行原主程序,中断响应过程到此为止。

    2)实现优先权排队
    通常,系统中有多个中断源,当有多个中断源同时发出中断请求时,要求计算机能确定哪个中断更紧迫,以便首先响应。为此,计算机给每个中断源规定了优先级别,称为优先权。这样,当多个中断源同时发出中断请求时,优先权高的中断能先被响应,只有优先权高的中断处理结束后才能响应优先权低的中断。计算机按中断源优先权高低逐次响应的过程称优先权排队,这个过程可通过硬件电路来实现,亦可通过软件查询来实现。

    3)实现中断嵌套
    当CPU响应某一中断时,若有优先权高的中断源发出中断请求,则CPU能中断正在进行的中断服务程序,并保留这个程序的断点(类似于子程序嵌套),响应高级中断,高级中断处理结束以后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才能去处理新的中断请求。

     

    中断、异常和系统调用

    所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

    中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。

    第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。

    1.中断处理

    中断处理一般分为中断响应和中断处理两个步骤。中断响应由硬件实施,中断处理主要由软件实施。

    (1)中断响应

    对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU暂停执行当前的程序,而转去处理中断。这个由硬件对中断请求作出反应的过程,称为中断响应。一般说来,中断响应顺序执行下述三步动作:

    ◆中止当前程序的执行;

    ◆保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容);

    ◆从中断控制器取出中断向量,转到相应的处理程序。

    通常CPU在执行完一条指令后,立即检查有无中断请求,如果有,则立即做出响应。

    当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”—SoftwareInterrupts),或者来自意外事件(如访问页面不在内存)。

    如果当前CPU的执行优先级低于中断的优先级,那么它就中止对当前程序下条指令的执行,接受该中断,并提升处理机的执行级别(一般与中断优先级相同),以便在CPU处理当前中断时,能屏蔽其它同级的或低级的中断,然后保存断点现场信息,通过取得的中断向量转到相应的中断处理程序的入口。

    (2)中断处理

    CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到相应的表项,该表项应是一个中断门。于是,CPU就根据中断门的设置而到达了该通道的总服务程序的入口。

    核心对中断处理的顺序主要由以下动作完成:

    ◆保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。

    ◆确定“中断源”或核查中断发生,识别中断的类型(如时钟中断或盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。

    ◆核心调用中断处理程序,对中断进行处理。

    ◆中断处理完成并返回。中断处理程序执行完以后,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。如果设置了重调度标志,则在本进程返回到用户态时做进程调度。

    2.系统调用

    在Unix/Linux系统中,系统调用像普通C函数调用那样出现在C程序中。但是一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到。

    C语言编译程序利用一个预先确定的函数库(一般称为C库),其中有各系统调用的名字。C库中的函数都专门使用一条指令,把进程的运行状态改为核心态。Linux的系统调用是通过中断指令“INT0x80”实现的。

    每个系统调用都有惟一的号码,称作系统调用号。所有的系统调用都集中在系统调用入口表中统一管理。

    系统调用入口表是一个函数指针数组,以系统调用号为下标在该数组中找到相应的函数指针,进而就能确定用户使用的是哪一个系统调用。不同系统中系统调用的个数是不同的,目前Linux系统中共定义了221个系统调用。

    另外,系统调用表中还留有一些余项,可供用户自行添加。

    当CPU执行到中断指令“INT0x80”时,硬件就做出一系列响应,其动作与上述的中断响应相同。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。

    接着运行内核函数system_call()。首先,进一步保存各寄存器的内容;接着调用syscall_trace(),以系统调用号为下标检索系统调用入口表sys_call_table,从中找到相应的函数;然后转去执行该函数,完成具体的服务。

    执行完服务程序,核心检查是否发生错误,并作相应处理。如果本进程收到信号,则对信号作相应处理。最后进程从系统空间返回到用户空间。

    上面两讲简要介绍了Linux内核的主要数据结构和相应的算法。Linux内核包含了丰富的内容,这里仅是其中的一点点,以求起到“抛砖引玉”的作用。





    信号的中断与系统调用的重起



    #include <signal.h>int sigaction(ints signo, const structsigaction *act, struct sigaction *oact) ;struct sigaction { void(*sa_handler)(); /* addr of signal handler, or SIG_IGN, or SIG_DFL*/ sigset_t sa_mask; /* additional signals to block */ intsa_flags; /* signal options*/} ; 当更改信号动作时,如果sa_handler指向一个信号捕捉函数(不是常数SIG_IGN或SIG_DFL),则sa_mask字段说明了一个信号集,在调用信号捕捉函数之前,该信号集要加到进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字恢复为原先值。这样,在调用信号处理程序时就能阻塞某些信号。在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号。因此保证了在处理一个给定的信号时,如果这种信号再次发生,那么它会被阻塞到对前一个信号的处理结束为止。A.可自动重起的signal()的实现:#include <signal.h>#typpdef voidSigfunc(int signo); Sigfunc *signal(int signo, Sigfunc *func){struct sigaction act, oact; act.sa_handler = func;sigemptyset(act.sa_mask); act.sa_flags = 0; if (signo == SIGALRM){#ifdef SA_INTTERRUPT //SUNOS act.flags |= SA_INTTERRUPT;#endif }else // for other signal {#ifdef SA_RESTART //SVR, 4.3+BSD act.flag|= SA_RESTART; #endif } if (sigaction(signo, &act, &oac)< 0) return (SIG_ERR); return (oact.sa_handler);}注:在if语句中,我们检查是否为SIGALRM信号,如果是,且系统定义了SA_INTERRUPT(SUNOS),即为SUNOS,该系统默认的系统调用是自动重起的,我们阻止该信号中断的系统调用重起,因为我们要用该信号中断I/O操作,实现定时的功能.接着的else语句中的信号为SIGALRM之外的其他信号,且系统定义了SA_RESTART,即为SVR4或4.3+BSD类系统,该类系统中默认的系统调用是不可重起的,所以应该加上SA_RESTART标志,使由这些信号中断的系统调用自动重起.B.不可重起的signal_intr()实现: Sigfunc *signal_intr(int signo,Sigfunc *func)
    {
    struct sigaction act, oact;

    act.sa_handler = func;
    sigemptyset(act.sa_mask);
    act.sa_flags = 0;

    #ifdef SA_INTTERRUPT //SUNOS
    act.flags |= SA_INTTERRUPT;
    #endif
    if (sigaction(signo, &act, &oac) < 0)
    return (SIG_ERR);

    return (oact.sa_handler);
    }
    注:只有SUNOS为自动重起的,其他为不自动重起的,所以只要将SUNOS标志为非自动重起即可.如上.

    展开全文
  • 中断系统与按键中断

    2019-09-06 21:49:37
    中断系统与按键中断控制LED

    如何实时检测随机事情的发生?

    通常有查询和中断两种方法。因为无论事件是否发生,都必须去查询,所以使用查询的方式会很浪费资源。而中断是当事情发生时,如果允许中断发生,则打断正在执行的程序,因此中断能快速响应。

    中断系统结构

    STC89C52具有6个中断源,可实现两级中断嵌套。
    中断系统结构

    符号 名称 触发条件 说明
    INT0 外部中断0 低电平或下降沿触发 P3.2口
    INT1 外部中断1 低电平或下降沿触发 P3.3口
    T0 定时器/计数器0中断 计数器0溢出回0引起 中断请求标志:TF0
    T1 定时器/计数器1中断 计数器1溢出回0引起 中断请求标志:TF1
    T2 定时器/计数器2中断 计数器2溢出回0引起 中断请求标志:TF2 ;捕捉中断
    TI/RI 串行口中断 发送/接收完一个串行数据 标志位:TI、RI

    中断请求标志寄存器

    6个中断请求标志分别锁存在TCON 、SCON和T2CON中;

    TCON寄存器

    TCON

    名称 说明
    IT0 当IT0=0时,外部中断0为电平触发方式;IT0=1时,为边沿触发方式(下降沿有效)。
    IE0 当外部中断0 触发时,置1;转入中断服务程序时,由硬件清0
    IT1 当IT1=0时,外部中断1为电平触发方式;IT1=1时,为边沿触发方式(下降沿有效)。
    IE1 当外部中断1 触发时,置1;转入中断服务程序时,由硬件清0
    TF0 定时器/计数器T0的溢出中断时,由硬件使TF0置“1” ;转入中断服务程序时,由硬件清0
    TF1 定时器/计数器T1的溢出中断时,由硬件使TF1置“1” ;转入中断服务程序时,由硬件清0
    TR0 定时器/计数器T0的控制运行位;
    TR1 定时器/计数器T1的控制运行位;

    中断允许寄存器IE

    IE

    • EA=0时,所有的中断请求被屏蔽;
    • EA=1时,允许中断,相当于总开关打开;
    • ET2=0,禁止定时器/计数器T2溢出中断。
    • ET2=1,允许定时器/计数器T2溢出中断。
    • ES=0,禁止串行口中断。
    • ES=1,允许串行口中断。
    • ET1=0,禁止定时器/计数器T1溢出中断。
    • ET1=1,允许定时器/计数器T1溢出中断。
    • EX1=0,禁止外部中断1中断。
    • EX1=1,允许外部中断1中断。
    • ET0=0,禁止定时器/计数器T0溢出中断。
    • ET0=1,允许定时器/计数器T0溢出中断。
    • EX0=0,禁止外部中断0中断。
    • EX0=1,允许外部中断0中断。

    总结:在EA=1时,某位设置为1,则允许该中断发生。

    中断优先级寄存器IP

    IP

    1. PT2—定时器T2中断优先级控制位
    2. PS—串行口中断优先级控制位
    3. PT1—定时器T1中断优先级控制位
    4. PX1—外部中断1中断优先级控制位
    5. PT0—定时器T0中断优先级控制位
    6. PX0—外部中断0中断优先级控制位

    1:高优先级; 0:低优先级

    1. 低优先级可被高优先级中断,高优先级不能被低优先级中断
    2. 任何一种中断一旦得到响应,不会再被它的同级中断源所中断
    3. 在同时收到几个同优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。同级中,外部中断0的优先级最高在这里插入图片描述

    如何配置外部中断

    1.设置TCON,确定触发方式,电平触发or下降沿
    2. IE寄存器中的中断总允许位EA=1,并配置IE确定中断源
    3. 设置中断优先级寄存器IP,可以没有这步
    4. 编写中断服务子程序,处理中断请求

    外部中断0服务函数
    void INT0()interrupt 0 using 1
    {
    xxx
    }

    名称 说明
    interrupt 0 外部中断0
    interrupt 1 定时器中断0
    interrupt 2 外部中断1
    interrupt 3 定时器中断1
    interrupt 4 串行口中断
    interrupt 5 定时器中断2

    using 0 是第0组寄存器;
    using 1 是第1组寄存器;
    using 2 是第2组寄存器;
    using 3 是第3组寄存器;
    这个的作用不太明白,但是一般情况下不需要考虑这个,也不需要写上

    外部中断0程序

    • 程序现象:按键控制LED灯状态取反
    • 程序说明:LED连接在P2^0;按键连接在P3.2口且按键按下为低电平;
    #include <reg52.h>
    
    sbit Led0=P2^0;
    sbit Key=P3^2;
    
    typedef unsigned int u16;
    
    
    void delay(unsigned int del) 	//10ms * del
    {
    	unsigned int i,j;
    	for(i=0; i<del; i++)
    	for(j=0; j<1827; j++)      
    	    ;
    }
    
    
    void main()
    {
        IT0=0;		 //TCON,P3.2口低电平触发方式,也可以为下降沿
        EA=1;	  	//IE,开启总开关
        EX0=1; 		//IE,允许外部中断0中断
        
        while(1);  //避免退出程序,循环等待
    }
    
    void int0 () interrupt 0  //中断服务函数
    {
        delay(13);          //消抖一般10~20ms
        if(Key==0)          
        {
            Led0=~Led0;      // LED状态取反
            while(Key!=0);  //按键松手检测
        }
    }
    
    
    展开全文
  • 中断系统8.1 中断的基本概念8.1.1 中断概念的引入及描述中断方式示意(以输入中断为例)**中断**的定义8.1.2 中断源及中断分类中断的分类8.1.3 中断类型码中断类型码中断向量中断向量表中断向量表的设置**中断向量表的...
  • 中断系统

    2019-11-08 21:34:13
    中断系统需要解决的问题 (1)各中断源怎么向CPU提出中断请求 (2)多个中断源同时提出了中断请求,怎么办 (3)CPU在什么条件,什么时间,以什么方式响应中断 (4)如何保护现场(就是中断结束后,要返回到原来...
  • 什么是中断机制?

    千次阅读 2020-06-08 21:54:18
    本文是操作系统系列第五篇,介绍操作系统中的中断机制。更多内容见公号机器学习与系统,欢迎与我互动~概念操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这...
  • 8086中断系统简答

    千次阅读 2019-11-30 19:06:08
    中断系统应该具备什么功能? CPU暂停执行现行程序,转而处理随机事件,处理完毕后再返回中断的程序,这以过程称为中断。 能够引发CPU中断的信息源,称为中断源。 中断系统应具备以下功能: 为了加强中断系统的灵活...
  • 操作系统是如何利用中断机制的

    千次阅读 2016-06-17 01:11:36
    自愿性中断事件 是由正在运行的进程执行一条访管指令用以请求系统调用而引起的中断,这种中断也称为”访管中断”。 一般情况下,优先级的高低顺序依次为:硬件故障中断、自愿中断、程序性中断,外部中断和输入输出...
  • 什么是中断,为什么要用中断

    千次阅读 2010-11-13 23:09:00
    中断解析  一、中断什么  <br />中断的汉语解释是半中间发生阻隔、停顿或故障而断开。那么,在计算机系统中,我们为什么需要“阻隔、停顿和断开”呢?  <br />举个日常生活中的例子,比如...
  • 中断机制是操作系统中极为重要的一个部分。操作系统在管理输入输出设备时,在处理外部的各种事件时,都需要通过中断机制进行处理。所以也有人把操作系统称为是由...在本节中,首先介绍中断的概念,然后叙述中断系统...
  • 中断

    2016-08-21 00:18:20
    1. 什么是中断? 是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU暂时停止正在运行的程序,转到为该内部/外部事件或预先安排的事件服务的程序中去,服务完毕,再返回去继续运行被暂时...
  • 中断唤醒系统流程

    千次阅读 2018-07-12 14:05:28
    一般来说,当设备需要唤醒系统的时候,会通过改变interrupt pin电平状态,而SoC会检测到这个变化,将SoC从睡眠中唤醒,该设备通过相关的子系统通知上层应用做出相应的处理。这就是中断唤醒的过程...
  • 【操作系统系统中断技术

    千次阅读 2017-11-21 20:04:28
    二、CPU中断作用三、CPU中断的类型四、CPU中断的过程五、多核CPU对中断的处理一、什么是CPU中断? 使用计算机的过程中,经常会遇到这么一种情景: 1. 你正在看电影 2. 你的朋友发来一条QQ信息 3. 你一边回复...
  • 操作系统中断机制

    2020-07-10 10:26:54
    操作系统中断机制 1.中断作用 2.中断的类型 3.内中断的例子 4.外中断的例子 5.中断机制的基本原理 6.中断的总结
  • 详解操作系统中断

    千次阅读 2018-05-08 11:49:42
    2016-11-02 中断这个特性相比大家都不会陌生,...说到中断还不得不从现代操作系统的特性说起,无论是桌面PC操作系统还是嵌入式都是多任务的操作系统,而很遗憾,处理器往往是单个的,即使在硬件成本逐渐下降,从...
  • Linux之ARM Cortex-A7 中断系统详解

    千次阅读 2020-09-16 16:07:22
    2、STM32中断系统和 Cortex-M(STM32)中断系统的异同2.1、中断向量表2.2、NVIC(内嵌向量中断控制器)2.3、中断使能2.4、中断服务函数3、Cortex-A7 中断系统详解3.1、Cortex-A7 中断系统简介 1、中断是什么中断系统...
  • DSP中断c2000系列

    千次阅读 2018-05-18 21:55:44
    在DSP系统中CPU一直在运行主程序main函数,被打断的过程也就是暂停主程序处理转而去...因此,中断系统在DSP中的地位非常重要,凡是事件驱动型的数字处理系统里面都应该有中断系统,中断就是为响应事件而存在的。中断...
  • 操作系统中断

    千次阅读 2012-05-27 23:06:32
    自愿性中断事件:是由正在运行的进程执行一条访管指令用以请求系统调用而引起的中断,这种中断也称为"访管中断"。 一般情况下,优先级的高低顺序依次为:硬件故障中断、自愿中断、程序性中断,外部中断和输入输出...
  • DSP 6678的中断系统

    千次阅读 2020-09-02 17:02:28
    1、6678的中断系统 1.1、系统事件 在谈SRIO的中断系统之前,先说一说6678DSP中断系统。C6678的CPU中断是由C66x CorePac Interrupt Controller配置的。该中断控制器(C66x CorePac Interrupt Controller),下文直接...
  • STM32中断系统

    多人点赞 2021-04-19 15:04:39
    10.1 Cortex-M3 的中断和优先级 正常情况下,微处理器根据代码内容,按顺序执行指令。执行过程中,如果遇到其它紧急的事件需要处理,则先暂停当前任务,执行紧急事件,待紧急事件处理完后,再恢复到刚才暂停的地方...
  • 80C51的中断系统

    2020-09-03 19:52:29
    80C51的中断系统 1.1 80C51的中断系统结构 一、中断的概念 CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务)。 待CPU...
  • 操作系统-中断

    千次阅读 2018-07-28 10:45:08
    什么是中断 什么是陷入 参考 操作系统中断的处理过程 浅谈操作系统中断和异常 Linux之时钟中断详解 操作系统18———IO系统中断机构和设备驱动程序 中断 中断是指CPU对I/O设备发来的中断信号的一种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,147
精华内容 89,658
关键字:

中断系统的作用是什么