当前位置: 首页 > news >正文

(七)c52学习之旅-中断

中断,顾名思义,在系统执行任务时遇到特定事件会打断当前任务并保留当前任务而去执行其他任务。
中断在单片机开发中是不可或缺的一项,做好准备,搞定它。
(一)、中断结构
中断结构
下面是对这几个中断源的介绍:
1、INT0(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)
置1,向CPU申请中断。

2、INT1(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

3、片内定时/计数器T0溢出中断请求标志,TF0(TCON.5)。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

4、片内定时/计数器T1溢出中断请求标志,TF1(TCON.7)。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。

5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

(二)、4个特殊寄存器
分别是SCON,IE,IP,TCON。这4个中断分别控制了不同的开关。
1、SCON的中断标志
这里写图片描述
(1)RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除
(2)TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置
位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除

2、IE中断允许控制
这里写图片描述
EX0(IE.0):外部中断0允许位;
ET0(IE.1):定时/计数器T0中断允许位;
EX1(IE.2):外部中断0允许位;
ET1(IE.3):定时/计数器T1中断允许位;
ES (IE.4):串行口中断允许位;
EA (IE.7): CPU中断允许(总允许)位。

3、IP中断优先级控制
这里写图片描述
80C52单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。
PX0(IP.0):外部中断0优先级设定位;
PT0(IP.1):定时/计数器T0优先级设定位;
PX1(IP.2):外部中断0优先级设定位;
PT1(IP.3):定时/计数器T1优先级设定位;
PS (IP.4):串行口优先级设定位;
PT2(IP.5):定时/计数器T2优先级设定位。

4、控制寄存器TCON,后面的定时器再分析。

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
优先级

(三)、单片机的中断优先级有三条原则:
1、CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
3、正在进行的低优先级中断服务,能被高优先级中断请求所中断。

为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。

(四)、中断响应条件
1、中断源有中断请求;
2、此中断源的中断允许位为1;
3、CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断

(五)、一次中断过程的完整步骤
1、中断请求:中断事件一旦发生,中断源就提交中断请求(将中断
标志位置1),欲请求CPU暂时放下目前的工作转向为该中断作专项
服务。
2、中断使能:虽然中断源提交了中断请求,但是,能否得到CPU的
响应,还要取决于该中断请求能否通过若干关卡送达CPU(中断使能
位等于1,关卡放行),这些关卡有以下两类:
此中断源的中断允许位;
全局中断允许位。
3、中断响应:如果一路放行,则CPU响应该中断请求,记录断点,
跳转到中断服务程序。对于INT和TMR中断,中断响应时中断标志位
会被硬件自动清零。
4、中断处理:对中断源进行有针对性的服务。
5、中断返回:返回到主程序断点处,继续执行主程序。
1、3、5由硬件自动完成。2、4是用户编程完成

(六)、中断请求标记的置位和清除
1、外部中断
下降沿触发方式条件下,在产生中断请求时由硬件置位(置1)中
断请求标记,当CPU响应中断时由硬件清除(清0 )
电平触发方式条件下,中断请求标记由外部中断源控制。具体
是:当CPU检测到INT引脚上出现低电平时,中断标志IE由硬件置
位,INT引脚上出现高电平时,中断标志IE由硬件清除

2、定时器中断
计数溢出时由硬件置位中断请求标记,当CPU响应中断由硬件清

3、串口中断
串行口接收完一帧数据后请求中断,由硬件置位中断请求标记
RI,RI必须由软件清除
串行口发送完一帧数据后请求中断,由硬件置位中断请求标记
TI,TI必须由软件清除

(七)、中断使能位
每个中断源的3个位:
1、PXn:(Priority)外部中断优先级定义位。
• =0:低优先级; =1:高优先级;
• 也可不设置,上电时,默认=0:低优先级。
2、EXn:外部中断使能位。
• =0:使不能; =1:使能;
• 上电时,默认=0:使不能
3、IEn:外部中断请求标记位。
• =0:无中断请求; =1:有中断请求;
• 上电时,默认=0:无中断请求。
所有中断源相关的1个位:
EA (Enable All) :全局中断使能位。
• =0:使不能; =1:使能;
• 上电时,默认=0:使不能
INT中断多了1个需要设置的位:
ITn(INT Trigger)外部中断触发方式控制位。
• =0:电平触发方式; =1:下降沿触发方式
• 也可不设置,上电时,默认=0:电平触发方式

(八)、中断号
1、外部中断0(INT0),中断号0, 中断入口地址0003H
2、定时/计数器0(T1),中断号1 ,中断入口地址000BH
3、外部中断1(INT1),中断号2 入口地址0013H
4、定时/计数器1(T1)中断号3 入口地址001BH
5、串行口中(RI/TI)中断号4 入口地址0023H
上面是C51的5个中断源,下面是C52多出来的一个中断源
6、定时/计数器2(T2)中断号5,入口地址002BH

定义中断函数的一般形式:
viod 函数名() interrupt n //n是中断号

使用中断函数时应遵循以下规则:
1、 中断函数不能进行参数转递;
2、在任何情况下,都不能直接调用中断函数。

相关文章:

  • (八)c52学习之旅-中断实验
  • (九)c52学习之旅-定时器
  • (十)c52学习之旅-定时器实验
  • (十一)c52学习之旅-动态数码管
  • linux屏幕亮度调节解决办法
  • 一、系统准备工作
  • 二、CUDA安装和测试
  • 三、安装Anaconda实验平台
  • 3.1安装配置Anaconda
  • 3.2使用conda安装theano环境
  • 四、安装cuDNN,caffe和openCV
  • 测试Theano使用GPU并行计算,以验证环境搭建是否成功
  • 安装cuda的错误解决办法
  • Anaconda 安装编译pycaffe
  • 服务器(多GPU)caffe安装和编译
  • exif信息对照
  • idea + plantuml 画流程图
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • vue 配置sass、scss全局变量
  • 创建一种深思熟虑的文化
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 工程优化暨babel升级小记
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 免费小说阅读小程序
  • 前端存储 - localStorage
  • 前端路由实现-history
  • 前嗅ForeSpider采集配置界面介绍
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 数组大概知多少
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一些关于Rust在2019年的思考
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Python) SOAP Web Service (HTTP POST)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET6 命令行启动及发布单个Exe文件
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET正则基础之——正则委托
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • /var/spool/postfix/maildrop 下有大量文件
  • []串口通信 零星笔记
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [C语言]一维数组二维数组的大小