资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第7章 AT89S52中断系统,内容:,第一节 概念,第二节 中断源,第三节 中断控制,第四节 中断系统的C51编程方法,第五节 外部中断及应用实例,1,第一节 概念,中断的概念,CPU对外界异步事件的一种响应方法。,在执行程序的过程中,由于某种外界的原因,必须打断当前的程序执行,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序。这个过程叫中断。,相当于有一个独立于CPU的事件管理机制,只在事件发生后并且满足CPU响应条件,才由CPU予以处理,从一个侧面看,相当于并行工作。,2,中断及其嵌套,3,中断技术的优点:,提高CPU的效率,提高实时数据的处理时效,故障处理,中断系统的功能:,中断优先权排队,实现中断嵌套,自动响应中断,实现中断返回,4,AT89S52的中断系统,8个中断源,6个中断矢量,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向CPU请求中断。,有关的特殊功能寄存器(SFR)有:,中断允许寄存器IE,中断优先级寄存器IP,中断源寄存器(TCON、SCON中的有关位),注:均可位寻址。,5,第二节 AT89S52中断源,向CPU申请中断的请求源,AT89S52的8个中断源:,外部中断,/INT0,、,/INT1,;,T0,、,T1,计数中断;,串行口发送中断或接收中断;,T2,计数中断和捕获中断。,外中断对应两个中断矢量;,T0,、,T1,中断对应两个中断矢量;,串行口对应一个中断矢量;,T2,对应个一个中断矢量。,6,第二节 AT89S52中断源,外部中断,/INT0,、,/INT1,:在,P3.2,或,P3.3,引脚上产生负跳变或低电平时,置位中断请求标志位,IE0,或,IE1,外部中断请求标志和触发方式控制位存在于特殊功能寄存器,TCON,的低四位。硬件自动复位,IE0,和,IE1,标志位。,T0,、,T1,计数溢出中断:内部定时器,/,计数器,T0,、,T1,的计数值,溢出时,置位中断请求标志,TF0,、,TF1,,,定时器中断请求标志和控制位存在于特殊功能寄存器,TCON,的高四位。硬件自动复位,TF0,、,TF1,标志位。,T2,计数溢出中断:内部定时器,/,计数器,T2,的计数值溢出时,置位中断请求标志,TF2,。必须用软件复位,TF2,标志位。,T2,捕获中断:当外部输入端口,T2EX,发生下降沿跳变时,只为,EXF2,,向,CPU,请求中断。必须用软件复位,EXF2,标志位。,7,第二节 AT89S52中断源,串行口通信中断:串行接口完成一帧的发送或接收时,置位请求标志,TI,或,RI,两个标志逻辑或后做为内部的一个中断源。,RI,和,TI,存在于特殊功能寄存器,SCON,的,最低二位。必须用软件复位,TI,、,RI,。,8,(LSB),(MSB),中断请求位相关寄存器,1、TCON,定时器控制寄存器,地址88H,可按位寻址,注意请求位的清除问题:,避免对一次事件的多次重复响应,9,IE0,外部中断,0,请求标志位,当检测到,P3.2,有从高到低的电平跳变时置,1,。,TF0,定时器,0,溢出(计数值由全,1,变全,0,)标志,响应中断后由处理器清零。,IE1,外部中断,1,请求标志位,当检测到,P3.3,有从高到低的电平跳变时置,1,。,TF1,定时器,1,溢出(计数值由全,1,变全,0,)标志,响应中断后由处理器清零。,TR0,定时器,0,运行控制位,,1,:运行,,0,:停止,TR1,定时器,1,运行控制位,,1,:运行,,0,:停止,IT0,外部中断,0,触发方式控制位,1:,跳变触发,0:,低电平触发,IT1,外部中断,1,触发方式控制位,1:,跳变触发,0:,低电平触发,10,(LSB),(MSB),中断请求位相关寄存器,2、SCON,串口控制寄存器,地址98H,可按位寻址,TI:完成一个串行帧的发送则 TI置1,需由软件清零。,RI:完成一个串行帧的接收则 RI置1,需由软件清零。,11,(LSB),(MSB),中断请求位相关寄存器,3、T2CON,定时器2控制寄存器,地址C8H,可按位寻址,TF2:定时器2溢出标志,响应中断后必须由软件清零。,EXF2:定时器2捕获中断标志,T2EX(P1.1)引脚产生下降沿,置位EXF2。需由软件清零。,12,第三节 中断控制,中断允许控制 IE(A8H),实现两级控制,注意:复位时,禁止所有中断,中断优先级控制 IP(B8H),每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。,13,中断允许寄存器,IE,(0A8H,可位寻址),EA,:,总允许位。,EA=0,:,禁止一切中断;,EA=1:,中断开放,各中断是否被允许有其对应的允许位确定。,ES,:,串行口中断允许位。,ES=1,:,允许,RI,、,TI,引发中断;,ES=0,:,禁止串口中断。,ET2,:定时器,T2,中断允许位。,1,:允许,,0,:禁止。,ET1,、,ET0,:,定时器,T1,、,T0,允许位。,1:,允许,,0:,禁止。,EX1,、,EX0,:,外中断,INT1,、,INT0,允许位。,1:,允许,,0:,禁止。,(LSB),(MSB),14,中断优先级寄存器IP(0B8H,可位寻址),PS,:,串行口中断优先级设定位;,1:,高,0:,低,PT2,:定时器,T2,中断优先级设定位;,1,:高,0,:低,PT1,、,PT0,:,定时器,T1,、,T0,中断优先级设定位;,1:,高,0:,低,PX1,、,PX0,:外中断,/INT1,、,0,中断优先级设定位;,1:,高,0:,低,(LSB),(MSB),PT2,15,一、主优先级规则,由于IP寄存器的设定,将8个中断源分为两个级别。中断的发生将遵循下面的2条基本原则:,1、低级中断在响应执行中,可以被高级中断所中断,反之则不能。,2、一个中断(不论是什么优先级)一旦得到响应,与它同级的中断则不能再中断它。,二、辅优先级规则,3、当CPU同时收到几个同一级别的中断要求时,CPU响应哪个中断源取决于硬件的查询顺序。,优先级规则,16,当,2,个以上中断先后发生时(不在同一个机器周期内),或者,当,2,个以上不同优先级中断同时发生时,,由,IP,寄存器决定哪个先被响应。,当,2,个以上同优先级中断同时发生时(在同一个机器周期内发生),,IP,寄存器已经不能决定哪个先被响应,要由内部查询顺序决定哪个先被响应。具体先后顺序如下:,IE0,TF0,IE1,TF1,RI+TI,TF2+EXF2,优先级规则,高,低,17,中断的响应过程,中断系统每个机器周期都顺序检查每一个中断源,若查询到某个被允许的中断请求标志位为1,如果不被下述条件所阻止,则将在下一个机器周期的转到响应的中断服务程序。,阻止条件:,1)CPU正在处理相同或更高级的中断请求;,2)现在的机器周期不是执行指令的最后一个机器周期(MOV R1,20H);,3)正在执行的指令是RETI或对IE、IP的写操作指令。(执行这些指令后,至少再执行一条指令后才会响应中断)。,18,CPU响应中断时完成工作,置位相应的优先级状态触发器(阻止同级和较低优先级的中断发生);,执行一条硬件子程序调用(内部),使控制转移到相应的中断入口地址;,PC的内容进栈(断点地址);,被响应的中断服务程序的入口地址送PC。,19,注意,各个中断源的中断入口地址均已由系统规定,不能改动。,中断源 入口地址,INT0 0003H,T0 000BH,INT1 0013H,T1 001BH,串行口 0023H,T2 002BH,C51 用interrupt n 来确定入口地址。即,入口地址=n*8+3,20,第四节 中断系统的C51编程方法,在主程序中对中断初始化,打开相应中断源的中断;(IE),设定中断优先级;(IP),若为外部中断,设定外部中断的触发方式;,启动产生中断的事件运行(如定时器),以便可以发生中断。,编写中断服务程序,正确使用 interrupt 关键字和中断号;,一般使用无入口参数无返回值的函数;,用全局变量在主程序和中断服务程序间交换信息。,21,8051的中断系统十分重要,C51使你能够用C来声明中断和编写中断服务程序,中断过程通过使用interrupt 关键字和中断号(0 到31)来实现,中断号告诉编译器中断程序的入口地址。对于8052,中断号对应着 IE 寄存器中的使能位,换句话说IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0。下表反映了这种关系。,interrupt关键字和中断号,22,中断号 interrupt n,23,第五节 外部中断及应用实例,24,第五节 外部中断及应用实例,IE0,、,IE1,:,中断请求标志,有两种方法使其置位,即电平和边沿。,IT0,(,IT1,),=0,:,低电平触发,,CPU,响应中断后无法自动清除请求位,IE0,、,IE1,。,低电平要保持到,CPU,响应后,退出中断服务程序前要保证,/INT0,、,/INT1,已经变成高电平。,IT0,(,IT1,),=1,:,边沿触发,,CPU,响应中断后自动清除请求位,IE0,、,IE1,。,高电平和低电平时间都必须大于,1Tm,25,4个独立按键,用中断方式识别。(相当于外部中断的简单扩充),P1.4,P1.5,P1.6,P1.7,VCC,10kx4,/INT1,外部中断的应用:例 1,26,#include/要用到sfr,sbit xIR0=P14;,sbit xIR1=P15;,sbit xIR2=P16;,sbit xIR3=P17;,main(),P1=0 xff;/P1输入,EA=1;EX1=1;IT1=1;/开INT1中断,边沿触发,for(;);/无限循环作为main的结束,程序代码,27,void delay(void),int i,j;,for(i=0;i10;i+)for(j=0;j1000;j+);,void key_press(void),interrupt 2,/INT1的中断服务程序,delay();,if(P1/延时约10ms去抖动,if(xIR0=0)proc_xIR0();/while(xIR0=0);不用等待键释放,if(xIR1=0)proc_xIR1();/*proc_xIR0()等函数未编写*/,if(xIR2=0)proc_xIR2();,if(xIR3=0)proc_xIR3();,return;/返回,28,外部中断的应用:例 2,8051单片机的P1口控制8个LED灯,要求8个灯循环移位点亮,当中断来时,灯全灭全亮交替变化6次(闪烁3次),然后继续循环移位点亮。,29,#include/要用到sfr,#include/_crol_(),sbit INT0=P32;,main(),P1=0 xfe;/P1.0上的LED亮,其余灭,EA=1;EX0=1;IT0=0;/开INT0中断,电平触发,for(;)/无限循环作为main的结束,int i,j;,for(i=0;i50;i+)for(j=0;j1000;j+);/延时一会,_crol_(P1,1);/P1左循环移1位,程序代码,30,void key_press(void)interrupt 0,/INT0的中断服务程序,int m,n,j;,for(m=0;m10;m+)for(n=0;n300;n+);,if(INT0=1)return;/延时约10ms去抖动,for(m=0;m3;m+),P1=0;/全亮,for(n=0;n100;n+)for(j=0;j500;j+);,P1=0 xff;/全灭,for(n=0;n100;n+)for(j=0;j500;j+);,P1=0 xfe;/回初始状态,while(INT0=0);/等键释放,要不会重复进入中断(电平触发),31,作业,P159
展开阅读全文