-
2021-02-08 16:24:42更多相关内容
-
单片机基础:什么是中断系统、中断系统如何用(附中断系统应用实例)
2020-07-09 17:21:41单片机的中断系统 多级中断控制实例中断系统
1.前言
记录对51单片机中断、定时/计数器的重要知识点以及难点理解,并且举例中断在实际编程中的应用,从而加深对单片机中断、定时/计数器的理解,熟练的使用中断。
2.什么是中断
中断就是计算机在执行某一程序的过程中,由计算机系统内部或外部的某种原因而必须终止当前程序的运行,先去执行相应的处理程序,然后再返回继续执行原程序。
3.什么是中断系统
实现中断功能的软、硬件系统统称为中断系统。
4.中断的流程
即:中断请求、中断响应、中断处理、中断返回5.中断的优先级控制
通常情况下,一个程序中可能会有多个中断,优先级越高的中断优先执行。如果在一个中断的服务过程中,有一个优先级更高的中断插入,则当前中断暂停,前往执行优先级更高的中断。当优先级高的中断执行完毕后再返回继续执行低优先级的中断。
6.中断源
MCS-51共有五个中断源
- 外部中断
INT0
、INT1
- 定时/计数器
T0
和T1
的溢出中断 - 串行口的发送和接受中断(只占用一个中断源)
中断源 功能 INT0
外部中断0请求,由 INT0
引脚(P3.2)输入。低电平/负跳变有效,中断请求标志为IE0INT1
外部中断1请求,由 INT1
引脚(P3.3)输入。低电平/负跳变有效,中断请求标志为IE1T0
定时/计数器0溢出中断请求,中断标志位为 TF0
T1
定时/计数器1溢出中断请求,中断标志位为 TF1
RXD/TXD
串行口中断请求,中断请求标志位 TI
或RI
外部中断
从单片机外部引脚
INT0
和INT1
输入中断请求信号的中断。
外部中断的触发方式有两种电平触发IT0 =0
和跳变触发(边沿)IT0 = 1
,可以通过定时/计数器控制寄存器TCON
编程选择。7.与中断有关的特殊功能寄存器
与中断有关的特殊功能寄存器一共有4个。
- 定时/计数器控制寄存器(
TCON
)、 - 串行口控制寄存器(
SCON
)、 - 中断允许控制寄存器(
IE
)、 - 中断优先级控制寄存器(
IP
)
7.1.定时/计数器控制寄存器
TCON
作用:
- 控制定时/计数器
T0
和T1
的溢出中断 - 控制外部中断的触发方式.由
IT0
和IT1
控制 - 锁存外部中断请求标志位
位地址 位定义 功能 88H IT0 选择外部中断0的中断触发方式。由软件控制。 IT0=0为电平触发方式
。IT0=1为下降沿触发方式
89H IE0 选择外部中断1的中断触发方式。功能与 IT0
相似8AH 7.2.串行口控制寄存器
SCON
串行口的接收发送数据中断请求标志位(
RI
和TI
)位定义 功能 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=1
且ES=1
时,允许串行口中断。ET1
定时/计数器1中断允许控制位。当 ET1=0
时,屏蔽T1
的溢出中断;当EA=1且ET1=1
时,允许T1溢出中断ET0
定时/计数器0中断允许控制位。功能与 ET1
相同。EX1
外部中断1的中断允许控制位。当 EX1=0
时,屏蔽外部中断1的中断请求;当EA=1
且EX1=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响应完毕,返回执行主程序。
首先我们分析一波中断初始化函数-
两个外部中断0和1。外部中断0的服务程序为上下4灯交替闪烁,外部中断1的服务程序为8灯闪烁。即
EA = 1; EX0 = 1; EX1 = 1;
-
优先级:外部中断1 > 外部中断0 即
PX1 = 1; PX0 = 0;
-
触发方式:都为下降沿触发。即
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(); } }
仿真图
文章来源:中断系统 - 外部中断
-
操作系统——中断
2022-01-13 17:44:04中断(无嵌套和嵌套中断)操作系统是中断驱动的。计算机开机之后,导引程序会把操作系统装入内存,在完成一系列初始化之后,操作系统就处于待命状态,等待中断和系统调用(特殊的中断),所以操作系统的主体部分就是在等中断,处理中断。
一、无嵌套中断
中断系统的组成:①中断装置(硬件)②中断处理程序(软件)
1.中断装置
中断源: 引起中断的事件
中断寄存器:保存与中断事件相关信息的寄存器
中断字:中断寄存器的内容(有的中断源没有中断字,如时钟中断)
2.处理基本过程
程序正在运行时操作系统的系统栈为空,目态寄存器中(PSW,PC)是当前运行程序的运行环境。管态中,PC' 指向中断处理程序的入口地址,PSW' 是中断处理程序运行环境。
①发生时钟中断,硬件装置响应中断,②把(PSW,PC)放入系统栈,③再把(PSW' ,PC')取来放入目态寄存器里,进而④转入PC' 处理中断。处理完成之后,⑤从系统栈弹出(PSW,PC)回目态寄存器,⑥最后继续执行未完的程序。
3.中断类型与中断向量
中断向量:中断处理程序的运行环境PSW 与 入口地址PC。
中断向量的内容在OS系统初始化时就已经设置好的,放在内存系统空间的中断向量表中。
二、中断嵌套与处理过程
中断优先级:硬件依据紧迫程度或处理时间规定了中断响应次序
中断屏蔽:暂时不响应某些中断,目的在于高优先级中断事件处理不受低优先级中断打扰或调整中断响应次序。
中断嵌套:中断处理过程中响应并处理新的中断。一般新响应的优先级别更高,立即屏蔽不高于当前中断优先级的中断源。
r1 和 r0 寄存器是中断处理过程中使用的,也需要压入系统栈(保存现场环境)。
当不会出现中断时,处理中断完成后一层一层返回。
不知道对不对......
内存的系统区设置一个中断现场保存栈,中断现场信息就保存在自己的核心栈中进程会将“现场”信息保存在自己的栈空间里PCB属于系统空间,用于系统对进程管理,用户无法感知到。用户级别现场保存在用户空间堆栈
-
操作系统中的中断是什么?
2020-06-18 21:29:48为了解决上述问题,人们就发明了操作系统,引入了中断机制,实现了多道程序的并发执行,提高了系统资源的利用率。中断是多程序并发执行的前提条件。 (1) 以两个进程并发运行为例,进程1在用户态运行了一段时间后,...1 中断机制的产生
早期计算机各个程序只能串行执行、系统资源利用低。为了解决上述问题,人们就发明了操作系统,引入了中断机制,实现了多道程序的并发执行,提高了系统资源的利用率。中断是多程序并发执行的前提条件。
(1) 以两个进程并发运行为例,进程1在用户态运行了一段时间后,CPU会接收到计时部件(操作系统内核的时钟管理部件)发出的中断信号,表示进程1已经用完了一个时间片,CPU会切换到核心态,把CPU的使用权限交还给操作系统,操作系统内核就会对刚才的中断进行处理,操作系统知道进程1的时间片用完,就需要切换进程,在完成切换进程的一系列工作后,操作系统又会将CPU的使用权交还给用户进程。
(2) 接着进程2拿到CPU执行权就会在用户态下执行,进程2执行一段时间后,进程2发出系统调用(内中断信号),请求输出,主动要求操作系统介入工作,CPU会立即切换到核心态,把CPU的使用权限交还给操作系统,操作系统内核接管进程2系统调用请求,调用IO设备开始输出工作,然后操作系统交还CPU执行权,IO设备也会并行执行,进程2需要等待IO操作完成,所以进程1拿到CPU执行权开始运行。当执行一段时间后,IO操作完成,IO设备向CPU发送一个中断信号,此时CPU由用户态再次转换为核心态,对刚才的中断信号处理,由于IO操作完成,所以操作系统知道进程2可以恢复运行了,以完成后续工作,所以操作系统再次交还CPU执行权,让进程2再次运行。从上面过程可以看出:
(1) 当中断发生时,CPU立即进入核心态。
(2) 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进程处理。
(3) 对于不同的中断信号,会进行不同的处理。2 中断的本质
中断的本质:发生中断就意味着需要操作系统介入,开展管理工作。
当发生了中断,就意味着需要操作系统的介入,开展管理工作。由于操作系统的管理工作(如进程切换、分配IO设备)需要使用特权指令,因此CPU要从用户态转换为核心态。中断就可以使CPU从用户态转换为核心态,使操作系统获得计算机的控制权。因此,有了中断,才能实现多道程序并发执行。
用户态到核心态的转换就是通过中断机制实现的,并且中断是唯一途径。
核心态到用户态的切换时通过执行一个特权指令,将程序状态字(PSW)标志位设置为用户态。3 中断的分类
中断可以分为:内中断和外中断。
- 内中断:内中断的信号来源于CPU内部、与当前执行的指令有关。如整数除0。
- 外中断:外中断的信号来源于CPU外部、与当前执行的指令无关。如用户强制结束一个进程、IO设备完成操作发生的中断信号。
4 中断的处理过程
(1) 执行完每个指令后,CPU都要检查当前是否有外部中断信号。
(2) 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW、程序计数器、各种通用寄存器)。
(3) 根据中断信号类型转入相应的中断处理程序。
(4) 恢复进程的CPU环境并退出中断,返回原进程继续往下执行。
-
51单片机的中断系统
2022-01-15 21:54:49中断系统 -
MCS-51的中断系统
2020-06-05 09:43:03MCS-51单片机内的中断系统主要用于实时测控,即要求单片机能及时地响应和处理单片机外部或内部事件所提出的中断请求。由于这些中断请求都时随机发出的,如果采用定时查询方式来处理这些中断请求,则单片机的工作效率... -
单片机的中断系统(一)
2018-12-01 20:33:41今天,就要会一会这中断系统。 图片和文字内容来自:普中科技的ppt,百度文库,《操作系统》,《组成原理》我整理整理。 先不谈中断,先看看cpu可以如何处理输入输出。比如,现在我的键盘在输入,试问cpu如何... -
80C51的中断系统
2020-09-03 19:52:2980C51的中断系统 1.1 80C51的中断系统结构 一、中断的概念 CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务)。 待CPU... -
操作系统的中断机制是怎么一回事呢?
2020-01-11 18:04:33中断机制是操作系统中极为重要的一个部分。操作系统在管理输入输出设备时,在处理外部的各种事件时,都需要通过中断机制进行处理。所以也有人把操作系统称为是由...在本节中,首先介绍中断的概念,然后叙述中断系统... -
【计算机组成原理】CPU中断系统
2022-02-07 12:51:08一、中断系统概述 1、引起中断的各种因素 (1)人为设置的中断 这种中断一般称为自愿中断,因为它是程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理。 (2)程序性事故 如... -
STM32系统嘀嗒定时器实现1ms中断事件
2021-03-19 16:09:02滴答定时器中断 -
操作系统--中断与系统调用
2020-11-04 19:37:37操作系统--中断与系统调用 1.中断 1-1.中断的概念 指处理器停止当前运行的程序,转而处理新的程序。新程序处理结束后,回来继续处理原来被停止的程序。 1-2.中断的作用 提高计算机的运行效率 因为协调... -
中断实现的基本原理
2018-08-14 19:23:31中断之原理篇 前言: 中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。 在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使的CPU纠结在某一个IO上,一直在等待它的... -
中断优先级
2021-07-25 04:32:43为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪... -
STM32 中断原理及外部中断的实现
2021-01-18 15:39:09STM32使用了其中一部分,16个内核中断,107系列有68个可屏蔽中断(103系列只有60个),16级可编程的中断优先级。 中断寄存器: ISER[8],Interrupt Set-Enable Registers,中断使能寄存器组,用8个32位寄存器控制... -
51单片机中断系统
2018-12-11 20:04:08中断定义 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续... -
MCS-51单片机的中断系统
2020-10-19 14:07:26一、基本概念 (一)中断的概念 中断是通过硬件来改变CPU的运行方向的。当CPU正在执行主程序的时,外部或内部发生的...1.分时操作:单片机有了中断功能,使CPU与外设由串行工作变成分时并行工作,实现了CPU和外设的同步 -
51单片机的中断系统详解
2020-11-19 21:28:30单片机的中断系统 概念 中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理。 中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B。 中断返回:将事件B处理完毕后,回到事件A被中断的地方... -
有了Systick中断为什么还要PendSV中断?
2021-06-10 22:23:55看过Cortex-m3/m4操作系统RTOS内核代码的伙伴们都知道,OS中的任务调度实现方式如下: 1、开启SysTick中断,也就是系统滴答定时器中断。然后在SysTick中断中触发PendSV中断,实际的任务切换是在PendSV的中断服务函数... -
系统调用和中断处理的异同
2020-08-11 16:22:54Linux系统下MIPS体系结构为例。 1 trap_init(void) /* 系统初始化.../* except_vec3_generic 根据cause寄存器跳转到其若干类异常/中断处理函数中*/ 3 set_except_vector(0, rollback ? rollback_handle_int : handle_ -
操作系统普遍存在的中断详解
2020-07-13 23:22:47本篇文章是本人辛苦总结之后的成果,如果有什么不准确或者待纠正的地方欢迎广大博友指出。 废话不多说,言归正传。中断这个东西虽然我们平时可能没有意识到他的存在,但是他确实普遍存在在操作系统中,并且在操作... -
单片机(AT89C51)中断系统详解和中断系统应用实验
2020-04-07 20:06:02单片机中断系统 什么叫做单片机的中断? CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。 为什么要设置中断? ⑴ 提高CPU... -
89C51单片机中的中断系统
2018-12-01 12:44:2089C51单片机中的中断系统 对于在单片机中的学习,中断系统是一难点,如果中断系统没有理解透彻,51单片机的学习就算是失败的。 首先,举例说明下什么是中断。 eg.当你在家正在吃着爆米花,看着电视,突然门铃响了... -
操作系统-中断机制
2020-05-28 22:13:23中断机制 中断机制是操作系统中极为重要的一个部分。...在本节中,首先介绍中断的概念,然后叙述中断系统的工作原理,最后分析中断处理的过程。 中断和异常 最早中断和异常并没有区分,都把它们叫作中断。随着它们的发 -
51单片机中断系统的原理和运用
2020-05-02 23:31:00QX-MCS51开发板上使用的是DIP封装(双列直插式)有40只引脚! 40只引脚按其功能来分,有三类 一、电源和时钟引脚:Vcc、Vss;XTAL1、XTAL2 **电源引脚接入单片机工作电源** Vcc(40脚):接+5V电源; Vss ( 20脚 ) ... -
89c51中断系统及中断控制
2018-06-23 23:29:10现代的计算机都具有实时处理功能,当外界有突发事件时,cpu能够及时的做出处理,这就是靠中断来实现的。 当CPU正在处理某一命令时,这时外部发生了某一事件(如电平的变化,或者定时器/计数器溢出时)请求CPU去处理... -
详解操作系统中断
2018-05-08 11:49:42但是要真正把中断描述清楚,以及LInux中和windows中的实现方式,这可能还是有点难度的。今天笔者就想彻头彻尾的把中断给详细分析下。 说到中断还不得不从现代操作系统的特性说起,无论是桌面PC操作系统还是... -
8086中断系统简答
2019-11-30 19:06:08中断系统应该具备什么功能? CPU暂停执行现行程序,转而处理随机事件,处理完毕后再返回中断的程序,这以过程称为中断。 能够引发CPU中断的信息源,称为中断源。 中断系统应具备以下功能: 为了加强中断系统的灵活...