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单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...
随机推荐
- Docker 下 mysql 简单的 主从复制实现
1. 拉取镜像 docker pull mysql: 2. 运行这个镜像 docker run -d --name maser mysql: 3. 安装一些必要的软件 docker exec -it ...
- 原理分析dubbo分布式应用中使用zipkin做链路追踪
zipkin是什么 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开 ...
- 【BZOJ1056】[HAOI2008]排名系统(Splay)
[BZOJ1056][HAOI2008]排名系统(Splay) 题面 BZOJ 洛谷 题解 \(Splay\)随便维护一下就好了,至于名字什么的,我懒得手写哈希表了,直接哈希之后拿\(map\)压. ...
- root和alias的区别
先来看看官方说明: root 的用法: location /request_path/image/ { root /local_path/; } 当客户端请求 /request_path/image/ ...
- 【CF706D】Vasiliy's Multiset Trie+贪心
题目大意:需要维护一种数据结构,支持以下三种操作:插入一个数,删除一个数,查询该数据结构中的数异或给定数的最大值. 题解:如果没有删除操作就是一个标准的 Trie 上贪心求最大异或和问题.现在需要支持 ...
- windows2008设置IIS服务器定时自动重启的方法
我们在使用windows2008下IIS服务器时会经常出现资源耗尽的现象,运行一段时间下来就会出现访问服务器上的网站时提示数据库连接出错,重启IIS后网站又能正常访问了,这个问题可能困扰了很多站长朋友 ...
- 集合框架基础知识-----java基础知识
Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...
- 常见HTTP状态码(200、301、302、500等)解说
对网站管理工作者来说有个词不陌生,HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码.状态码的第一个数字代表了响应的五种状态之一. 1XX系列:指定客户端应相应的某些动作,代表请求已 ...
- git 查看一个分支是否被合并过
1.查看该分支的提交历史 git log 分支名 2.git log master |grep comitid 如果包含,就证明已经合并过 3.git branch -d 分支名,如果报错,就是没合并 ...
- scala 基础知识总结
在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...