外部中断详解
单片机的中断与异常处理方法

单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。
它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。
本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。
一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。
中断可以分为外部中断和内部中断两种。
1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。
外部中断常用于与外部设备的交互,如按键输入、传感器检测等。
在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。
2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。
内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。
不同的内部中断需要通过编程实现相应的中断服务程序。
二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。
下面将介绍两种常用的中断处理方法。
1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。
在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。
优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。
2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。
外部中断实验原理

外部中断实验原理一、实验原理外部中断是计算机科学中的一个重要概念,它允许程序在特定的事件发生时被唤醒或中断。
外部中断对于实现实时计算、多任务处理、异常处理等重要功能具有关键作用。
本实验旨在深入理解外部中断的工作原理,并通过实例分析来揭示其实际应用中的关键点。
二、详细内容分析1. 中断触发机制外部中断是由特定事件触发的,例如输入输出操作完成、定时器溢出、硬件错误等。
当中断触发条件满足时,硬件会保存当前程序的状态,并将控制权转移到指定的中断处理程序。
2. 中断优先级当多个中断同时发生时,系统需要根据一定的优先级规则来确定执行哪个中断处理程序。
中断优先级的高低取决于具体应用的需求,通常可以根据重要性和实时性要求来设定。
3. 中断处理程序中断处理程序(Interrupt Service Routine, ISR)是一段特定的代码,用于在发生中断时处理事件并做出响应。
ISR通常包括保存寄存器状态、处理中断事件、恢复寄存器状态以及执行相应的操作等步骤。
4. 中断嵌套与处理器状态在多任务操作系统中,可能存在多个中断同时发生的情况。
此时,系统需要根据优先级逐一处理中断,并保存每个中断处理前的处理器状态,以便在处理完中断后恢复到原来的状态。
5. 中断屏蔽与唤醒某些情况下,系统可能需要暂时屏蔽某些中断,以避免干扰关键任务的执行。
同时,某些中断可能需要唤醒睡眠状态的进程或线程。
这些操作需要通过特定的指令或机制来实现。
三、实例分析以一个简单的例子来说明外部中断的工作流程:假设我们有一个基于Linux 系统的嵌入式系统,当某个硬件设备完成一项任务(如数据传输)时,会触发一个外部中断。
系统会保存当前的任务状态,并执行相应的中断处理程序(ISR)。
ISR会读取硬件设备的数据,并执行相应的操作(如数据处理、任务调度等)。
在ISR执行完毕后,系统会恢复之前保存的任务状态,并继续执行之前的任务。
这个例子中,我们看到了外部中断如何被用于实时处理任务、唤醒睡眠状态的进程以及调度任务等操作。
外部中断工作原理

外部中断工作原理
外部中断是计算机系统中的一种中断方式,在特定的条件下,外部设备向中断控制器发送中断请求信号,然后中断控制器将该请求信号转发给处理器,让处理器暂停当前的执行任务,转而执行相应的中断服务程序。
外部中断的工作原理如下:
1. 外部设备发生中断事件:当外部设备(例如键盘、鼠标、打印机等)发生某种事件或完成某个任务时,会发送中断请求信号给中断控制器。
2. 中断请求信号传递:中断控制器接收到中断请求信号后,会将该信号的具体信息传递给处理器,通过中断引脚或总线来进行传输。
3. 处理器响应中断信号:当处理器接收到中断请求信号后,会暂停当前的执行任务,保存当前的执行现场(例如寄存器状态、指令指针等),并跳转到中断向量表中特定位置的中断服务程序。
4. 中断服务程序执行:中断服务程序是指特定的处理器指令序列,用于处理特定的中断事件。
处理器会根据中断向量表中的中断号找到对应的中断服务程序,并执行相应的操作。
5. 中断处理完成:当中断服务程序执行完毕后,处理器会恢复之前保存的执行现场,并继续执行被中断的任务,使得计算机
系统回到原来的工作状态。
总结起来,外部中断的工作原理是通过外部设备的中断请求信号,中断控制器将其传递给处理器,处理器相应地执行相应的中断服务程序,以处理特定的中断事件,最后再返回到被中断之前的任务执行。
这种方式能够使计算机系统能够快速响应外部设备的变化,提高系统的并发性和实时性能。
中断的触发方式有哪些?

中断的触发方式有哪些?中断是计算机系统中常见的一种通信机制,用于处理紧急事件或优先级较高的任务。
中断的触发方式多种多样,下面将介绍其中的几种常见触发方式。
一、外部中断外部中断是由外部设备或外部信号引发的中断。
例如,当键盘输入时,计算机系统会通过外部中断来处理输入的字符。
外部中断可以从物理设备或外部电路中引发,通过响应设备发出的中断请求信号,来实现与设备的交互。
1. 异常中断异常中断是由于程序执行过程中出现错误或异常情况而引发的中断。
比如,越界访问数组、除以零等错误会触发异常中断。
异常中断可以及时发现错误,并采取相应的措施进行处理,从而保证系统的稳定性。
2. 外部设备中断外部设备中断是由外部设备通过中断请求线向处理器发出中断请求,并由处理器对该请求进行响应。
例如,当打印机准备好打印时,会发出中断请求,通知处理器进行打印操作。
外部设备中断可以使系统在不干扰其他任务的情况下,进行设备的异步操作。
二、定时器中断定时器中断是通过系统中的定时器设备来触发的中断。
定时器中断可以周期性地产生中断请求信号,用于处理定时任务或周期性的操作。
例如,操作系统中的时钟中断就是一种定时器中断,它会周期性地触发操作系统的调度,以保证各个任务的正常执行。
1. 周期性定时器中断周期性定时器中断是指定时器设备周期性地产生中断请求信号。
这种中断可以用于定时周期性事件的触发,如操作系统的任务调度、定时数据采集等。
2. 单次定时器中断单次定时器中断是指定时器设备在设定时间到达后仅触发一次中断请求信号。
这种中断可以用于引发某些任务或事件,如定时提醒、定时报警等。
三、内部中断内部中断是由处理器内部的状态或条件引发的中断。
比如,当程序执行遇到条件跳转指令或中断指令时,会触发内部中断。
内部中断可以改变程序的执行流程,实现条件判断和程序的中断处理。
1. 条件中断条件中断是由程序执行中满足特定条件时触发的中断。
比如,当某个变量的值达到或超过设定的阈值时,可以触发条件中断,执行相应的中断处理程序。
exit外部中断原理

在计算机系统中,"exit"用于终止当前运行的程序并退出程序的执行。
"exit"指令可以通过操作系统提供的API或编程语言的特定函数来调用。
下面是关于"exit"外部中断的详细版解释:
1. 外部中断介绍:在计算机系统中,外部中断是由外部事件触发的一种中断类型。
外部事件可以来自硬件设备(如硬件错误、时钟信号)或由操作系统或其他程序发送的软件中断请求。
2. "exit"指令执行:当程序执行到"exit"指令时,会触发一个软件中断请求,通知操作系统终止当前程序的执行。
3. 中断向量表:操作系统会维护一个中断向量表,其中记录了不同中断类型对应的中断处理程序的入口地址。
当操作系统接收到"exit"指令发起的中断请求时,会根据中断类型(在这种情况下为"程序终止")查找中断向量表,找到相应的中断处理程序。
4. 中断处理程序:当中断处理程序被调用时,它会执行一系列操作来终止当前程序的执行。
这些操作可能包括关闭文件句柄、释放内存、保存程序状态等。
处理程序还可能发送一些指令或信号给操作系统,以便进行进程资源的清理和管理。
5. 回收资源:在中断处理程序执行完毕后,操作系统会回收当前程序所占用的系统资源,如内存空间、打开的文件等。
同时,操作系统可能会将控制权交还给调度程序,以决定接下来执行哪个程序。
需要注意的是,实际的中断处理过程可能因操作系统的设计和实现而有所不同。
上述描述提供了一个通用的概念框架,以详细解释"exit"指令的外部中断原理。
外部中断工作原理

外部中断工作原理外部中断是计算机处理器在执行当前指令时,突然发生的来自外部设备或其他处理器的中断请求。
当中断请求发生时,处理器立即停止当前任务的执行,保存当前的执行状态,并转去执行中断服务程序。
中断服务程序完成后,处理器会返回到之前被中断的任务继续执行。
外部中断的工作原理主要包括以下几个步骤:1. 中断请求:外部设备(如键盘、鼠标、打印机等)通过与处理器连接的中断请求线发出中断请求信号。
这个中断请求信号被称为硬件中断。
2. 中断识别:处理器通过中断控制器或中断控制单元来识别并区分不同的中断请求。
中断控制器负责对中断源进行编码,并将中断信号传递给处理器。
3. 中断响应:处理器接收到中断信号后,立即停止当前任务的执行,并保存相关的执行状态。
这包括保存指令执行的位置、寄存器的内容以及当前的运行环境。
处理器将这些信息保存在特定的寄存器或内存区域中。
4. 中断处理程序:处理器会根据中断信号的不同,转向相应的中断服务程序。
中断服务程序是由操作系统或应用程序编写的一段代码,用于处理特定的中断请求。
它会执行一系列的操作来满足外部设备发出的请求,并恢复被中断的任务的执行环境。
5. 中断返回:当中断服务程序执行完毕后,处理器会根据保存的执行状态信息恢复被中断的任务的执行。
处理器将之前保存的指令执行位置、寄存器内容以及运行环境恢复到中断发生时的状态。
被中断的任务会继续执行,从中断点之后的指令开始执行。
处理器完成中断处理后,会继续正常执行后续的指令。
通过外部中断的工作原理,计算机可以及时响应外部设备的请求,并在尽可能短的时间内处理相应的任务。
这使得计算机能够快速地与外部设备进行交互,提高了系统的实时性和响应能力。
单片机外部中断详解及程序

单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。
比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。
在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。
如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。
但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。
因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。
下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。
电路结构和接线不变,仅把程序改为下面的形式。
#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。
51单片机外部中断详解-(最新版)

一.外部中断相关寄存器1.定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IT1:外部中断1触发方式控制位当IT1=0时,为电平触发方式(低电平有效)当IT1=1时,为边沿触发方式(下降沿有效)2.中断允许控制寄存器(IE)EX0:外部中断0允许位;EX1:外部中断1允许位;EA :CPU中断允许(总允许)位。
二.外部中断的处理过程1、设置中断触发方式,即IT0=1或0,IT1=1或02、开对应的外部中断,即EX0=1或EX1=1;3、开总中断,即EA=1;4、等待外部设备产生中断请求,即通过,口连接外部设备产生中断5、中断响应,执行中断服务函数三.程序编写要求:通过两位按键连接外部中断0和1,设定外部中断0为下降沿触发方式,外部中断1为低电平触发方式,按键产生中断使数字加减,用一位共阳极数码管来显示数值。
目的:感受外部中断对程序的影响,体会低电平触发和下降沿触发的区别。
#include<>#define uint unsigned int #define uchar unsigned char uchar code dat[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint num;void main(){EA=1; //开总中断IT0=1; //下降沿触发IT1=0; //低电平触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许while(1){P0=dat[num%10];}}void plus() interrupt 0//外部中断0 {EX0=0;num++;EX0=1;}void minus() interrupt 2//外部中断1{EX1=0;num--;EX1=1;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。
我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。
通篇我会以让初学者都能看懂的语言来说明。
如果有专业一点的术语名词,我也尽量用简单易懂的描述。
注:本文旨在让大家理解什么是中断和怎么去设置。
具体的东西有些考虑到深浅问题,则跳过不讲。
如需了解,可自行查询资料
1.什么是中断?
2.为什么要有中断?
3.中断怎么触发?
4.怎么设置中断?
什么是中断?
举个老生常谈的例子——接电话。
在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。
OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。
这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。
为什么要有中断?
为什么要有中断,再举一个例子好了。
简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。
所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。
什么情况会触发中断?
那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢?
简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。
这三种的触发方式不一样。
外部中断:
顾名思义,就是单片机外部出现了一定的情况,才进入了中断。
89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。
分别是外部中断0和外部中断1。
我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。
定时器中断:
定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。
串口中断:
串口中断也不再这赘述,大致是,当单片机的RX引脚接收到信号的时候,会自动进入中断。
怎么设置中断?
OK,在了解这些之后,我们就可以开始来写程序,设置一个中断了。
所有中断,如果要开启的话,我们就需要对单片机进行一个【初始化设置】,让单片机知道:“哦,你要老子开启外部中断。
”
这时候,我们设置的东西,其实就是在设置单片机里的一些特殊功能寄存器。
这时候涉及到一个新名词叫做寄存器,我们这么理解寄存器顾名思义他是存放数据的,需要的时候,我就把他拿出来。
而特殊功能寄存器,我们可以直接把他理解成一组开关。
比如我想开启中断,那我就让某个特殊功能寄存器中某个位赋予一个值(1或0),数据手册会告诉你该给1还是该给0。
这时候,你就相当于打开了一个【开启中断】的开关。
那这时候还不行,因为单片机还不知道,你要开哪个中断。
那你又要去打开一个叫【外部中断】的开关。
那还没完,单片机要知道你外部中断是要哪一类,是低电平触发呢,还是下边沿触发呢。
这时候你又要去打开某个开关。
所以,初始化这些东西,无非就是让你去把一些开关打开,把一些开关关闭。
仅此而已。
接下来给大家一张图。
是51单片机中断的开关图。
这张图十分好用,大家好好珍惜这张图。
左边的:INT0/INT1是外部中断,T0/T1是定时器中断,RX/TX是串口中断。
上面的:TCON、IE、IP、SCON是我们刚才讲的特殊功能寄存器。
中间的:IT0/IT1、IE0、EA等,是这些特殊功能寄存器里的其中一个位,方便我们直接进行位操作。
(就好比 P0与P0.1之间的关系。
)
那我们举个例子,我们要做一个INT0的低电平触发的外部中断。
那不就是做一个看图连线的过程而已吗?
我们既然选择INT0,那我们接下来就要设置他的触发方式了,IT0选择0的话,就是低电平触发,选择1的话就是下降沿触发。
我们选择0.
IT0=0;
然后,IE0这里其实是个标志位而已,如果我们以刚刚看图连线的思路,他其实就是已经连着的了,我们不需要管他。
接下来EX0(外部中断开关)我们要置1,EA(中断总开关)也置1,这样的话,所有的开关就都闭合了。
IP是设置优先级,可以不管。
也就是说设置外部中断0的低电平触发方式,我们只需要在程序一开始这么写就OK了。
IT0=0;
EA=1;
EX0=1;
这就完成了初始化了。
至于后面的步骤大家应该也都能有所了解了。
看回教材就行。