MCS-51 单片机的中断系统
MCS-51 单片机的中断系统
MCS-51中断系统:5个中断源(两个外部中断, 两个定时器, 一个串口),2个优先级
中断相关概念
中断:当CPU正在处理某件事情时,单片机外部或内部发生的某一紧急事件请求CPU立即去处理,于是,CPU暂时中止当前的工作,转去处理这个紧急事件,待处理完毕后,再回到原来被中止的地方,继续原来的工作。
中断过程
中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理;
中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B(B的优先级要高于A);
中断返回:待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A ;
中断源(中断请求源):能够向CPU发出中断申请的部件。
中断系统结构
中断编号 | 中断名 | 中断源 | 引脚 | 入口地址 |
---|---|---|---|---|
0 | 外部中断请求0(INT0 ) | IE0 | P3.2 | 0003H |
1 | 定时器T0溢出中断请求 | TF0 | P3.4 | 000BH |
2 | 外部中断请求1(INT0 ) | IE1 | P3.3 | 0013H |
3 | 定时器T1溢出中断请求 | TF1 | P3.5 | 001BH |
4 | 串行口中断请求 | TI或RI | 发送P3.0 接收P3.1 | 0023H |
外部中断0和1:低电平或者脉冲下降沿时产生中断请求;
定时器/计数器0和1:计数值由FF变为00时产生中断请求;(定时功能:计数脉冲来源于片内;计数功能:计数脉冲来源于片外);
串行口:发送或者接受1字节数据时产生中断请求;
中断控制
4个特殊功能寄存器来实施中断控制:
- 中断允许寄存器 IE
- 中断优先级寄存器 IP
- 定时/计数器及外部中断控制寄存器 TCON
- 串口控制寄存器 SCON
中断允许寄存器 IE
EA 中断允许总控制位。0禁止,1允许。
ES 串行中断允许控制位。0禁止,1允许。
ET1 定时计数器1中断允许控制位。0禁止,1允许。
EX1 外部中断1允许控制位。0禁止,1允许。
ET0 定时计数器0中断允许控制位。0禁止,1允许。
EX0 外部中断0允许控制位。0禁止,1允许。
中断优先级寄存器 IP
PX0 外部中断0的优先级控制位。1为高,0为低
PT0 定时中断0的优先级控制位。1为高,0为低
PX1 外部中断1的优先级控制位。1为高,0为低
PT1 定时中断0的优先级控制位。1为高,0为低
PS 串行中断的优先级控制位。1为高,0为低
串行口控制寄存器 SCON
TI:串口发送中断标志,响应中断时用软件将TI标志清零
RI:串口接收中断标志,响应中断时用软件将RI标志清零
定时/计数器的控制寄存器 TCON
外部中断触发方式位 IT0、IT1(ITx)
ITx = 0 低电平触发,响应中断后IEx不自动清0
ITx = 1 脉冲下降沿触发,响应中断后IEx自动清0
外部中断请求0/1的中断请求标志位IE0、IE1
定时器/计数器T0/T1的溢出中断请求标志位TF0/TF1(TFx)
启动T0/T1计数后,从初值加1计数,直到最高位产生溢出时,硬件将TFx置“1”,向CPU请求中断。 响应中断后TFx自动清0;
TR0,TR1与中断无关,仅与定时器/计数器T0/T1有关;
中断响应
中断响应就是CPU对中断源发出的中断请求做出的响应。
中断响应条件
CPU开中断,即中断允许寄存器IE中的中断允许总控制位EA = 1;
中断源发出中断请求;
中断源的中断允许位为1;
没有同级或者高级的优先级中断正在执行;
中断响应的过程
由硬件根据中断源的类型自动生成一条长调用指令LCALL addr16。
CPU执行LCALL addr16。
中断响应的时间
响应时间在3~8个机器周期之内;
最短响应时间:查询中断请求标志位(T)+LCALL(2T);
中断响应的过程
将相应优先级状态触发器置1(阻断后来同级或低级中断 )
执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC)
执行中断服务程序
PS:编写中断服务程序注意:中断服务程序入口存放指令LJMP或AJMP;现场保护与现场恢复。
中断返回
最后指令为RETI,功能为:
将断点从堆栈弹送PC,CPU从原断点继续执行
将相应优先级状态触发器清0,恢复原来工作状态
8051中断程序设计
中断服务程序基本流程
1. 关中断:为了防止此时有高一级的中断进入,以免现场保护的执行过程被中断。
2. 现场保护:所谓现场是指中断时刻单片机中某些寄存器和存储器单元中的数据或状态。为了不让中断服务程序的执行破坏这数据或状态,以免中断返回后影响主程序的运行,需要将他们送入堆栈保存起来。
3. 开中断:为了允许有更高级的中断进入。这样一来,除了现场保护和现场恢复外,中断处理的过程仍允许中断嵌套的功能。
4. 中断处理
5. 关中断:为了防止此时有高一级的中断进入,以免现场恢复的执行过程被中断。
6. 现场恢复:中断处理结束后,在返回主程序前,把保存的现场的内容从堆栈中弹出,以恢复那些寄存器和存储单元中的原有内容
7. 开中断:为了允许有更高级的中断进入。现场恢复后,仍允许中断嵌套的功能。
8. 中断返回:必须是返回指令RETI。CPU执行完这条指令后,把响应中断时所置“1”的优先级状态触发器清“0”,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器PC,弹出的第一个字节送入PCH,第二个字节送入PCL,CPU从断点处重新执行被中断的主程序。
实例
```
ORG 0000H ;程序开始
LJMP START ;= LJMP 1000H
ORG 0003H ;外部中断0入口地址
LJMP INT
ORG 1000H ;主程序入口
START: MOV P1, #0AAH ; #0AAH=10101010B
SETB EX0 ;允许外部中断0
SETB PX0 ;设置外部中断0为高优先级
SETB IT0 ;设置外部中断0为脉冲下降沿触发
SETB EA ;开中断
SJMP $ ;原地跳转,等待中断
INT: CLR EA ;关中断
PUSH PSW ;现场保护
PUSH ACC ;
SETB EA ;开中断
CPL A ;对累加器A按位取反
MOV P1, A ;累加器A值送P1端口
CLR EA ;关中断
POP ACC ;现场保护
POP PSW ;
SETB EA ;开中断
RETI ;
```
MCS-51 单片机的中断系统的更多相关文章
- 51单片机外部中断INT0实例(汇编程序)
;普中51开发板 ;单片机的P3.2(INT0)引脚与按键K3脚连接 ;用汇编语言实现:按一次K1外部中断INT0响应一次,LED显示值加1(十进制), ;前提是共阴数码LED第一位,需要设定,由P0 ...
- 基于51单片机的CAN通讯协议C语言程序
//-----------------------函数声明,变量定义-------------------------------------------------------- #includ ...
- ET 与RETI 基于51单片机中断跳出指令“RETI”浅议
最近在基于51单片机编程的过程中出现了个很奇怪的问题“程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断”.在有过单片机中断编程经历者都知道当EA=1,ET0=1的 ...
- C51单片机_day_01(定时器和中断系统)
c51单片机 51单片机是控制电路系统的开关,当然芯片就是51芯片,现在随着科技的发展,也是出了很多,功能更多,更全的芯片. 51是用c语言做为程序编程的语言 ——我对基本基础 ...
- 51单片机中断interrupt……using……
51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using ...
- c语言编写51单片机中断程序,执行过程是怎样的?
Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h> void main(void) { EA=1; //开放总中断 E ...
- 51单片机C语言学习笔记3: 存储器结构
MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...
- [学习笔记]15个QA让你快速入门51单片机开发
一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ 22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...
- 51单片机和STM32单片机区别在那里
大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...
随机推荐
- 小程序开发 绑定自定义数据data- 及JS获取
1wxml<!-- 茶系显示隐藏函数sectionSelect --><view class="img-fur" data-id="{{item.id} ...
- 通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。
通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态. 在 System.ServiceModel.Channels. ...
- angular学习总结
因为学习需要,要配置一系列环境,中间又出了很多各种各样的花式错误,因此当做个人总结记录一下.一.vs1. 完全卸载VS2013找到vs2013的安装包,如图 打开cmd命令行窗口,cd到安装包下的vs ...
- IDEA 调试技巧
转载:http://blog.csdn.net/victor_cindy1/article/details/52336983 1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断 ...
- Berland and the Shortest Paths CodeForces - 1005F(最短路树)
最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边 然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可 #include &l ...
- bzoj1047&bzoj1012
Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...
- 【agc001e】BBQ HARD(动态规划)
[agc001e]BBQ HARD(动态规划) 题面 atcoder 洛谷 题解 这些agc都是写的整场的题解,现在还是把其中一些题目单独拿出来发 这题可以说非常妙了. 我们可以把这个值看做在网格图上 ...
- Winform Treeview 排序及图标处理
一.排序 1. 继承 IComparer 2. treeView1.TreeViewNodeSorter = this; 3. 实现IComparer public int Compare(ob ...
- ASP.NET MVC项目框架快速搭建实战
MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...
- Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)
Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...