第四章_2 MCS-51单片机的内部资源及其编程 外部中断zxl

上传人:方*** 文档编号:253181131 上传时间:2024-11-30 格式:PPT 页数:36 大小:755.51KB
返回 下载 相关 举报
第四章_2 MCS-51单片机的内部资源及其编程 外部中断zxl_第1页
第1页 / 共36页
第四章_2 MCS-51单片机的内部资源及其编程 外部中断zxl_第2页
第2页 / 共36页
第四章_2 MCS-51单片机的内部资源及其编程 外部中断zxl_第3页
第3页 / 共36页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章,MCS-51,单片机的内部资源及其编程,单片机技术与应用,4-2,、,外部中断,8051,外部中断,中断,中断源,中断优先级,中断嵌套,8051,外部中断,中断:,当,CPU,正处理某项事务时,若外界或内部发生紧急事件,要求,CPU,暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。(堆栈),中断源,:向,CPU,提出中断请求的源称为中断源,外部跳变信号(下降延),外部低电平等(,0,),8051,外部中断,中断优先级,:,当几个中断源同时请求中断时,,CPU,应优先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级。在优先级高的中断请求处理完了以后。再响应优先级低的中断请求。,中断嵌套,:,当,CPU,正在处理一个优先级低的中断请求的时,如果发生另一个优先级比它高的中断请求,,CPU,能暂停当前处理的中断,转去处理优先级高的中断请求,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。,8051,中断,8051,单片机有,5,个,中断源,2,个,中断优先级,(2,级,中断嵌套,),优先级可通过编程实现,IE,(中断允许寄存器):中断源的中断请求是否能得到响应,受,IE,的控制;,IP,(中断优先级寄存器):各个中断源的优先级可由,IP,的各位来确定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。,8051,中断源,8051,五个中断源,INT0,中断(,P3.2,),T0,中断 (,P3.4,),INT1,中断(,P3.3,),T1,中断 (,P3.5,),串行中断(,P3.0,、,P3.1,),8051,中断入口(,ROM,)地址和优先级,中断源,中断号(,n,),中断入口地址(,8n+3,),中断优先级,INT0,中断,0,0003H,高,低,T0,中断,1,000BH,INT1,中断,2,0013H,T1,中断,3,001BH,串行口中断,4,0023H,T2,中断,5,002BH,例1,如图按下按钮,对输出灯取反,查询方式,中断方式,8051 INT0,中断机理,当,INT0,引脚输入如下信号:,下降沿(,IT0=1,)或,低电平(,IT0=0,),CPU,自动(硬件)产生中断标志(,IE0=1,),此时,若,INT0,中断允许(使能,EX0=1,,,EA=1,),则,CPU,立即停止当前程序,跳转到,INT0,对应的中断入口(,ROM,保留地址,0 x0003,)执行中断服务程序(中断服务程序后,CPU,自动对中断标志清零:,IE0=0,),待,INT0,中断服务程序执行完毕后再回原执行程序处;,若,INT0,中断未允许,则程序不能跳转到,INT0,中断入口,不执行中断服务程序(中断标志,IE0,不能自动清,0,)。,问提:中断标志,IE0,的产生与中断使能是否有关?,中断服务程序常见问题,中断服务程序代码过长,占了过多的进程;,定义全局标志变量:中断里设置标志,主程序根据标志执行程序,完成后清除该标志,中断端口不够用(8051只有2个中断,INT0、INT1);,更换,MPU,会扩展,INT0,中断方式执行流程,#include reg51.h,unsigned char i=0;,/*int0,中断服务程序*,/,void INT0_ISR(void)interrupt 0,delay(200);,if,(,(P3_2=0,),P1=+i;,/*,主函数*,/,void main(void),IT0=1;/,下降延中断,EX0=1;/int0,中断使能,EA=1;/,总中断使能,while(1);/,等待中断,主程序,中断响应,初始化中断,等待中断,中断服务程序,返回中断,自动清中断标志,INT0,查询方式,void main(void),IT0=1;,/EX0=1;EA=1;,while(1),/,查询方式,1,:,if(IE0=1),IE0=0;/,手动清中断标志,/P1=+I;,_-,P2=,LED_segbufi,P0=LED_biti,I+;,If(I=6),I=0,delay(500);,void main(void),while(1),/,查询方式,2,:,while(IE0=0),;/,等待,INT0,外部中断,IE0=0;/,手动清中断标志,/,8051,中断系统,与中断有关的,SFR,注,:*,表示可以位寻址,SFR,D7,D6,D5,D4,D3,D2,D1,D0,地址,*IP,-,-,PT2,PS,PT1,PX1,PT0,PX0,B8H,*IE,EA,-,ET2,ES,ET1,EX1,ET0,EX0,A8H,TMOD,GATE,C/T#,M1,M0,GATE,C/T#,M1,M0,89H,*TCON,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,88H,SCON,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,98H,PCON,SMOD,-,-,-,-,-,-,-,87H,TCON,:,定时计数器控制寄存器,TF1,、,TF0,:,T1,、,T0,溢出标志,TR1,、,TR0,:,T1,、,T0,启动控制位(,TR=1:,启动定时器),IE1,、,IE0,:,INT1,、,INT0,中断标志,IT1,、,IT0,:,INT1,、,INT0,触发方式控制位(,IT=1:,下降沿触发,,IT=0,:低电平触发),TF1,、,TF0,、,IE1,、,IE0,都具有自动清零功能。,D7,D6,D5,D4,D3,D2,D1,D0,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,SCON,:,串行口控制寄存器,SM0 SM1,串行模式选择,SM2,多机通讯允许位:方式,0,时,此位应该为,0,;模式,1,时,当接收到停止位时,该位将置位;方式,2,或方式,3,时,当接收的第,9,位数据为,1,时,将置位,REN,串行接收允许位,TB8,在模式,2,和模式,3,中,将被发送数据的第,9,位,RB8,:在方式,0,中,该位不起作用;在方式,1,中该位为接收数据的停止位;在方式,2,和方式,3,中为接收数据的第,9,位,TI,串行发送结束标志,由,软件,清零,RI,串行接收结束标志,由,软件,清零,D7,D6,D5,D4,D3,D2,D1,D0,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,IE,:,中断允许寄存器,EA,:使能标志位。,1:,所有中断使能;,0:,禁止所有中断,ET2,:,T2,中断使能,ES,:串行通信中断使能,ET1,:,T1,中断使能,EX1,:,INT1,中断使能,ET0,:,T0,中断使能,EX0,:,INT0,中断使能,D7,D6,D5,D4,D3,D2,D1,D0,EA,-,ET2,ES,ET1,EX1,ET0,EX0,IP,:,中断优先级寄存器,-,保留,-,保留,PT2,:,T2,中断优先级,PS,:串行通信中断优先级,PT1,:,T1,中断优先级,PX1,:,INT1,优先级,PT0,:,T0,中断优先级,PX0,:,INT0,优先级,D7,D6,D5,D4,D3,D2,D1,D0,-,-,PT2,PS,PT1,PX1,PT0,PX0,与中断有关的各位,PX0,、,PT0,、,PX1,、,PT1,、,PS,EX0,、,ET0,、,EX1,、,ET1,、,ES,、,EA,IT0,、,IT1,TR0,、,TR1,IE0,、,IE1,、,TF0,、,TF1,、,TI,、,RI,以上各位可位寻址,且均为高电平有效,8051,外部中断编程示例,#include reg51.h,/C51,中断程序框架,/*int0,中断服务程序*,/,void INT0_ISR(void)interrupt 0 using 0,/,中断服务程序,/,/*,主函数*,/,void main(void),IT0=1;,EX0=1;EA=1;/,打开中断源,while(1);/,等待中断,中断服务函数与寄存器的定义,为了满足在,C,语言源程序中直接编写中断服务程序的要求,,C51,编译器对函数的定义进行了扩展,增加了一个扩展关键字,interrupt,。它是函数定义时的一个选项,加上这个选项即可将一个函数定义成中断服务函数。,定义格式为:,函数类型 函数名(形式参数表),interrupt n using n,中断服务函数与寄存器的定义,函数类型 函数名(形式参数表),interrupt n using n,关键字,interrupt,后面的,n,是中断号,,n,的范围为,0,31,。编译器从,8n+3,处产生中断向向量,具体的中断号,n,和中断向量取决于,8051,单片机芯片型号,常用中断源和中断向量如表所示。,中断号,n,中断源,中断向量,8n+3,0,INT0,0003H,1,T0,000BH,2,INT1,0013H,3,T1,001BH,4,串行口,0023H,中断服务函数与寄存器的定义,工作寄存器:,8051,片内,RAM,中有,4,个工作寄存器组,每个寄存器组中含,8,个工作寄存器(,R0,R7,)。,C51,编译器扩展了一个关键字,using,,专门用来选择,8051,单片机的工作寄存器组。,在定义一个函数时,,using,后面的,n,是一个,0,3,的常数,分别表示,4,个功能完全一样的工作寄存器组。,在定义一个函数时,,using,是一个选项,若缺省编译器自动分配一个寄存器组作绝对寄存器组访问。需要注意的是,关键字,using,和,interrupt,的后面都不允许跟带运算符的表达式,。,中断服务函数与寄存器的定义,void INT0_ISR(void)interrupt 0 ,void TIMER0_ISR(void)interrupt 1 ,void INT1_ISR(void)interrupt 2 ,void TIMER1_ISR(void)interrupt 3 ,void UART_ISR(void)interrupt 4 ,中断服务函数与寄存器的定义,_,Keil,C51,命令,DEFINE BUTTON,(定义按钮)命令,定义,:,DEFINE BUTTON,“,按钮名,”,,,“,命令,”,在,Debug-Function Editor,(,Open,Ini,File,)中定义外中断按钮:,define button INT0(P3.2),PORT3=PORT30 x04,define button T0(P3.4),PORT3=PORT30 x10,define button INT1(P3.3),PORT3=PORT30 x08,define button T1(P3.5),PORT3=PORT30 x20,每按钮一次对,P3.2,取反,删除,:,KILL BUTTON n,define button,“,clr,drtr,”,”,dptr,=0,”,kill button 1,中断服务函数与寄存器的定义,_,Keil,C51,命令,EVAL,EVAL,(,1/256,),0 x00,EVAL,(,256/256,),0 xFF,PORT3 0 xFF,ex0_isr_counter,询问变量的值,中断如何扩充,1,定时器中断作为外部中断使用,把,8051,的,T1,、,T0,用作对外部脉冲计数方式。每当,P3.4,(,T0,)或,P3.3,(,T1,)引脚上发生负跳变时,,T1,和,T0,的计数器加,1,。利用这个特性,可以把,P3.4,和,P3.3,引脚作为外部中断请求输入线,而定时器的溢出中断作为外部中断请求标志。,T0,(,P3.4,),Vcc,中断如何扩充,1,定时器中断作为外部中断使用(软件),定时器,T1,对外部计数
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!