您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第5章 单片机的中断系统
第5章单片机的中断系统5.1中断的概念5.2中断控制系统5.3中断处理过程5.4中断编程及应用5.1中断的概念日常生活的中断现象举例某人正在看报电话铃响了去接电话继续接电话继续看报跑向厨房关煤气、灌开水水开了【实例1】单片机开关状态检测要求:若有按键压下→D1状态反转。常规办法#includereg51.hsbitp10=P1^0;int0_srv()interrupt0{p10=!p10;}main(){IT0=1;EX0=1;EA=1;while(1);}中断方法问题:1、主函数中没有调用中断函数,为何能自动执行?2、主函数中的变量赋值语句的作用?3、这种程序结构的意义?答案:1、当P3.2端口有脉冲下降沿出现时系统自动调用该中断函数;2、实现中断功能的管理命令;3、可实现多任务实时操作功能。#includereg51.hsbitp10=P1^0;int0_srv()interrupt0{p10=!p10;}main(){IT0=1;EX0=1;EA=1;while(1);}中断的概念:中断是计算机工作过程的随机事件中断源:引起中断的事件或设备称为中断源采用中断的优点:⑴分时操作⑵实时处理⑶故障处理如:良好的中断系统使处理机具有随机应变的能力,从而扩大应用范围,提高CPU效率51中断系统的特点:内容丰富,结构合理,逻辑性强,高效实用一、中断的一般功能1、中断的屏蔽与开放中断屏蔽:称为关中断,CPU不响应中断请求称为开中断,CPU可响应中断请求中断开放:2、中断响应与中断返回中断请求RETI主程序中断服务子程序继续执行主程序中断的响应与返回中断请求PC断点PC断点5.2中断控制系统3、中断优先中断开放的情况下,如果有几个中断请求同时发生,应首先响应中断优先级较高的中断4、中断嵌套低级中断请求RETI主程序高级中断服务子程序继续执行主程序高级中断请求中断的嵌套示意图RETI低级中断服务子程序低级中断服务子程序挂起低级中断挂起低级中断低级中断低级中断二、中断请求源5个中断源2个优先级2个外部中断3个内部中断INT0(P3.2)INT1(P3.3)T0T1UART与中断有关的特殊功能寄存器:IP:中断优先控制寄存器IE:中断允许控制寄存器TCON:定时/计数控制寄存器SCON:UART控制寄存器中断标志寄存器可编程,可控MCS–51中断要点1、定时/计数器控制寄存器TCONTCON(88H)TF1TF0IE1IT1IE0IT0INT1INT0触发方式控制位0低电平触发1边沿↓触发INT1INT0外部中断请求标志1有有效触发时0当CPU响应中断时T1T0溢出标志1计数器“+1”有溢出时,并向CPU请求中断0当CPU响应中断时,也可由指令清除TR1TR0中断请求标志可编程控制位TR1TR0在每个机器周期S5P2都采样引脚P3.3P3.2引脚00记录有无中断记录有无中断2、串行口控制寄存器SCONTI:串行口发送中断标志在方式0,串行发送到第8位结束时,由硬件置“1”;或在其他方式中,串行发送到停止位的开始时,由硬件置“1”,RI:串行口接收中断标志在方式0,串行接收到第8位结束时,由硬件置“1”;或在其他方式中,串行接收到停止位的开始时,由硬件置“1”,“1”发送完一帧数据后“1”接收完一帧数据后必须由软件清“0”必须由软件清“0”SCON(98H)TIRI三、中断控制1、中断允许寄存器IEEA//ESET1EX1ET0EX0INT0INT1T1T0UARTCPU0禁止1允许0禁止1允许总中断总中断中断中断IE(A8)ET2T2CPUIE的相应位被置“0”或“1”该相应中断即被“禁止”或“开放”2、中断优先级寄存器IP///PSPT1PX1PT0PX0IP(B8)ET2INT0INT1T1T0UART0低级1高级中断中断T23、优先级结构中断优先级控制遵循的两个基本原则:⑴一个正在执行的低级中断服务程序,能被高优先级中断请求所中断,但不能被同优先级中断请求所中断。⑵一个正在执行的高级中断服务程序,不能被任何中断请求所中断,直到返回。实现这两个原则的方法:中断系统内部设置了两个不可寻址的优先级状态触发器。一个指出正在处理的是:高优先级中断,并阻止所有其他中断;另一个指出正在处理的是:低优先级中断,并阻止了除高优先级中断外的其他任何中断。高优先级状态触发器低优先级状态触发器是不可寻址的当CPU响应高级中断,并进入中断服务时“1”“1”RETI“0”当CPU响应低级中断,并进入中断服务时“1”RETI“0”在同级的几个中断源中同时发生请求时,内部对同级的各中断源的优先级别有一个规定的查询顺序:外部中断请求INT0定时/计数器T0定时/计数器T1串行口UART定时/计数器T2外部中断请求INT1最高最低自然优先级自然优先级源允许中断系统总体逻辑结构总允许优先级自然优先级中断源自然优先级中断源查询硬件查询硬件低级中断请求送CPU矢量地址送PCIPIETCONSCONEX0ET0EX1ET1ESEAINT0INT1T0T1RXTXRITIIE0IE1TF0TF1IT1011010101010矢量地址送PC高级中断请求送CPUIT001中断标志中断标志INT01IE0自然优先级矢量地址送PC“+1”TF10自然优先级矢量地址送PCEA“+1”“+1”EX0ET11中断响应的三个条件:⑴CPU不是正在处理同级或高级中断请求⑵现行机器周期是所执行指令的最后一个机器周期⑶正在执行的指令不是RETI,或不在访问IE或IP外部中断请求INT0定时/计数器T0溢出定时/计数器T1溢出串行口UART定时/计数器T2溢出外部中断请求INT1中断入口地址:0003H000BH0013H001BH0023H002BH中断源矢量地址5.3中断处理过程外部中断响应时序与触发方式1、外部中断响应时序M1M3M4M5M2S5P1S5P2INT被采样并锁存到IE0IE1中CPU进行中断查询保护断点,长调用至入口中断服务①、中断响应顺利,不受阻,需要3个机器周期②、如果中断受阻,①正在处理同级或高级中断,这要视中断服务程序的长短②执行的指令不是最后一个机器周期,等待不超过3个周期③正在执行指令是RETI,或正访问IE、IP,则需返回主程序后,再执行一条主程序的指令才能响应该中断,等待不超过5个周期2、外部中断触发方式⑴电平触发方式⑵边沿触发方式若外部中断(当ITX=0时)被定义为电平触发方式其有效触发为低电平,该低电平维持到CPU响应该中断为止,中断返回之前,必须为高电平。否则CPU将再次响应该中断。若外部中断(当ITX=1时)被定义为边沿触发方式其有效触发为下降沿。在该触发方式中,CPU在一个机器周期采样为高电平,在下一机器周期采样为低电平,↓就立即置位外部中断请求标志。*无论是那种触发发方式,只要有有效触发,都会记录在相应的中断标志位中,若CPU即使暂不响应,中断标志也不会丢失,直到CPU响应该中断,该标志才会清除。有效触发标志位记录外部中断/INT0、/INT1的初始化确定外部中断源的触发方式对TCON寄存器中IT0、IT1进行位操作中断优先级确定对IP寄存器中PX0、PX1进行位操作对IE寄存器中EA、EX0、EX1进行位操作中断允许确定(开中断)注:初始化即对相关寄存器编程5.4中断编程及应用/INT1为边沿触发中断,低优先级的初始化编程。SETBIT1;/INT1为负脉冲触发中断源CLRPX1;/INT1为低优先级SETBEX1;开/INT1中断源SETBEA;开所有中断源注:初始化程序段在主程序中编写汇编完整程序结构•入口表程序ORG0000HLJMPMAIN;跳到主程序入口ORG0003HLJMPRINT0;跳到/INT0中服程序入口ORG000BHLJMPRT0;跳到T0中服程序入口ORG0013HLJMPRINT1;跳到/INT1中服程序入口ORG001BHLJMPRT1;跳到T1中服程序入口ORG0023HLJMPRPS;跳到串行口中服程序入口汇编完整程序结构•主程序(MAIN)MAIN:SETBEA;主程序入口…………SJMP$;主程序结束对与中断相关寄存器进行置位操作应用系统相关的指令语句•主程序的内容汇编完整程序结构•中断服务程序(RINT0)RINT0:PUSHACC;中断服务程序入口PUSHPSW;保护现场…………POPPSWPOPACC;恢复现场RETI;退出中断服务程序ORG0000HLJMPMAIN;跳到主程序入口ORG0003HLJMPRINT0;跳到/INT0中服程序入口……MAIN:SETBEA;主程序入口……SJMP$;主程序结束RINT0:PUSHACC;中断服务程序入口PUSHPSW;保护现场……POPACC;恢复现场RETI;退出中断服务程序……END;结束汇编表程序主程序中断服程序汇编完整程序结构C51中断函数的声明格式:void函数名(void)interruptn[usingm]interruptn,表示是关于中断源n的中断服务函数;usingm,表示该中断函数将使用第m组工作寄存器。缺省为当前工作寄存器组。中断号n中断源中断向量8n+30外部中断000003H1定时器00000BH2外部中断100013H3定时器10001BH4串行口00023H【注意】1、中断服务函数既没有返回值,也没有调用参数;2、中断服务函数只能由系统调用,不能被其他函数调用。C51中断程序声明将第4章实例2键控流水灯改用中断方式检测按键问题:当CPU运行于LED循环环节时,将因不能及时检测按键状态,而使按键操作动作不灵敏。实例3解决思路:采用中断监测按键状态,及时更新标志位。硬件改动:增加一只4输入与门电路,使按键闭合电平作为外部中断信号。软件改动参考程序将第4章实例3行列式键盘改用中断方式编程如何既能快速响应按键操作,又不过多占用CPU时间?中断扫描法——有键按下时才进行扫描查询,以获取按键键值。若无键按下,可不考虑键盘的存在。查询扫描法能快速响应按键动作,但需花费较多CPU机时。主函数获取键值keykey=-1?P2←键值显示码NYP2←黑屏显示码实例2分析:①增加一个与门,利用按键压下时的电平产生INT0中断请求信号;②键盘改在P1口(中断接P3.2)。#includereg51.hcharled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};//led字模charkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//键值bitkey_flag=0;voiddelay(unsignedinttime){}chargetKey(void){chark1=0,k2=0,i=0;P1=0xf0;delay(10);if(P1!=0xf0){k1=P1;delay(10);if(P1==k1){P1=0x0f;delay(10);k2=P1|k1;for(i=0;i16;i++){if(key_buf[i]==k2){returni;}}}}return-1;}完整程序int0_key()interrupt0{key_flag=1;}voidmain(void){charkey=0;P2=0x00;P1=0xf0;IT0=1;EX0=1;EA=1;while(1){if(key_flag){key=getKey();if(key!=-1)P2=led_mod[key];key_flag=0;P1=0xf0;}}}多外部中断源系统示例从前述可知,MCS-51单片机仅提供了两个外部中断输入端/INT0和/INT1,并规定其中服程序的入口地址为0003H和0013H,若外部设备需要两个以上的中断请求则中断源的扩展是必不可少的。用查询方式扩展中断源借用
本文标题:第5章 单片机的中断系统
链接地址:https://www.777doc.com/doc-3604070 .html