微机原理及应用 第5章 MCS-51 中断系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章MCS-51中断系统第5章MCS-51中断系统:5.1中断的概念5.2MCS-51单片机的中断源5.3~~~中断控制5.4~~~中断处理过程5.5~~~中断请求的撤销5.6~~~外部中断的应用引起CPU中断的根源,称为中断源。中断源向CPU提出的中断申请,称为中断请求。CPU暂时中断原来的事务A,转去处理事件B的过程称为中断响应。CPU处理事件B的过程称为中断服务或中断处理。对事件B处理完毕后,再回到原来被中断的地方(断点),称为中断返回。整个过程称为中断。主程序A响应返回断点RETI……中断服务程序B5.1中断的概念实现中断功能而配置的软件与硬件称统为中断系统。5.2MCS-51单片机的中断源5.3~~~中断控制•80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。中断系统PX0IE0PT0TF0PX1IE1PT1TF1PS1010101010TIRITCONIEIPEX0ET0EX1ET1ESEAIT0=0IT0=1INT0INT1IT1=0IT1=1T0T1TXRX自然优先级矢量地址自然优先级矢量地址高级中断请求PC低级中断请求PC源允许总允许优先级SCON中断标志硬件查询•正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,但能被更高优先级中断请求所中断----嵌套。CPU同时接收到几个不同优先级的中断时,CPU首先响应优先级别最高的中断请求。CPU同时接收到几个同一优先级的中断申请时,则CPU通过内部硬件查询逻辑按自然优先级顺序决定响应哪个中断请求。自然优先级顺序排列如下所示:•正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,但能被更高优先级中断请求所中断----嵌套。5.4~~~中断处理过程5.4.1中断采样-----对外部中断源信号5.4.2中断查询-----对中断源标志位5.4.3中断响应、处理5.4.4中断返回S1保护断点,长调用至入口中断服务S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6标志查询标志锁存ε中断有效M1M2M3M4M55.4.1中断采样在每个机器周期的S5P2期间,中断系统对各个外部中断源信号进行检测,根据检测结果,设置相应中断标志位IE0IE1的状态。电平触发方式的外部中断请求:由一次检测结果来决定若为高电平,表明没有中断请求,将对应的标志位IE0IE1清零。若为低电平,表明有中断请求,将对应的标志位IE0IE1置1。边沿触发方式的外部中断请求:由相邻两次检测结果来决定若为先高后低电平,表明有中断请求,将对应的标志位IE0、IE1置1。否则,表明没有中断请求,不改变IE0、IE1的状态5.4.2中断查询CPU执行程序过程中,在每个机器周期的最后一个状态S6期间,按先后顺序对上一机器周期各个中断标志位的状态进行查询。中断标志位为1:表明有中断请求在接下来的机器周期S1期间按优先级进行中断处理。中断标志位为0:表明没有中断请求中断查询由硬件自动完成,先后顺序为:IE0→TF0→IE1→TF1→RI和TIS1保护断点,长调用至入口中断服务S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6标志查询标志锁存ε中断有效M1M2M3M4M55.4.3中断响应CPU执行程序过程中,对中断源提出的中断请求进行的接受响应处理1、中断响应的条件(1)有中断源请求信号,中断源标志位为1。(2)中断允许开放即EA=1,且中断源对应的中断允许位置位1。(3)无同级或更高级中断正在服务。(4)当前的指令周期已经结束。(5)如果当前指令为RETI、RET或访问IE和IP的指令,至少需要再执行完一条指令。当同时满足以上5个条件时CPU将对中断请求进行响应。5.4.3中断响应2、中断响应将相应的优先级状态触发器置1(以阻断后来的同级或低级的中断请求)。执行一条硬件LCALL指令:硬件清零相应中断请求标志(TI、RI除外)将当前PC内容压入堆栈——保护断点将中断服务子程序入口地址送PC——转移中断响应是由中断系统内部自动完成的。5.4.3中断响应3、中断的响应时间是指从中断请求标志位置1,到进入相应的中断服务程序开始执行第一条指令所持续的时间。S1保护断点,长调用至入口中断服务S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6标志查询标志锁存ε中断有效M1M2M3M4M5•若M1周期的S5P2前某中断生效,在S5P2期间其中断请求被锁存到相应的标志位中去;•M2恰逢指令的最后一个机器周期,且该指令不是RETI或访问IE、IP的指令。于是,M3和M4便可以执行硬件LCALL指令,M5周期将进入了中断服务程序。•80C51的中断响应时间,至少要3个完整的机器周期。5.4.3中断响应4、中断处理中断处理就是执行中断服务子程序。从中断入口地址开始执行程序,直到返回指令RETI为止。5.4.4中断返回中断返回是指中断服务程子序执行完后,CPU返回原来断开的位置(断点),继续执行原来的程序的过程;由RETI指令来完成,具体过程为:将相应中断优先级状态触发器清0,通知中断系统,中断服务程序已执行完毕,可以响应其他同级或更低级的中断。将断点地址从栈顶弹出送回PC——恢复断点,CPU从原来中断的地方继续执行程序;注意,不能用RET指令代替RETI指令。在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点。5.5中断请求的撤销CPU响应某中断请求后,在中断返回之前,应撤除该中断请求标志,否则会再次中断。对定时计数器T0、T1的溢出中断,CPU响应中断后,硬件自动清除中断请求标志TF0和TF1。用户对此不必考虑。对于串行口中断,CPU响应中断后,没有用硬件清除中断请求标志TI、RI,即这些中断标志不会自动清除,必须用软件清除CLRRI;CLRTI,这是在编串行通信中断服务中应该注意的。5.5中断请求的撤销对电平触发的外部中断,CPU在响应中断时硬件不会自动清除中断标志,也不能用软件清除中断标志,因此,在CPU响应中断后应立即撤除INT1或INT0的低电平信号,需要外加硬件电路和软件配合才能实现。P95对边沿触发的外部中断INT1和INT0,CPU响应中断后硬件自动清除中断请求标志IE0和IE1。用户对此不必考虑。5.6外部中断的应用5.6.1中断程序设计5.6.2单外部中断源举例5.6.3多外部中断源举例5.6.1中断程序设计主、子程序结构中断服务子程序的主程序设计中断初始化用户对中断的控制和管理,实际是对4个与中断有关的寄存器TCON、SCON、IE、IP进行控制或管理。在中断初始化编制中应注意:开中断总控开关EA,置位中断源的中断允许位。对外部中断INT0、INT1应选择中断触发方式。多个中断源中断,应设定中断优先级,预置IP。中断服务子程序设计入口地址固定中断服务程序的主程序设计框架ORG0000H;0000H为PC复位地址LJMPMAIN;MAIN为主程序入口地址ORG0003H;为外部中断0服务子程序硬件入口地址LJMPINT_0;INT_0为外部中断0服务程序真正入口地址ORG000BH;为定时器0中断服务子程序硬件入口地址LJMPT_0;T_0为定时器0服务程序真正入口地址ORG0013H;为外部中断1服务子程序硬件入口地址LJMPINT_1;INT_1为外部中断1服务程序真正入口地址…..ORG0100H;真正的主程序开始MAIN:MOVSP,#60H;堆栈初始化;中断初始化:对TCON、SCON、IE、IP的初始化SETBIT0;将外部中断0设置为下降沿触发方式SETBEA;CPU开中断SETBEX0;外部中断0开中断SJMP$;等待中断,此处也可以放置其他处理程序。中断服务子程序设计框架INT_0:;INT_0为外部中断0服务程序真正入口地址CLREA;关中断PUSHPSW;保护现场PUSHA…SETBEA;开中断,允许CPU响应高级中断…;中断服务子程序…;中断服务子程序CLREA;关中断POPA;恢复现场POPPSW…SETBEA;开中断RETI;中断返回5.6.2单外部中断源举例例程序单步执行方式的外部中断实现,每按一次按钮产生一个正脉冲,只执行一条指令。P34把一个外部中断(设为INT0)设置为高优先级和低电平触发方式。ORG0000H;0000H为PC复位地址LJMPMAIN;MAIN为主程序入口地址ORG0003H;外部中断0入口地址INT_0:JNBP3.2,$;在INT0变高前=0原地等待(死循环),不往下执行JBP3.2,$;在INT0变低前=1原地等待(死循环)RETI;INT0=0返回主程序,并执行下一条指令ORG0100H;真正的主程序开始MAIN:MOVSP,#60H;堆栈初始化SETBPX0;设置外部中断0为高优先级CLRIT0;将外部中断0设置为低电平触发方式SETBEA;CPU开中断SETBEX0;外部中断0开中断INCAINCA;需要单步执行的程序。。。SJMP$;等待中断,此处也可以放置其他处理程序。5.6.2单外部中断源举例【例5-1】用一个按钮控制8个发光二极管,每按动一次按钮,使发光二级管按L1→L2→….→L8→L1的顺序循环移动点亮一位。ORG0000HSETBP3.3;将P3.3口设置为输入状态MOVA,#0FEH;设置L1~L8的初始状态LOOP:MOVP1,AJBP3.3,$;若按钮未动作,则原地等待JNBP3.3,$;等待按钮释放,保证按动一次;发光二极管只移动一位RLASJMPLOOPEND1、采用查询方式实现P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0INT1MCS-51K+5V5.6.2单外部中断源举例【例5-1】用一个按钮控制8个发光二极管,每按动一次按钮,使发光二级管按L1→L2→….→L8→L1的顺序循环移动点亮一位。P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0INT1MCS-51K+5VORG0000H;PC复位地址AJMPMAIN;MAIN为主程序入口地址ORG0013HAJMPINT_1;INT_1为外部中断1服务程序入口地址ORG0100H;真正的主程序开始MAIN:MOVSP,#60H;堆栈初始化MOVA,#0FEH;设置L1~L8的初始状态MOVP1,A;点亮二极管L1SETBIT1;将外部中断1设置为下降沿触发方式SETBEA;CPU开中断SETBEX1;外部中断1开中断SJMP$;等待中断,此处也可以放置其他处理程序。ORG0200H;真正的外部中断1服务程序INT_1:RLA;修改灯的状态MOVP1,ARETI;中断返回END2、采用中断方式实现利用外中断0实时显示多个外部系统故障状态。要求:a、当系统工作正常时,四个故障源输入全为低电平,显示灯全熄灭;b、当某部分出现故障时,对应的输入线由低电平变为高电平,从而引起8031中断;c、在中断服务程序中查询故障源,并对相应的发光二极管LED输出低电平,进行相应的故障显示。5.6.3多外部中断源举例INT0P1.0P1.4P1.1P1.5P1.2P1.6P1.3P1.78031LEDRLEDRLEDRLEDR故障信号输入端³1X4X3X2X1Vcc•ORG0000H•AJMPMAIN;跳转主程序•ORG0003H•AJMPPITO;跳转外部中断0服务程序•ORG0030HMAIN:ORLP1,#0FFH;(主程序开始)灯全灭,准备好•SETBEA;开放总中断•SETBEX0;开放外部中断0•SETBIT0;设外部中断0为边沿触发方式WAIT:SJMPWAIT;等待中断或其他程序PITO:ORLP1,#0F0H;关闭所有的灯•JNBP1.0,L1;(中断服务程序开始)•CLRP

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功