null第五章1 单片机的中断系统第五章1 单片机的中断系统第一节 中断的基本概念
第二节 MCS-51单片机中断系统
第三节 中断系统的应用
null第一节 中断的基本概念1.数据传送方式
程序控制方式
无条件传送方式:输入输出操作完全取决于程序的安排,而不管外设的状态。
程序查询方式:先查询外设的当前状态,获得端口信息;I/O操作完全由CPU控制。缺点:浪费CPU时间,效率低。
中断传送方式
CPU不必定时查询接口状态,接口在数据发送或接收数据准备好后通知CPU;
CPU通过执行一个中断服务程序来完成数据传送。
接口没有准备好时,CPU继续执行主程序,提高CPU工作效率。
DMA(Direct Memory Access):直接存储器存取方式
I/O设备在DMA接口控制下直接把成块信息送到主存储器,或从主存储器取出成块信息送给I/O设备,中间不经CPU参与。
比中断、查询方式更加提高了CPU的利用率。null第一节 中断的基本概念2.中断概念:CPU在正常运行程序时,由于CPU以外某一事件的发生,引起CPU暂停正在运行的程序,而转到为该事件的发生预先安排好的服务程序中去执行。null3、 中断源(可由硬件或软件引起):引起中断的事件 MSC-51具有多个中断源,51子系列有5个中断源,2个外部中断,2个定时中断和1个串行中断。(A). 外中断:外部信号引起,共2个。
即: 外部中断“0”,中断请求信号由引脚INT0(P3.2)引入;
外部中断“1”,中断请求信号由引脚INT1(P3.3)引入。 外部中断请求有两种信号形式:低电平触发方式和负跳脉冲触发方式: 负跳脉冲触发方式:负跳信号有效,即CPU在连续两个周期对引入端INTX 采样,如果前周期为高电平,后一周期为低电平,则为有效的负跳脉冲触发方式的外中断申请。低电平触发方式:低电平有效,只要CPU在每机器周期S5P2期间从引入端INTX采 样到低电平,就进入外中断。第一节 中断的基本概念null(B). 定时器/计数器中断:内部计数器计数溢出,溢出标志位TFX作为单片机接受中断请求标志。
信号来源:内部(定时)和外部(计数)。
芯片内部有两个定时器/计数器(TF0/TF1).
发生计数溢出就可以达到申请中断请求 (C). 串行中断:串行数据传送(发送和接收)的需要而设置。
串行口接收或发送(TI/RI)完一组串行数据时,就可以产生一个中断请求。第一节 中断的基本概念null中断源入口地址第二节 MCS-51单片机的中断系统第二节 MCS-51单片机的中断系统IE------中断允许控制寄存器,
TCON----定时控制寄存器,
SCON----串行口控制寄存器。
IP------中断优先级控制寄存器,
与中断控制有关的控制寄存器有四个:null1. 中断允许控制寄存器IE 用户软件设置 寄存器地址为A8H(2) EX0(EXl):外部中断允许控制位(INT0、INT1)
EX0(EXl)=0 禁止外中断
EX0(EXl)=l 允许外中断(1)EA:中断允许总控制位。
EA=0 中断总禁止,禁止所有中断,即不响应任何中断请求。
EA=1 中断总允许,总允许后中断的禁止或允许由各中断源的中断允许 控制位进行设置。通过设置相关寄存器,达到控制中断工作的目的一、中断控制寄存器null(4) ES:串行中断允许控制位
ES=0 禁止串行中断
ES=1 允许串行中断结论:
MCS—51通过中断允许控制寄存器对中断的允许实行两级控制。以EA位作为总控制位,以各中断源的中断允许位作为分控制位。
MCS—51单片机复位后(IE)=00H,因此中断系统处于禁止状态。
单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应使用有关指令禁止中断,即以软件方式关闭中断。(3) ET0(ETl):定时/计数中断允许控制位(T0、T1)
ET0(ETl)=0 禁止定时(或计数)中断
ET0(ETl)=1 允许定时(或计数)中断null(1)IE0、IE1:外部中断请求标志。硬件自动设置
CPU采样到INTX端有效的中断请求后,IEX位由硬件自动置 “1”。在中断响 应期间(要转向中断服务程序时),由硬件自动清零。2.定时器控制寄存器TCON 寄存器地址为88Hnull2.定时器控制寄存器TCON 寄存器地址为88H(4)TR0、TR1:定时器启动标志位。null3. 串行口控制寄存器SCON(只有两位与中断有关)寄存器地址为98H(1)TI:串行口发送中断标志位。
当CPU将一个数据写入发送缓冲器时,就启动发送。
当最后一个数据位发送完后,TI由硬件自动置位,向CPU发中断申请。
进行中断服务程序时, TI要由软件清0。
软件查询时, TI可作为状态位使用。(2)RI:串行口接收中断标志位。
CPU接收数据时,当接收到最后一个数据位后,RI由硬件自动置位,并向CPU发中断申请。
进行中断服务程序时, RI要由软件清0。
软件查询时, RI可作为状态位使用。null4. 中断优先级控制寄存器IP 用户软件设置寄存器地址为B8HPX0:外部中断0优先级设定位
PXl: 外部中断l优先级设定位
PT0:定时中断0优先级设定位
PTl: 定时中断l优先级设定位
PS : 串行中断优先级设定位
对应位置1,优先级为高;置0,优先级为低;null5.中断优先级控制原则和控制逻辑
具有两级优先级,其中断优先级的控制原则是:
(1)低优先级中断请求不能打断高优先级的中断服务;但高优先级中断可以中断低优先级的中断服务,从而实现中断嵌套。
(2)如果一个中断请求已被响应,则同级的其他中断服务将被禁止,即同级不能嵌套。
(3)如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应。其查询次序为:外部中断0 → 定时中断0 → 外部中断1 → 定时中断1 → 串行中断。 null中断嵌套流程图中断优先级:当多个中断源请求中断服务,那么CPU响应这些中断就有一个先后顺序,称之为中断优先级。优先级高,则CPU先响应优先级低,则CPU不影响高级中断(平级)(平级)null8051的中断系统null6. 中断初始化和中断控制寄存器状态逻辑设置用户通过TCON、SCON、IE和IP四个控制寄存器来使用中断系统。
这四个控制寄存器都是既可进行字节寻址又可进行位寻址的。因此对位状态的设置既可以使用字节操作指令又可以使用位操作指令。
字节操作指令:MOV IE,#81H ; EA, /, /, ES, ET1, EX1, ET0, EX0
位操作指令: SETB EA
SETB EX0 对中断的使用是在程序初始化时设置的,如果不包括优先级控制,外中断初始化共有3项内容:中断总允许、外中断允许和中断方式设定。
定时中断则只有两项内容,没有中断方式控制。null二、 中断响应过程中断响应:在满足CPU中断响应条件后,CPU对中断源中断请求的回答。1. 中断响应基本条件(来中断,开中断)
a.有中断源发出中断申请(中断采样S5P2、中断查询S6)
中断采样:采样主要针对外中断请求信号进行,对芯片引脚/INT0和/INT1进行采样----电平方式或是脉冲方式。
中断查询:由CPU测试TCON和SCON中各标志位的状态,以确定有没有中断请求发生以及是哪一个中断请求;
中断请求是随机发生,
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
CPU不停地重复进行查询。
b.中断总允许位EA=1
c.各个中断源相应的允许位置1,即ES、ET1、EX1、ET0、EX0。null中断响应可能会被阻止或被延迟:
中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当存在下列情况之一时,中断响应被封锁。
a. CPU正处在为一个同级或高级的中断服务中。
b.查询中断请求的机器周期不是当前指令的最后一个机器周期,即当前指令完成前,不会响应任何中断请求。
c.当前指令是返回指令(RET,RETl)或访问IE、IP的指令。MCS—5l中断系统规定,在执行完这些指令之后,还应再继续执行一条指令,然后才能响应中断。
以上三个条件称为中断封锁条件null3. 中断响应过程:
如果满足中断响应条件且不存在中断封锁情况,则CPU进入中断响应周期。完成以下工作:
a. 将响应的优先级状态触发器置1。
b.由硬件清除相应的中断请求标志位:TFX,IEX。 但串行中断标志位必须手动清除。 c. 执行一条由硬件生成的长调用指令LCALL。其格式为LCALL addrl6,这里的addrl6就是程序存储器中相应中断区的入口地址。该指令将自动把断点地址(当前PC值)压入堆栈保护起来,然后将对应的中断入口地址装入PC,使程序转向该中断入口地址,去执行中断服务程序。注意:中断服务程序入口地址仅间隔8个字节,因此通常在这些入口地址处存放一条无条件转移指令,以控制程序转到用户安排好的中断服务程序地址去执行。null4. 中断响应时间:
从中断请求产生到CPU转到相应的中断服务程序的入口地址所需的时间。
1、基本响应时间(3个机器周期)
(1)查询中断标志:1个机器周期;
(2)转去执行中断服务程序:2个机器周期2、额外的处理时间(0 ~5 个机器周期)
RETI指令:2个机器周期;
MUL或DIV指令:4个机器周期。b.最长响应时间为8个机器周期
查询中断标志位时,刚好开始执行(RET,RETl)或访问IE、IP的指令,最长需要2个机器周期;单片机要求必须再继续执行一条指令,然后才能响应中断。若再执行的最长是4个机器周期的指令(MUL AB),再加上执行LCALL的2个机器周期,总共是8个机器周期。a.MCS-51单片机所需最短响应时间为3个机器周期。
中断请求标志位请求占1个机器周期(每个机器周期的S5P2期间查询中断标志位)。若此时恰好是正在执行指令的最后一个机器周期,中断立即会在该机器周期结束后被响应,硬件自动产生LCALL指令,耗费2个机器周期。因此总共3个机器周期。null结论:
一般的中断响应时间都是3~8个机器周期。但是如果出现同级或是高级中断正在响应或是服务中,则响应时间无法计算。
一般应用中,中断响应时间无需计算,只有在精确定时的应用场合,才需要计入中断响应时间,保证定时的精确。
null三 中断服务程序
中断都是在运行主程序时发生的,是主程序的随机事件,是否允许发生以及如何发生,都应该在主程序中预先设置,这就是中断初始化。
中断服务程序:从入口地址开始执行一直到返回指令RETI为止。
需注意的问题: 2. 开中断和关中断
a.在中断处理程序中,关中断,禁止响应其他一切中断,无中断嵌套
b.要保持中断嵌套,就要分别在现场保护和现场恢复前后,加上关中断和开中断,避免现场被破坏。1. 现场保护和现场恢复
所谓现场,指中断时刻,单片机存储单元中的数据或状态,一定是主程序和中断程序都用到的且不能被修改的存储单元。
现场保护:位于中断处理程序首部,PUSH 操作数
现场恢复:位于中断处理程序尾部,POP 操作数nullORG 0000H
LJMP MAIN
ORG 0013H
LJMP EXINT1
ORG 0050H
EXINT1:CLR EA ;关中断
PUSH ACC
PUSH PSW ;现场保护
SETB EA ;开中断
中断服务程序
CLR EA ;关中断
POP PSW
POP ACC ;现场恢复
SETB EA ;开中断
RETI ;中断返回
ORG 0100H
MAIN: …………………….null3. 中断返回
中断处理程序后最后一条指令必须是中断返回指令RETI。执行该指令时:
a.将“优先级状态触发器”复位为0;
b.从堆栈栈顶弹出断点地址,装入PC,从而返回主程序。
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN: ……………….
LCALL SUB
……………….
……………….
SJMP $
SUB: ……………..
RETI ;能正确运行吗? ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SUB
MAIN: ……………….
……………….
SJMP $
SUB: ……………..
RET ;能正确运行吗? 中断服务程序与子程序调用的区别中断服务程序与子程序调用的区别null四、 中断请求的撤消 中断响应后,TCON和SCON中的中断请求标志应该及时清除,否则就意味着中断请求继续存在,处理不当,会造成中断的重复查询和响应。因此就存在一个中断请求的撤消的问题。负脉冲方式外部中断请求的撤消:
两项内容:
a.外中断标志位IEX清“0”:中断响应后,硬件自动把标志位IEX清“0” 。
b.外中断请求信号的撤消:对于脉冲方式,脉冲信号过后就消失。
因此,负脉冲方式外部中断请求的撤消是自动的。定时中断请求的撤消:
一项内容:定时溢出标志位TFX清“0”。中断响应后,硬件自动把标志位TFX清“0”,即定时中断请求的撤消是自动的。null串行中断软件撤消:
一项内容:标志位清“0”,中断响应后,需要先分别测试TI和RI的状态(只有一个串行中断入口地址),判断完是接收操作还是发送操作后,再软件清“0”。低电平方式外部中断请求的撤消:电平方式外部中断,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在,在以后的机器周期采样时,又会把清“0”的IEX标志位置“1”。因此其中断请求撤消也分为两项内容:
a.外中断标志位IEX清“0”:中断响应后,硬件自动把标志位IEX清“0”。
b.外中断请求信号的撤消:把中断信号引脚从低电平强制改为高,为此需要增加硬件电路和软件程序。null第三节 中断系统的应用中断控制就是对4个与中断有关的专用寄存器TCON、SCON、IE和IP进行管理和控制,管理和控制的项目有:
(1)CPU中断的开放与关闭
(2)某中断源中断请求的允许与禁止
(3)各中断源优先级别的设定
(4)外部中断请求的触发方式中断管理与控制程序一般包含在主程序当中。在中断响应过程中,断点的保护是由硬件
电路来实现的,用户在编写中断服务程序时,主要需考虑现场的保护与恢复。当存在中
断嵌套时,在保护和恢复现场前要关中断;在保护和恢复现场后要根据需要开中断。null中断服务程序的一般格式:
CLR EA ;关中断
PUSH PSW ;
PUSH A ;保护现场
… …. ….. ;
SETB EA ;开中断
中断服务程序CLR EA ;关中断
。。。 。。。
POP A ;恢复现场
POP PSW ;
SETB EA ;开中断
RETI ;返回null例:硬件电路如图,通过8051单片机的P1口控制8个LED做左移和右移发光,当中断来时(按下/INT0),使8个LED闪烁5次.P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C51+5VINT0外部中断/INT0的应用nullORG 0000H
AJMP MAIN
ORG 0003H
AJMP EXT0
ORG 0030H
MAIN: SETB EX0 ; CPU开中断
SETB EA
MOV SP,#70H; 重设堆栈指针
LOOP: MOV A,#0FFH;左移初值
CLR C
MOV R2,#08H;设左移8次
LP1: RLC A
MOV P1,A;输出至P1口
ACALL DELAY;延时0.2秒
DJNZ R2,LP1
MOV R2,#07H;设右移7次
LP2: RRC A
MOV P1,A
ACALL DELAY
DJNZ R2,LP2
AJMP LOOP;重复循环EXT0: PUSH ACC ;保护现场
PUSH PSW
SETB RS0 ;选工作寄存器组1
CLR RS1
MOV A,#00 ;设LED灯全亮值
MOV R2,#0AH;闪烁5次,亮灭10次
LP3: MOV P1,A ;输出至P1口
ACALL DELAY
CPL A;A取反
DJNZ R2,LP3 ;循环
POP PSW ;恢复现场
POP ACC
RETI ; MOV IE, #81H
; MOV IP, #01H
; MOV TCON,#00HnullDELAY: MOV R5,#20 ;延时0.2m子程序
D1: MOV R6,#20
D2: MOV R7,#248
D3: DJNZ R7,D3
DJNZ R6,D2
DJNZ R5,D1
RET
END