51单片机中断基本概念
问题引入
在了解基本概念之前,先看三个问题:
1.你想使用的中断是哪个?
2.你所希望的触发条件是什么?
3.你希望在中断之后做什么?
可以边看边思考,文章最后给出答案
中断概念
为什么引入中断?
中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。
中断系统特点:
①分时操作。CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率;
②实时响应。CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强;
③可靠性高。CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高中断过程
对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生或中断请求);CPU暂时停止当前的工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。这一过程称为中断,注意是整个过程,而不是单一的停止一件事的意思。举例:你打开火,烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。
对照图:
程序流程图
单片机在执行程序时,中断也随时有可能发生,但无论何时发生,只要一旦发生,单片机将立即暂停当前程序,赶去处理中断程序,处理完中断程序后再返回刚才暂停处接着执行原来的程序。
- 中断系统:实现中断过程
- 中断源:请示CPU中断的请求源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求。
- 中断嵌套:当单片机正在执行中断请求时,又出现了一个比正在执行的优先级更高的中断请求,则先停止正在执行的中断请求,执行优先级高的中断请求,等执行完后再执行原来优先级较低的中断请求。
拥有中断嵌套的中断系统称为多级中断系统,没有嵌套功能的为单级中断系统。
中断结构
- 大多数单片机共提供8个中断请求源,但是一定有最基本的5个中断。
- 中断:
外部中断0(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定时器 0中断、定时器 1 中断、定时器 2 中断、串口(UART)中断。 - 基本中断:
INT0、INT1、定时器 0,定时器1,串口中断。 - 中断请求标志位TCON
IT0(TCON.0),外部中断 0 触发方式控制位。
当 IT0=0 时,为电平触发方式。
当 IT0=1 时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断 0 中断请求标志位。
IT1(TCON.2),外部中断 1 触发方式控制位。
IE1(TCON.3),外部中断 1 中断请求标志位。
TF0(TCON.5),定时/计数器 T0 溢出中断请求标志位。
TF1(TCON.7),定时/计数器 T1 溢出中断请求标志位。
注:外部中断0和1(IT0和IT1)为0或1时是两种触发方式,低电平触发和边沿触发,是控制位不是标志位。
- 中断允许控制
CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE 控制的。
各中断的中断允许位:
EX0(IE.0),外部中断 0 允许位;
ET0(IE.1),定时/计数器 T0 中断允许位;
EX1(IE.2),外部中断 1允许位;
ET1(IE.3),定时/计数器 T1 中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU 中断允许(总允许)位。
注意:总中断允许位就是是总开关一样,只有总允许位有效的前提下,其它中断置允许位才能使中断有效。 - 中断优先级
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
中断优先级三条原则:
- 首先响应高优先级的中断请求。
2.高优先级的中断请求可以打断低优先级的中断。
3.低优先级的中断请求不可以打断高优
先级及同优先级的中断。
中断号
中断号在编程时非常重要,当中断来临时,只有中断号正确才能进入中断。
中断响应条件
①中断源有中断请求;
②此中断源的中断允许位为 1;
③CPU 开中断(总允许位)(即 EA=1)。
以上三条同时满足时,CPU 才有可能响应中断
如图,为中断内部结构框图:
TCON为中断请求标志,其中外部中断0和外部中断1可选择控制方式低电平有效还是下降沿有效。
,IE为中断允许位,可以看到,只有EA等于1时,其他中断允许才可能有效。
从图中可以看出,一个中断过程:中断位(确定哪一个中断)->中断标志位->中断允许位->中断总允许位->中断执行功能。问题引入及解答(中断应用举例)
回到上面的三个问题
1.你想使用的中断是哪个?
每一个中断都对应一个中断号,要想使用某一中断就选择对应的中断号。
2.你所希望的触发条件是什么?
外部中断的触发调件触发条件可分为低电平触发和下降沿触发,要明确触发条件。
3.你希望在中断之后做什么?
即中断服务函数,函数里要做什么,执行什么样的功能。
以外部中断0为例:
EA=1;//打开总中断开关
EX0=1;//开外部中断 0
IT0=0/1;//设置外部中断的触发方式/*中断服务函数*/
void int0() interrupt 0 using 1//intterrupt表示中断,0表示中断号,using1可省略
{
//编写用户所需的功能代码
}
51单片机中断基本概念相关推荐
- 51单片机 | 中断系统概念及结构
-------------------------------------------- 中断的过程: 对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生 ...
- 单片机c语言reti的用法,基于51单片机中断跳出指令“RETI”浅议
原标题:基于51单片机中断跳出指令"RETI"浅议 =RET指令+通知CPU中断服务已结束. 最近在基于编程的过程中出现了个很奇怪的问题"程序执行中在寄存器EA=1,ET ...
- 51单片机 | 中断系统
文章目录 一.中断介绍 1.中断概念 二.中断结构及相关寄存器 1.中断结构 2.中断相关寄存器 这一节专门介绍 51单片机的中断系统,为后面学习外部中断.定时器中断.串口中断做好铺垫. 一.中断 ...
- 51单片机中断interrupt……using……
51单片机中断细节的一些问题. interrupt0:外部中断0 interrupt1:定时器中断0 interrupt2:外部中断 interrupt3:定时器中断1 interrupt4:串口 u ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h> void main(void) { EA=1; //开放总中断 ...
- 用51单片机中断控制LED灯亮灭
用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...
- c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知 来源:山涧一溪流 点击数:- 更新时间:2014年06 ...
- 51单片机中断与计时器
文章目录 1.配置下图中各寄存器 1. 定时器/计数器控制寄存器TCON 2.定时器.计数器模式控制寄存器TMOD 3.TH0及TL0 2.中断设置 二.中断程序 51单片机中断与计时器 # 一.定时 ...
- 51单片机中断系统实验
51单片机中断系统实验 一.实验内容 INT0端接单次脉冲发生器.按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转. 根据实验内容编写一个程序,并在实验系统 ...
最新文章
- 《JAVA练习题目2》 输入十个学生的考试成绩,将及格学生的成绩从高到低排序输出。
- linux c 删除 文件 第一行
- [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目
- numpy 笔记:改变形态
- seata 如何开启tcc事物_如何能在实战中完成分布式事务?知道这些点很重要
- 【网址收藏】podman安装及使用简单介绍
- IntelliJ IDEA 15快捷键大全
- sysbench压测服务器及结果解读(重点)
- c语言无符号中符号什么意思,C语言中无符号与有符号及相加问题
- vue计算属性computed与监听属性watch的基本使用
- (一)Rational Rose 2007 下载安装
- python FastDFS
- javacript 字典
- oracle disk missing,oracle asm disk被格式化为ntfs文件系统
- linux 所有文件大小排序,linux 根据文件大小排序
- java 做图片模糊处理
- 如何让全屏游戏的文本编辑框支持IME和TSF输入法
- createFont(STSong-Light, UniGB-UCS2-H,BaseFont.NOT_EMBEDDED);
- Junit单元测试报错Class not found可能原因
- python实现微信聊天机器人