自学内容网 自学内容网

零基础学习8051单片机(十六)

继续学习8051单片机,本次通过观看视频在此学习8051单片机的中断系统

要掌握单片机中断系统的硬件结构和工作原理

掌握:中断系统的初始化编程以及中断服务子程序设计。

一、中断的基本过程图:

 

中断的响应和处理过程:

当中断提出中断请求的时候,要打断正常执行的主程序,那么正在执行的这条指令的下一条指令的地址,要压到堆栈里面去,当执行完中断服务程序时,断点地址在弹出来,就继续执行主程序

实时监测没有中断实现不了

二、中断系统结构

 注:这些位都可以用位指令来将其置1或者清0,用软件人为的置1,就是人为制造1个中断源

当人为制造中断源是,两个定时器的中断请求标志位是自动清的,串行口是用软件清0,对于外中断是响应之后,自动清的

(1 INT0*——外部中断请求0,中断请求信号由INT0*引脚输入,请求标志为IE0

2 INT1*——外部中断请求1,中断请求信号由INT1*引脚输入,请求标志为IE1

3定时器/计数器T0计数溢出发出的中断请求,请求标志为TF0

4定时器/计数器T1计数溢出发出的中断请求,请求标志为TF1

5串行口中断请求,请求标志为发送中断TI或接收中断RI

外中断的触发方式有两种:

1.电平触发——低电平有效,高电平不会发出中断请求,低电平发出中断请求

2.跳沿触发——外设加到引脚上,成为负跳变,就等于发出了一个中断请求,负跳变有效

注:一个中断源的中断响应还要看是否允许它:EX0是控制外部中断零是否允许外部中断零申请中断的控制位

定时器的触发:当定时器/计数器计满的时候,就会把中断请求标志置为1

串口中断有两种:接受和发送,他们共用一个中断入口

注:中断中的每一位都是特殊功能寄存器中的某一个,可以用指令对其置1或清0,当单片机复位的时候,相应的这几个位都为0,

EA是总的中断允许位,EA写0开关断开,EA写1开关闭合此时允许CPU开中断至于到底要那一位中断,还要看5个中断源的5个标志位

注意:一个中断源是否允许中断,要看对应的中断标志位,都是特殊功能寄存器中的某一位,都可以用软件置为1或清0,IE中断允许寄存器,IP中断优先级寄存器,如果让他为高优先级则置为1

三、特殊功能寄存器

注:串行口发送或接受数据是以帧为单位的,这一帧信息发完之后,发送中断有效,然后进入中断服务程序,把下一次要发的哪一个字节数据送到发送缓冲器,同理还有一个接受中断,当接受完的信息在接受缓冲器里面,单片机CPU应当把接受缓冲器里面的信息读走,所以他有接受中断和发送中断两个标志位

要弄明白TCON、SCON各位的含义

注:使用字节指令编程需要对内部寄存器各位的含义非常的熟悉 

这两个不可寻址的优先级 激活触发器,不能用指令进行置1或者清0,这两个触发器代表中断系统在执行某一个中断的时候来告诉用户,它是高优先级中断还是低优先级,它实际上代表执行当前中断的优先级别

 注:用字节指令需要对硬件特别熟悉

注:同级不能打断同级,低级不能打断高级 

注:

若为同一级别的中断请求,则按照单片机内部顺序进行执行,若用软件设置为高优先级或低优先级,则优先按照软件设定的优先级执行

这个中断入口是程序存储器的地址,当单片机复位的时候程序指针指向0000H,0000H、0001H、0002H这三个空闲单元,正好放一条长跳转指令,跳向主程序MAIN,所以编程时:

                ORG  0000H

                LJMP  MAIN

下一个单元就是0003H,

主程序一般放在之后的某个位置可以写:ORG  XXXXH

注:一个中断请求能够被响应必须满足4个条件,4个必要条件满足,也不一定响应,原因在于上面可能出现的三种情况 

注:

当外设有中断请求的时候,向外中断输入引脚发一个低电平信号即可

51单片机这个CPU在每个机器周期实际上都在简则外中断输入引脚,只要是低电平当时就可以检测到,当处理完中断后发出中断的低电平一定要撤销,否则会再次中断

 注:这个机器周期检测外中断输入线是高电平,下一个周期在检测它为低电平,说明中间发生了一个负跳沿,这时用软件设置为挑眼触发就说明有中断请求,跳沿触发适合以负脉冲的形式来发送中断请求的外设,如最常见的AD转换器

 注:当中断相应完之后,一定要把中断标志位清0,由于每个机器周期都查这5个标志位,没清掉系统以为还有中断请求

 注:对于电平触发的这种外中断请求,在中断请求标志位自动撤销以后,往往可能要加一个上图所示的附加电路,要把电平触发输入这个地方的低电平给他撤掉,把低电平变为高电平,要加这个电路

  注:当单片机复位的时候,这俩寄存器都为0,所以最开始都是禁止中断、低优先级的,需要用软件对其进行初始化

 注:

关中断:实际上就是把EA那位清0,在电路中把电路打开,不允许任何中断发生,意思就是这个中断请求进入中断服务程序后,不允许其他任何中断来打断它

现场保护:现场保护就是为了把下面进行中断处理用到的一些寄存器,把原来寄存器里面那些内容一定压到堆栈里,所以上面要关中断就是为了现场保护,如果正在现场保护又来新的中断容易把原来寄存器里面的内容打断,这时候主要是压栈操作

开中断:保护完之后开中断,这时候可以由别的中断打扰它

中断处理:之后进行中断处理,这个中断处理要根据要完成的任务进行处理

关中断:这个关中断的目的是为了把现场恢复出来,如果正恢复现场,再来个中断容易擦现场搞乱

现场恢复:进行堆栈的恢复

开中断:恢复之后再开中断

中断返回:RETI指令

上面这个顺序不是必要的,如果不需要进行现场保护就不用来回的开关中断

注:

这里涉及到中断返回子程序与子程序的区别问题: 把响应中断时所置“1”的不可寻址的优先级状态触发器清“0”

这是两条指令即RET与RETI指令最根本的区别,RET指令没有中断的优先级是高优先级还是低优先级的问题

所有的中断请求标志,尤其是跳沿触发的外中断标志,当有外中断请求时,发出一个负跳沿,然后中断请求标志置为1,然后中断请求标志查询有更高级的中断请求,执行完之后,原来的中断响应未丢失,因为它是带锁存的,只要那个中断没响应,那个中断就还是1,什么时候响应了,什么时候才把它清0

调用子程序的时候,是执行程序当中主动调用的,那个端点实际上是正在执行指令的下一条指令的地址,然后子程序执行完毕之后,RET指令,再把那个断定弹到PC指针里面,在继续执行没有执行完的主程序

中断是随机的,不一定什么时候有这个中断请求每当发生中断的时候,硬件自动的执行一条长跳转指令,然后断点被压到堆栈里,然后注意两个不可寻址的中断优先级触发器,有一个必定为1表明当前响应的中断是高优先级还是低优先级,然后中断服务子程序执行完了,返回那两个中断优先级触发器,其中被置为1那个,肯定得到清0,然后再把断点从堆栈里面弹出来继续执行

如果中断服务子程序最后使用的是RET指令,断点也弹出来了,但是那个中断优先级触发器不会清0,再来一次中断,它就往中断里面跳,但两个中断优先级没有清0,它就不会进去了

 注:两种方法:一种加中断优先级触发器,另一种采用软硬结合的方法

注:它这5个中断源是电平触发,当有中断请求的时候,他们其中任意一个都要发出一个高电平信号,原来是低电平信号

注:上述这个例子的前提是只有一个中断

第二种方法是用硬件编码器,它用硬件自动判断,然后通过某种连法加到上面


原文地址:https://blog.csdn.net/2401_82720146/article/details/136173228

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!