资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章 中断系统什么是中断?为什么需要中断?有哪些中断源?如何进行中断控制?如何处理中断?如何使用中断?6.1 概述中央处理器CPU在执行程序的过程中,外部发生了某一事件请求CPU迅速去处理,于是, CPU暂时中断当前的工作,转入处理所发生的事件;中断处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。 中断源:向CPU发出中断申请的来源;中断请求:中断源向CPU发出要求服务的请求;主程序:被打断的程序;中断服务程序:中断后转去执行的程序;断点:主程序被中断的位置;6.1 概述根据优先处理最紧急事件的原则,对中断源进行了优先级划分: 二个中断优先级, 每个中断源可以设为高优先级或低优先级, 可以实现二级中断服务程序嵌套。 6.1 概述中断嵌套的流程6.1 概述中断源 寄存器中断允许 寄存器中断优先 级寄存器6.2 MSC-51的中断系统中断源MCS-51单片机有5个中断源 :6.2 MSC-51的中断系统一、外部中断请求INT0、INT1: 由P3.2、 P3.3脚输入。 分别通过IT0位和IT1位来控制中断输入信号是低电平有效还是负跳变边沿有效。 一旦输入触发信号有效,就分别置位标志位IE0(TCON.0)、IE1(TCON.1),向CPU请求中断处理。 6.2.1 8051单片机的中断源低电平触发方式 CPU在每个机器周期的S5P2采样INT0和INT1的输入电平; 采样到低电平时,认为有中断申请,置IE1为1;响应中断后,单片机自身不能清除请求信号,此时外部设备在中断返回之前必须撤去中断请求,否则,将产生另一次中断。 采样到高电平时,认为无中断申请,置IE1为0;6.2.1 8051单片机的中断源负跳变边沿触发方式 CPU在每个机器周期的S5P2采样INT0和INT1的输入电平; 相继两次采样中,如果前一个周期采样到高电平,而下一个周期采样到低电平,则置位中断请求标志IE0或IE1(在TCON中),表示外部中断源正在向CPU申请中断; 当CPU响应时,内部硬件自动将IE0或IE1清“0”,控制转到相应的中断入口。6.2.1 8051单片机的中断源二、内部中断:(1)定时器溢出中断TF0、TF1:当定时器T0、T1产生溢出时发出的中断请求,中断标志位TF0、TF1置1,请求中断处理;响应中断后,自动清0。(2)串行口中断RI或TI:当串行口接收或发送完一帧数据时发出的中断请求,中断标志位RI或TI置1,请求中断处理。响应中断后,由用户清0。6.2.1 8051单片机的中断源注意:RI、TI的中断入口都是0023H,所以CPU响应应后转转入0023H开始执执行服务务程序,首先必须须判断是RI中断还还是TI中断,然后进进行相应应服务务。在返回主程序之前必须须用软软件将RI或TI清除,否则则会出现现一次请请求多次响应应的错误错误 。6.2.1 8051单片机的中断源总结:中断源寄存器TCON和SCON 记录是否有中断请求出现 选择外部中断源的触发方式(电平触发边沿触发)6.2.1 8051单片机的中断源6.2.1 特殊功能寄存器TCONTCONTF1TF0IE1IT1IE0IT0位地址8F8D8B8A8988复位/未溢出:0T1溢出中断:1T1中断标志位复位/未溢出 :0T0溢出中断 :1T0中断标志位0:INT1无中断请求1:INT1上有中断请求0:INT0为电平触发1:INT0为边沿触发0:INT0无中断请求1:INT0上有中断请求0:INT1为电平触发1:INT1为边沿触发SCON是串行口控制寄存器,锁存串行口接收和发 送中断的标志。SCONSM0SM1SM2RENTB8RB8TIRI位地址9F9E9D9C9B9A99980:无接收中断1:有接收中断0:无发送中断1:有发送中断在串行口一节中介绍6.2.1 特殊功能寄存器TCON6.2.2 中断允许和禁止 特殊功能寄存器IE为中断允许寄存器,通过向IE写入中断控制字,控制CPU对中断源的开放或屏蔽。 2级控制:一个总控制位,每个中断源有一个分控制位IEEAESET1EX1ET0EX0位地址AFACABAAA9A80:关INT0中断 1:开INT0中断0:关T0中断 1:开T0中断0:关INT1中断 1:开INT1中断0:关T1中断 1:开T1中断0:关串行口中断 1:开串行口中断0:关CPU中断 1:开CPU中断中断总允许位6.2.2 特殊功能寄存器IE6.2.2 中断优先级设定 特殊功能寄存器IP为中断优先级寄存器,通过IP中的位,可设置中断源优先级的高低。 2个优先级: 同时收到两个不同优先级的中断时,先处理高优先级; 高优先级中断源可中断低优先级中断服务程序, 若同时收到两个同级的中断,则按预先设定的顺序进行响应IP:中断优先级寄存器,系统复位后全部清零。6.2.2 中断优先级设定若同时收到两个同级的中断,则按预先设定的顺序进行响应外部中断0定时器T0中断外部中断1定时器T1中断串行口中断同优先级 中的响应 顺序6.2.2 中断优先级设定6.2.3.1 中断响应中断响应条件:满足条件响应中断;否则,不响应 有中断源发出中断请求; CPU开中断,即中断总允许位EA=1,CPU允许所有中断源申请中断; 中断源的中断允许寄存器IE相应位置“1”,即此中断源可向CPU申请中断;有下列情况发生时,CPU不响应中断 CPU正在处理同级的或更高优先级的中断; 现行的机器周期不是所执行指令的最后一个机器周期; CPU正在执行的指令是RETI或任何访问IE/IP的指令,此时CPU须再执行完紧接着的一条指令后,才能响应中断。 6.2.3.1 中断响应注意:如果一个中断标志位原本有效,可由于上述阻止原因使该中断没有被响应;当阻止条件被去掉后,如果标志位已变为无效,则该中断就不再被响应 了。也就是说,没有被及时响应的中断请求是不会被记下来的。 6.2.3.1 中断响应在响应中断的过程中,单片机必须做以下三件事: (1)将相应的优先级状态触发器*置位,指明CPU开 始处理的中断优先级别 (2)清中断标志 (3)把中断的断点地址,也就是当前程序计数器PC 中的内容压入堆栈,将相应的中断服务程序的入口送 给PC。*优先级状态触发器:MCS-51中断系统内部设置两个优先级 状态触发器,用户不能访问,用以指明CPU开始处理的中断 的优先级别。6.2.3.1 中断响应中断服务程序的入口地址中断源外部中断0定时器T0中断外部中断1定时器T1中断串行口中断中断入口地址0003H000BH0013H001BH0023H各中断源入口地址相差8个字节,用于存放一条无条件转移指令(LJMP addr16), addr16是中断服务程序的入口地址6.2.3.1 中断响应6.2.3.2 中断处理和中断返回中断处理的四个步骤: 保护现场:此时不能响应新的中断请求,所以在保护现场之前应禁止所有中断 中断服务:中断服务时,应允许新的中断 恢复现场:此时不能响应新的中断请求,所以在恢复现场之前应禁止所有中断 中断返回CLR EA;关中断 PUSH A;保护现场 PUSH R1; SETB EA;开中断,可响应更高级中断 ;中断服务 ; CLR EA;关中断 POP R1;恢复现场 POP A; SETB EA;开中断 RETI;中断返回6.2.3.2 中断处理和中断返回CPU响应某中断请求后,在中断返回前,必须撤除中断请求,否则将错误地引起另一次中断发生。 系统自动撤除的中断请求: 定时器0、1产生的中断请求 由边沿触发产生的外部中断请求; 系统不能自动撤除的中断请求: 电平触发产生的外部中断请求由硬件撤除 串行口中断请求必须通过软件撤除6.2.3.3 中断请求的撤除解:一般单片机的开发系统都有单步运行用户程序的功能。在调试程序时,每按一次单步执行键,CPU就执行一条指令,之后进入暂停等待状态,必要时还显示累加器中的内容和下条指令的地址。这是利用单片机的外部中断,配上简单硬件(如下图),再经适当编程实现的。中断系统应用举例例:利用外部中断实现单步操作单步键每按一次单步执行键,CPU就执行一条指令,然后进入暂停等待状态,例:利用外部中断实现单步操作中断系统应用举例1. INT0设为电平触发方式(低电平有效);2. INT0引脚平时为低电平,单片机一直处于中断服务中;3. 按下单步键出现高电平,放开单步键出现低电平;此时,在中断服务程序中,检测到高低电平先后出现便从中断返回,执行主程序中的一条指令,1. 此后,又响应中断,等待用户按键,实现单步操作。例:利用外部中断实现单步操作中断系统应用举例初始化程序 SETB EA ;CPU开中断SETB PX0 ;置为高中断优先级SETB EX0 ;允许INT0中断SETB IT0 ;置为电平触发方式中断系统应用举例中断服务程序LOOP1: JNB P3.2, LOOP1 ;检测引脚是否出现高电平;若是低电平,则原地踏步LOOP2: JB P3.2, LOOP2 ;检测引脚是否出现低电平;若是高电平,则原地踏步 RETI ;中断返回例:出租车计价器计程方法是车轮每转一圈产生一个 负跳变,从外部中断INT0(P3.2)引脚输入,行驶 里程为轮胎周长运转圈数,设轮胎周长为2m,试 实时计算出租车行驶里程(单位米),数据存32H 、31H、30H。 解:编程如下:ORG 0000H;复位地址LJMP STAT;转用户程序ORG 0003H;中断入口地址LJMP INT;转中断服务程序ORG 0100H ;初始化程序首地址 STAT: MOV SP,#60H;置堆栈指针SETB IT0 ;置边沿触发方式MOV IP,#01H;置高优先级MOV IE,#81H;开中断MOV 30H,#0;里程计数器清0MOV 31H,#0;MOV 32H,#0;LJMP MAIN ;转主程序,并等待中断主程序处理其他任务初始化程序 ORG 0200H ;中断服务子程序首地址 INT: CLR EA ;关中断PUSH Acc ;保护现场PUSH PSW ;SETB EA ;开中断,可响应更高级中断MOV A,30H ;读低8位计数器ADD A,#2 ;低8位计数器加2mMOV 30H,A ;回存CLR A;ADDC A,31H ;中8位计数器加进位MOV 31H,A ;回存CLR A;ADDC A,32H ;高8位计数器加进位MOV 32H,A ;回存CLR EA ;关中断PUSH PSW ;恢复现场PUSH Acc ;SETB EA ;开中断,可响应更高级中断RETI ;中断返回
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号