单片机中断系统
Posted lyec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机中断系统相关的知识,希望对你有一定的参考价值。
中断系统的概念和基本结构
中断发生:CPU正在处理某一程序时,发生了另一突发
事件请求CPU迅速去处理;
中断响应: CPU暂时停止当前的工作,转到需要处理的
中断源的服务程序的入口,一般在入口处执行
一跳转指令转去处理中断事件(中断服务);
中断返回:待CPU将中断事件处理完毕后,再回到原来
程序被中断的地方继续处理执行程序,这一处
理过程称为中断返回。
当CPU与外设交换信息时,由于外设的速度比较慢,若用查询的方式,则CPU就要浪费很多时间去等待外设。
这样就存在一个快速的CPU与慢速的外设之间的矛盾。为了解决这个问题,就引入了“中断”的概念
中断的优点
分时操作
有了中断功能,就可以使CPU和多个外设同时工作。提高了CPU的利用率。
实时处理
实时控制时,需要现场的各种参数、信息,可在任何时间发出中断申请,CPU就可以马上响应加以处理。
故障处理
计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些故障。
中断源
引起中断的原因,或能发出中断申请的来源,称为中断源。通常中断源有以下几种:
外部输入、输出设备
故障源
控制对象
定时/计数脉冲,当定时/计数器溢出时产生中断请求。 对于每种中断事件,要求其能够发出中断请求信号,而且要符合CPU响应中断的条件,即要明确属于哪种中断源。中断源是系统规定的可引起中断的部件或来源。
中断系统的功能
实现中断及返回
能实现优先权排队
高级中断源能中断低级的中断处理
MCS-51单片机的中断系统提供5个中断申请源
外部中断0和外部中断1;
定时/计数器(T0)和(T1)的溢出中断;
串行接口的接收和发送中断。
这5个中断源可分为两个优先级,可实现两级中断服务程序嵌套。
MCS-51单片机的中断系统可以提供5个中断申请源,它们的控制与实现由片内4个SFR来完成。
定时/计数器的控制寄存器(TCON)和串行接口控制寄存器(SCON)的相应位规定中断类型和触发方式;
中断允许寄存器(IE)控制CPU是否响应中断请求;
中断优先级寄存器(IP)安排各中断源的优先级,同一优先级内各中断同时提出中断请求时,由内部的查询逻辑按规定的自然优先级确定其响应次序。
MCS-51的中断源
外部中断0:来自P3.2引脚上的外部中断请求;
外部中断1:来自P3.3引脚上的外部中断请求;
T0:片内定时/计数器0溢出(TF0)中断请求;
T1:片内定时/计数器1溢出(TF1)中断请求;
串行接口:片内串行接口完成一帧数据的发送或接收后,产生中断请求TI或RI。
和中断有关的特殊功能寄存器
定时/计数器控制寄存器TCON(88H)
TCON:它锁存2个定时/计数器的溢出中断标志及外部中断( )和( )的中断标志,与中断有关的各位定义如下:
IT0:外部中断0触发方式控制位。
当IT0=0,外部中断0选择为电平触发方式(低电平有效)当IT0=1外部中断0选择为边沿触发方式(下降沿有效)。
IE0:外部中断0中断请求标志位。
IE0=1时,表示向CPU请求中断。
IT1:外部中断1触发方式控制位。
IE1:外部中断1中断请求标志位。
TF0:定时/计数器T0溢出中断请求标志位。
在T0启动后就开始由初值加“1”计数,直至最高位产生溢出由硬件置位(TF0),向CPU请求中断。CPU响应中断时,TF0由硬件自动清“0”。
TF1:定时/计数器T1溢出中断请求标志位。
串行接口控制寄存器(98H)
SCON是串行接口控制寄存器,与中断有关的是它的低位TI和RI。
RI:串口接收中断标志位。
当允许串口接收数据时,每接收完一个串行帧,由硬件置位RI,向CPU请求中断。CPU响应中断时,不能自动清除RI,RI必须由软件清除。
TI:串口发送中断标志位。
当CPU将一个发送数据写入串口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位(TI),向CPU请求中断。同样,TI必须由软件清除。
中断允许寄存器IE(A8H)
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器(IE)控制的。
IE的状态可通过程序由软件设定;
某位设定为“1”,相应的中断源中断允许;
某位设定为“0”,相应的中断源中断屏蔽;
CPU复位时,IE各位清“0”,禁止所有中断。
IE各位的定义如下:
EX0:外部中断(0)中断允许位;
ET0:定时/计数器T0中断允许位;
EX1:外部中断(1)中断允许位;
ET1:定时/计数器(T1)中断允许位;
ES: 串行接口中断允许位;
EA: CPU中断总允许位。
中断优先级寄存器IP(B8H)
MCS-51单片机有两个中断优先级,即可实现二级中断服务嵌套。
每个中断源的中断优先级都是由中断优先级寄存器(IP)中的相应位的状态来规定的。
某位设定为“1”,则相应的中断源为高优先级中断;
某位设定为“0”,则相应的中断源为低优先级中断。
单片机复位时,IP各位清“0”,各中断源同为低优先级中断。
PX0:外部中断0中断优先级设定位;
PT0:定时/计数器T0中断优先级设定位;
PX1:外部中断1中断优先级设定位;
PT1:定时/计数器T1中断优先级设定位;
PS:串口中断优先级设定位。
同一优先级的中断优先权排队,由中断系统硬件 确定的自然优先级形成,其排列如下表所示。
MCS-51单片机的中断优先级控制原则
不同级的中断源同时申请中断时,先响应高级后响应低级。
同级的中断源同时申请中断时,按事先规定执行。即MCS-51单片机中规定的同级中断优先顺序。
处理低级中断又收到高级中断请求时,停止低级转去先执行高级。
处理高级中断又收到低级中断请求时,不响应它,等待做完高级处理后再处理低级中断。
4.1.4 中断响应条件和时间
中断处理过程分为4个阶段:中断请求→中断响应→中断服务→中断返回。
中断响应条件
有中断请求
相应的中断允许位为1
CPU开中断(即EA=1)
遇下面情况之一将不被响应(此间中断条件失效,中断丢失)
正在处理同级或高级中断
当前查询周期不是所执行指令的最后一个机器周期
正在执行RETI或访问IE或IP 的指令
中断响应至少需要3个完整的机器周期(3~8个)!
受阻时要附加3~5个机器周期(无同级或高级中断正进行)
查询周期不是当前指令的最后机器周期(如MUL,+3)
查询周期恰逢RETI类指令(且后跟MUL指令+5)
CPU响应中断过程
将相应优先级状态触发器置1(阻断后来同级或低级中断 )
执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC )
执行中断服务程序
编写中断服务程序注意
中断服务程序入口存放指令LJMP或AJMP
现场保护与现场恢复
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0 ;转外中断0
ORG 000BH ;没有用定时器0中断,在此放一条RETI
;万一 “不小心”产生了中断,
RETI ; 也不会有太大的后果。
ORG 0030H
MAIN:…… ;主程序开始
;在此间发生中断
......
INT0: ...... ;中断服务程序开始
RETI ;中断服务程序返回
END
4.1.6 中断返回
中断服务程序最后指令必须是RETI,其功能:
将断点从堆栈弹送PC,CPU从原断点继续执行
将相应优先级状态触发器清0,恢复原来工作状态
不能用RET代替RETI
中断服务程序中PUSH和POP必须成对使用
中断与子程序调用的不同点
● 子程序调用是固定的,专用指令,位置固定。
● 中断的执行是随机的,没有调用指令,任何位置。
中断工作方式的优点:
1)外设与CPU可并行工作
CPU与多个外设同时工作,互不干扰
2)实现了实时处理、实时控制
CPU能及时处理外部信息,如数据采集,监控
3)能及时处理随机故障
中断处理过程(汇总中断响应→中断服务→中断返回)
(1)CPU在每个机器周期的S5P2时刻对各个中断源的中断标志
进行采样。
(2)这些采样值在下一个机器周期内按优先级和内部顺序被
依次查询。如果某个中断标志在上一个机器周期的S5P2
被置成了1,那么它将于现在的查询周期中及时被发现。
(3) 将相应的优先级状态触发器置“1”(以阻断后来的
同级或低级的中断请求);
(4) 执行一条硬件LCALL指令,把程序计数器(PC)的内容压入
堆栈保存,再将相应中断服务程序的入口地址送入PC;
(5) 进入中断服务程序后,CPU自动清除中断请求标志TF0、
TF1、IE0、IE1,但不能清除TI和RI。
(6)在主程序中事先进行中断初始化,在中断服务程序
入口地址单元放一条长转移指令LJMP,这样中断服
务程序能灵活地安排在64KB程序存储器的任何地方。
(7) 在中断服务程序中,首先用软件保护现场,在中断服
务之后、中断返回前恢复现场,以防止中断返回后,
丢失原寄存器的内容。
(8) 当执行到RETI时,中断服务程序结束。
(9) 将中断响应时压入堆栈保存的断点地址从栈顶弹出送
回PC,CPU从原来中断的地方继续执行程序;
(10)将相应中断优先级状态触发器清“0”,通知中断系
统,中断服务程序已执行完毕。
4.1.7 中断请求撤除
定时器中断请求的撤除
串口中断请求的撤除
外部中断请求的撤除
——边沿触发
由于外部中断源在每个机器周期被采样1次,所以输入的高电平或低电平必须至少保持12个振荡周期,以保证能被采样到。
——电平触发
单片机在每个机器周期的S5P2期间采样中断输入信号,若为低电平,则可直接触发外部中断。在这种触发方式中,中断源必须持续请求,直至中断产生为止,且要求在中断服务程序返回之前,必须撤除中断请求信号,否则机器将认为又发生了另一次中断请求。
外部电平中断申请的撤除
在中断服务程序中用以下两条指令来撤除中断请求:ANL P1,#0FEH ;P1.0=0,则S=1,D触发器置位,Q=1 ORL P1,#01H ;P1.0=1,则S=0,D触发器接收信号 第1条指令使P1.0为0,而P1口其他各位的状态不变。由于P1.0接至D触发器的置“1”端(S),所以D触发器的Q=1,从而撤除了中断请求信号。第2条指令又使P1.0为1,即S=0,以便能继续接收新的外部中断请求信号。
4.1.8 中断系统设计举例
中断系统的设计过程通常由以下几个部分构成
(1) 中断初始化,在主程序中完成;
(2) 在中断入口地址处安排一跳转指令,跳转至中断
服务子程序入口;
(3) 中断服务子程序开始保护现场,保护与主程序或
其他中断系统共享的资源,如A,PSW,DPTR,
Rn等,如果没有共享资源,可以不必保护;
(4) 编制中断服务子程序功能主体;
(5) 恢复现场;
【例4.1】试编写设置外部中断0和串行接口中断为高优先级,外部中断1为低优先级,并屏蔽T0和T1中断请求的初始化程序段。
解:根据题目要求,只要能将中断请求优先级寄存器IP的第0、4位置“l”。其余位置“0”,将中断请求允许寄存器的第0、2、4、7位置“l”,其余位置“0”就可以了。
ORG 0000H
SJMP MAIN
ORG 0003H ;外部中断0的入口地址
LJMP INT0INT ;跳转到外部中断0的中断服务程序
ORG 0013H ;外部中断1的入口地址
LJMP INT1INT ;跳转到外部中断1的中断服务程序
ORG 0023 ;串口中断的入口地址
LJMP SIOINT ;跳转到串口中断的中断服务程序
ORG 0030H
MAIN:… ;编写主程序
MOV IP,#00010001B ;设外部中断0和;串行口中断
;为高优先级
MOV IE,#10010101B ;允许INT0、串行口中断,开CPU中断
思考: 试写一段中断初始化程序,使其允许T0、T1和串口中
断,且INT0为边沿触发方式,串口为高优先级中断。
【例4.2】利用单片机的定时器计数来产生中断,假定单片机晶振选择12MHZ,选择使用T0每1mS产生一次中断请求,用于调用动态显示程序DISP,即显示程序在此属于中断服务程序。
解:先安排好不同程序的入口地址,在主程序中完成定时器和中断的初始化,然后打开对应中断允许位和总中断允许位,在中断服务程序中要注意保护和恢复现场。
;主程序如下
ORG 0000H
LJMP MAIN ;跳转到主程序入口
ORG 000BH
LJMP DISP ;跳转到定时器T0中断入口地址
ORG 0030H
MAIN:………
;=进行定时器初始化=
MOV TMOD,#00000001B ;设置T0工作在模式1
MOV TH0,#0FCH ;
MOV TL0,#18H ; 设置计数初值FC18H=64536=65536-1000
SETB TR0 ; TR0=1,启动定时器T0 开始计数
SETB ET0 ; 开放定时器T0 中断允许位
SETB EA ;开放总中断允许位,等待T0 计数满溢出;
…略……
;中断服务程序代码:
DISP:
PUSH ACC
PUSH PSW ;保护现场;
CLR TR0 ;因为已经响应中断请求,故停止定时器T0
MOV TH0,#0FCH
MOV TL0,#18H ;重新赋计数初值
SETB TR0 ;重新启动定时器T0
……. ;显示程序代码(略)…..
POP PSW
POP ACC ;按先入后出次序恢复现场;
RETI ; 中断服务程序结束,返回断点,必须用RETI指令;
【例4.3】如下图所示,按S接至外部中断,按一次键LED点亮,蜂鸣器发声,再按一次键LED灭,蜂鸣器关闭,循环往复。
——实现程序——
ORG 0000H
LED BIT P0.0
BUZZER BIT P2.7
LJMP MAIN ;跳转至主程序
ORG 0013H
LJMP INT1_INT ;跳转至中断服务程序
……
ORG 0100H
MAIN: SETB IT1 ;外中断采用下降沿触发
SETB EX1 ;允许中断
SETB EA ;开总中断
SETB F0 ;按键切换标志,F0=1,LED灭; ;F0=0,LED亮
……
INT1_INT:CPL F0 ;不需保护现
MOV C,F0
MOV LED,C ;控制LED输出
MOV BUZZER,C ;控制蜂鸣器输出
RETI ;中断返回
另:请考虑用查询方式实现该功能,如何编程?二者有何差异?
中断总结
51单片机共有5个中断源,由4个SFR(TCON、 SCON、IE和IP)进行管理和控制。
初始化时,需要对5个内容进行设置:
1)中断服务程序入口地址的设定;
2)某一中断源中断请求的允许和禁止;
3)对于外部中断请求,还需进行触发方式的设定;
4)各中断优先级别的设定;
5)CPU开中断与关中断。
以上是关于单片机中断系统的主要内容,如果未能解决你的问题,请参考以下文章