这一小节写一些有关中断的知识。

51的中断其实相对简单,优先级的设置也没那么灵活。主要是要搞懂那几个寄存器的作用以及怎么去配置它们。

中断

先讲一下什么是中断。所谓的中断就是 打断现在正在做的A事件去做B事件,干完B事件回到A事件继续执行。

打断 ----标记-----响应------回去

打断 :打断现在正在做的A事件。

标记:记录当前位置,以便后面能回到这了继续执行。

响应:去做B事件。

回去:做完B事件回到标记处继续执行A。

中断优先级

然后讲一下一个特殊情况,万一当我打断A去执行B事件的时候有一个更高优先级的C事件要响应怎么办呢?

这就是中断的嵌套了。

只有高优先级的中断才能打断低优先级的中断。

从上面的例子可以看出配置中断的其中一步就是配置中断优先级。

在讲优先级之前先讲一下51单片机的5个中断源。

INT0(P3.2)外部中断0

INT1(P3.3)外部中断1

T0 (计数器0溢出)    定时器中断0

T1(计数器1溢出)     定时器中断1

串口中断(发送接收)

配置中断优先级主要是配置IP中断优先级寄存器

51的优先级只有两种 ,高和低。

当在对应为置一的时候该中断则为高优先级。如在IP寄存器中的PT1=1,则将定时器1中断配置为高优先级。 在IP寄存器中的PT0=0,则将定时器0中断配置为低优先级。 那么这样就会出现一种情况,优先级一样的中断源如果同时来到怎么办 ?例如:PT1=1 同时  PX1=1 ,当定时器1中断和外部中断同时来到先执行谁?

对于相同优先级的中断要通过查询电路确定查询顺序。

也就是优先级相同的按默认的顺序来排高低。由高到低为INT0;----T0;---INT1;----T1-----;串行口

所以设置了PT1=1   PX1=1后按照查询顺序 外部中断1要高于定时器1。

中断源使能开关

即中断允许寄存器IE

7 6 5 4 3 2 1 0
EA ES ET1 EX1 ET0 EX0

EA:总开关。(剩下的5个为分开关)

EX0:外部中断0开关

ET0:定时器0中断开关

EX1:外部中断1开关

ET1:定时器1中断开关

ES:串行口中断开关

中断源标志位

就是当某中断产生后该寄存器会在对应位置上置一,打上标志,记录状态。后面编程的时候就可以利用 这些标志位辅助实现动作。(总之一句话,这些标志位很有用,至于怎么用,到讲程序的时候再讲)。

提醒:在TCON寄存器的IT0 ,IT1并不是标志位。他是外部中断的方式选择位。=1   ----下降沿触发方式;=0   ----低电平触发方式;

------------------------------------基础部分结束---------------------------------------------------------------------------

接下来的就需要结合程序来讲。主要是编程时的框架是怎么样的。

ORG 0000H
JMP MAIN                    ;标准开头
/************************************************************/ORG 000BH                    ;定时器0中断服务程序入口地址
LJMP T0IT                    ;中断服务程序
ORG 0200H
/***********************************************************/
INIT_T0:                        ;(子函数)对定时器0的初始化 ,暂时不用看懂,下一小节讲定时器的时候再讲MOV TMOD, #01HMOV TL0,#0AFHMOV TH0,#3CHSETB EASETB ET0MOV R0,#20RET
/***************************************************************/MAIN :ACALL INIT_T0                ;初始化一下JMP $                        ;主程序停在这,等待中断的发生。/**************************************************************/
T0IT:                         ;定时器0中断服务函数  暂时也不用看懂。MOV TL0,#0AFHMOV TH0,#3CHDEC R0MOV A,R0JZ ONE      LJMP CHUONE:MOV R0,#20MOV R1,#01HDEC R4MOV A,R4JZ STOPLJMP CHUSTOP:      CLR TR0CHU:  RETI             ;注意中断函数的返回是用RETI  不是RET

讲一下中断实现的过程。首先先对要开启的中断源进行初始化,当中断产生后主函数会被打断,去响应中断,体现为程序会跳到中断服务程序入口地址去执行中断函数。

外部中断0:入口:0003H

定时器0: 入口:000BH

外中断1: 入口:0013H

定时器1: 入口:001BH

串口中断:入口:0023H

这些地址是固定的。但你会发现单片机分配给每一种中断程序的空间很小。(000B-0003=8)

所以可以通过LJMP跳转指令,让中断函数的大小不受这个空间的限制。

执行完中断函数后,返回。记住是用RETI 伪指令进行返回,而不是RET .

这一小节只是要了解中断的写法,框架,整体流程以及那4个寄存器即可。具体初始化的写法和中断服务函数的写法下节讲。

------------------------------结束------------------------------------------------------------------------------------------

51单片机汇编学习笔记8——中断相关推荐

  1. 51单片机汇编学习笔记9——定时计数器

    这一小节介绍一下51单片机的一个重要外设定时计数器. 顾名思义定时计数器主要是两种功能:定时.计数. 定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序. 计数:主 ...

  2. 51单片机汇编学习笔记4——子函数

    这一小节讲一下子函数的编写格式和调用. 子函数的调用 先讲一下子函数的格式 以之前讲到的延时函数为例 :延时函数 DELAYS :MOV R1,#0FFH ;往R1寄存器中放入一个数(立即寻址)0ff ...

  3. 51单片机汇编学习笔记6——IO口输入

    这一小节讲一下IO口的输入. 输出是 直接对P1口赋值. 输入本质上是读取引脚的状态,被拉高还是被拉低.(这里暂不涉及模拟量的输入) IO口的输入 核心指令 JB JNB JB bit rel 例如: ...

  4. 51单片机汇编学习(一)点亮你的LED灯

    本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...

  5. 51单片机汇编学习例程(9)——ADC0809篇

    ASM9_ADC0808:    ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...

  6. 江科大51单片机入门学习笔记合集

    文章目录 软件下载 介绍 STC89C52RC 命名规则 芯片介绍 开发板介绍 逻辑运算 C语言语法 函数在C语言基础上做的拓展 重入函数 中断函数 外部函数 sfr sbit 51单片机最小系统组成 ...

  7. 51单片机入门学习笔记(上)

    笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...

  8. 51单片机汇编学习10——串口通讯

    这一小节写一下串口通讯. 建议先去了解一下什么串行通讯. 推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili 因为串口通讯涉及的寄存器相对较多.所以尽量要自己去看看S ...

  9. 51单片机汇编学习11——扩展原理与接口技术

    终于到这一小节了.这一节讲扩展原理与接口技术. 那么什么是扩展原理&接口技术呢?其实主要是3种. 1.扩展一个程序存储器 2.扩展一个数据存储器 3.扩展IO口 1.扩展程序存储器 其实这个扩 ...

  10. 51单片机汇编学习例程(7)——74HC595数码管篇

    7.ASM7_Seg_595:    74HC595控制数码管静态显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** **************************** ...

最新文章

  1. android 牛人必修 ant 编译android工程
  2. R语言文本挖掘NASA数据网络分析,tf-idf和主题建模
  3. Cannot load onnxruntime.capi. Error: DLL load failed: 找不到指定的模块
  4. 缓冲区 cin() getline() getchar()
  5. 产品生涯,十大好用但不为人知的APP
  6. Android:如何生成自己的keystore(zz)
  7. 为自己配置YUM服务器
  8. dnn神经网络_机器学习-浅谈神经网络和Keras的应用
  9. redhat enterprise linux 5 上安装openoffice3.0 1
  10. 中海达数据怎么转rinex_hds2003下载-中海达HDS2003数据处理软件下载20120530 官方版-中海达GPS数据转RINEX格式西西软件下载...
  11. Java虚拟机专题之类加载机制
  12. SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题
  13. 企业管理培训PPT模板
  14. 【裴礼文数学分析】例1.1.4
  15. 手把手带你爬天猫,获取杜蕾斯评论数据
  16. CV7 颜色追踪和图像阈值
  17. “智数据,创未来”——2018中国存储与数据峰会在京盛大举行
  18. React的Render的简单实现
  19. HDU2066:一个人的旅行(spfa)
  20. English Learning - Day23 作业打卡 2022.12.29 周四

热门文章

  1. html中的特殊符号表示法
  2. Latex下划线问题
  3. 大师级思考者是怎么探索事物本质的?
  4. 【HTML+CSS+JS】模仿QQ登录界面
  5. 在入口文件main.js引入styl报错,不断修改后运行正常了
  6. 最小二乘法原理-线性回归
  7. 开源资产管理软件OCS Inventory 实践
  8. 新创建了用户没有计算机图标,w10我的电脑图标没了怎么办
  9. scrapy 使用无忧代理IP 需要填写无忧代理IP提供的API订单号(请到用户中心获取) 这个是要钱吗??...
  10. Google 开源的前端项目