第四章_2MCS51单片机的内部资源及其编程外部中断zxl_第1页
第四章_2MCS51单片机的内部资源及其编程外部中断zxl_第2页
第四章_2MCS51单片机的内部资源及其编程外部中断zxl_第3页
第四章_2MCS51单片机的内部资源及其编程外部中断zxl_第4页
第四章_2MCS51单片机的内部资源及其编程外部中断zxl_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、外部中断外部中断80518051外部中断外部中断l中断中断l中断源中断源l中断优先级中断优先级l中断嵌套中断嵌套80518051外部中断外部中断l中断:中断:当当CPUCPU正处理某项事务时,若外界或内部发生紧急事件,要正处理某项事务时,若外界或内部发生紧急事件,要求求CPUCPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。(堆栈)样的过程称为中断。(堆栈) l中断源中断源:向:向CPUCPU提出中断请求的

2、源称为中断源提出中断请求的源称为中断源l外部跳变信号(下降延)外部跳变信号(下降延)l外部低电平等外部低电平等 (0 0)80518051外部中断外部中断l中断优先级中断优先级: :当几个中断源同时请求中断时,当几个中断源同时请求中断时,CPUCPU应优先响应最需应优先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级。在紧急处理的中断请求。为此,需要规定各个中断源的优先级。在优先级高的中断请求处理完了以后。再响应优先级低的中断请求。优先级高的中断请求处理完了以后。再响应优先级低的中断请求。l中断嵌套中断嵌套: :当当CPUCPU正在处理一个优先级低的中断请求的时,如果发正在处理一个

3、优先级低的中断请求的时,如果发生另一个优先级比它高的中断请求,生另一个优先级比它高的中断请求,CPUCPU能暂停当前处理的中断,能暂停当前处理的中断,转去处理优先级高的中断请求,待处理完以后,再回到原来正在转去处理优先级高的中断请求,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。处理称为中断嵌套。 8051中断l80518051单片机有单片机有l5 5个个中断源中断源l2 2个个中断优先级中断优先级(2(2级级中断嵌套中断嵌套),),优先级可通过编程实现优先级可通过编程实现lIEIE

4、(中断允许寄存器):中断源的中断请求是否能得到响应,(中断允许寄存器):中断源的中断请求是否能得到响应,受受IEIE的控制;的控制;lIPIP(中断优先级寄存器):各个中断源的优先级可由(中断优先级寄存器):各个中断源的优先级可由IPIP的各位的各位来确定;同一优先级中的各中断源同时请求中断时,由内部的来确定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。查询逻辑来确定响应的次序。 8051中断源l80518051五个中断源五个中断源lINT0INT0中断(中断(P3.2P3.2)lT0T0中断中断 (P3.4P3.4)lINT1INT1中断(中断(P3.3P3.3)

5、lT1T1中断中断 (P3.5P3.5)l串行中断(串行中断(P3.0P3.0、P3.1P3.1)8051中断入口(ROM)地址和优先级中断源中断源中断号(中断号(n n) 中断入口地址(中断入口地址(8n+38n+3)中断优先级中断优先级INT0INT0中断中断0 00003H0003H高高低低T0T0中断中断1 1000BH000BHINT1INT1中断中断2 20013H0013HT1T1中断中断3 3001BH001BH串行口中断串行口中断4 40023H0023HT2T2中断中断5 5002BH002BH例例1l如图按下按钮,对输出灯取反l查询方式l中断方式8051 INT0中断机理

6、中断机理l当当INT0INT0引脚输入如下信号:引脚输入如下信号:l下降沿(下降沿(IT0=1IT0=1)或)或l低电平(低电平(IT0=0IT0=0)lCPUCPU自动(硬件)产生中断标志(自动(硬件)产生中断标志(IE0=1IE0=1)此时此时若若INT0INT0中断允许(使能中断允许(使能EX0=1EX0=1,EA=1EA=1),则),则CPUCPU立即停止当前程序,立即停止当前程序,跳转到跳转到INT0INT0对应的中断入口(对应的中断入口(ROMROM保留地址保留地址0 x00030 x0003)执行中断服务)执行中断服务程序(中断服务程序后程序(中断服务程序后CPUCPU自动对中断

7、标志清零:自动对中断标志清零:IE0=0IE0=0),待),待INT0INT0中断服务程序执行完毕后再回原执行程序处;中断服务程序执行完毕后再回原执行程序处;若若INT0INT0中断未允许,则程序不能跳转到中断未允许,则程序不能跳转到INT0INT0中断入口,不执行中断中断入口,不执行中断服务程序(中断标志服务程序(中断标志IE0IE0不能自动清不能自动清0 0)。)。问提:中断标志问提:中断标志IE0IE0的产生与中断使能是否有关?的产生与中断使能是否有关?中断服务程序常见问题中断服务程序常见问题l中断服务程序代码过长,占了过多的进程;l定义全局标志变量:中断里设置标志,主程序根据标志执行程

8、序,完成后清除该标志l中断端口不够用(8051只有2个中断INT0、INT1);l更换MPUl会扩展INT0中断方式执行流程#include reg51.hunsigned 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) ; /等待中断等待中断主程序主程序中断响应中断响应初

9、始化中断初始化中断等待中断等待中断中断服务程序中断服务程序返回中断返回中断自动清中断标志自动清中断标志INT0 查询方式查询方式void main(void)void main(void) IT0=1; IT0=1; /EX0=1;EA=1;/EX0=1;EA=1;while(1)while(1) /查询方式查询方式1 1:if(IE0= =1)if(IE0= =1) IE0=0;/ IE0=0;/手动清中断标志手动清中断标志 /P1=+I;/P1=+I; _-_-P2=LED_segbufiP2=LED_segbufiP0=LED_bitiP0=LED_bitiI+;I+;If(I=6)If

10、(I=6)I=0I=0delay(500);delay(500); void main(void)void main(void) while(1)while(1) /查询方式查询方式2 2:while(IE0= =0)while(IE0= =0) ; /; /等待等待INT0INT0外部中断外部中断 IE0=0; /IE0=0; /手动清中断标志手动清中断标志/ 8051中断系统与中断有关的SFRl注注: :* *表示可以位寻址表示可以位寻址SFRD7D6D5D4D3D2D1D0地址地址*IP- -PT2PSPT1PX1PT0PX0B8H*IEEA-ET2ESET1EX1ET0EX0A8HTM

11、ODGATEC/T#M1M0GATEC/T#M1M089H*TCONTF1TR1TF0TR0IE1IT1IE0IT088HSCONSM0SM1SM2RENTB8RB8TIRI98HPCONSMOD-87HTCON:定时计数器控制寄存器lTF1TF1、TF0 TF0 :T1T1、T0T0溢出标志溢出标志 lTR1TR1、TR0 TR0 :T1T1、T0T0启动控制位(启动控制位(TR=1:TR=1:启动定时器)启动定时器) lIE1IE1、IE0 IE0 :INT1INT1、INT0INT0中断标志中断标志lIT1IT1、IT0 IT0 :INT1INT1、INT0INT0触发方式控制位(触发方

12、式控制位(IT=1:IT=1:下降沿触发,下降沿触发,IT=0IT=0:低电平触发):低电平触发)lTF1TF1、TF0TF0、IE1IE1、IE0IE0都具有自动清零功能。都具有自动清零功能。D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0SCON:串行口控制寄存器lSM0 SM1SM0 SM1串行模式选择串行模式选择lSM2 SM2 多机通讯允许位:方式多机通讯允许位:方式0 0时时, ,此位应该为此位应该为0 0;模式;模式1 1时时, ,当接当接收到停止位时收到停止位时, ,该位将置位;方式该位将置位;方式2 2或方式或方式3 3时时, ,当接收的第当接

13、收的第9 9位位数据为数据为1 1时时, ,将置位将置位lREN REN 串行接收允许位串行接收允许位lTB8 TB8 在模式在模式2 2和模式和模式3 3中中, ,将被发送数据的第将被发送数据的第9 9位位lRB8RB8:在方式:在方式0 0中中, ,该位不起作用;在方式该位不起作用;在方式1 1中该位为接收数据的中该位为接收数据的停止位;在方式停止位;在方式2 2和方式和方式3 3 中为接收数据的第中为接收数据的第9 9 位位lTI TI 串行发送结束标志,由串行发送结束标志,由软件软件清零清零lRI RI 串行接收结束标志,由串行接收结束标志,由软件软件清零清零D7D6D5D4D3D2D

14、1D0SM0SM0SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRIIE:中断允许寄存器lEAEA: 使能标志位。使能标志位。 1:1:所有中断使能;所有中断使能;0:0:禁止所有中断禁止所有中断lET2ET2:T2T2中断使能中断使能lESES: 串行通信中断使能串行通信中断使能lET1ET1:T1T1中断使能中断使能lEX1EX1:INT1INT1中断使能中断使能lET0ET0:T0T0中断使能中断使能lEX0EX0:INT0INT0中断使能中断使能D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0EAEA- -ET2ET2ESESET1ET1EX1

15、EX1ET0ET0EX0EX0IP:中断优先级寄存器l- - 保留保留l- - 保留保留lPT2PT2:T2T2中断优先级中断优先级lPSPS: 串行通信中断优先级串行通信中断优先级lPT1PT1:T1T1中断优先级中断优先级lPX1PX1:INT1INT1优先级优先级lPT0PT0:T0T0中断优先级中断优先级lPX0PX0:INT0INT0优先级优先级D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0- - - -PT2PT2PSPSPT1PT1PX1PX1PT0PT0PX0PX0与中断有关的各位与中断有关的各位lPX0PX0、PT0PT0、PX1PX1、PT1PT1、PSP

16、SlEX0EX0、ET0ET0、EX1EX1、ET1ET1、ESES、EAEAlIT0IT0、IT1IT1lTR0TR0、TR1TR1lIE0IE0、 IE1 IE1 、TF0TF0、TF1TF1、 TI TI 、RIRIl以上各位可位寻址,且均为高电平有效以上各位可位寻址,且均为高电平有效8051外部中断编程示例外部中断编程示例#include reg51.h/C51 中断程序框架中断程序框架/*int0中断服务程序中断服务程序*/void INT0_ISR (void) interrupt 0 using 0 /中断服务程序中断服务程序 /*主函数主函数*/void main (void)

17、 IT0=1; EX0 = 1; EA = 1; / 打开中断源打开中断源 while (1) ; /等待中断等待中断中断服务函数与寄存器的定义l为了满足在为了满足在C C语言源程序中直接编写中断服务程序的要求,语言源程序中直接编写中断服务程序的要求,C51C51编编译器对函数的定义进行了扩展,增加了一个扩展关键字译器对函数的定义进行了扩展,增加了一个扩展关键字interruptinterrupt。它是函数定义时的一个选项,加上这个选项即可将一个函数定义它是函数定义时的一个选项,加上这个选项即可将一个函数定义成中断服务函数。成中断服务函数。l定义格式为:定义格式为: 函数类型函数类型 函数名(

18、形式参数表)函数名(形式参数表) interrupt n using n interrupt n using n 中断服务函数与寄存器的定义l函数类型函数类型 函数名(形式参数表)函数名(形式参数表) interrupt n using n interrupt n using n l关键字关键字interruptinterrupt后面的后面的n n是中断号,是中断号,n n的范围为的范围为0 03131。编译器从。编译器从8n+38n+3处处产生中断向向量,具体的中断号产生中断向向量,具体的中断号n n和中断向量取决于和中断向量取决于80518051单片机芯片型号,单片机芯片型号,常用中断源和

19、中断向量如表所示。常用中断源和中断向量如表所示。 中断号中断号n n中断源中断源中断向量中断向量8n+38n+30 0INT0INT00003H0003H1 1T0T0000BH000BH2 2INT1INT10013H0013H3 3T1T1001BH001BH4 4串行口串行口0023H0023H中断服务函数与寄存器的定义l工作寄存器:工作寄存器:80518051片内片内RAMRAM中有中有4 4个工作寄存器组,每个寄存器组中含个工作寄存器组,每个寄存器组中含8 8个个工作寄存器(工作寄存器(R0R0R7R7)。)。lC51C51编译器扩展了一个关键字编译器扩展了一个关键字usingusi

20、ng,专门用来选择,专门用来选择80518051单片机的工作寄单片机的工作寄存器组。存器组。l在定义一个函数时,在定义一个函数时,usingusing后面的后面的n n是一个是一个0 03 3的常数,分别表示的常数,分别表示4 4个功能个功能完全一样的工作寄存器组。完全一样的工作寄存器组。l在定义一个函数时,在定义一个函数时,usingusing是一个选项,若缺省编译器自动分配一个寄存是一个选项,若缺省编译器自动分配一个寄存器组作绝对寄存器组访问。需要注意的是,关键字器组作绝对寄存器组访问。需要注意的是,关键字usingusing和和interruptinterrupt的的后面都不允许跟带运算

21、符的表达式后面都不允许跟带运算符的表达式。中断服务函数与寄存器的定义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命令lDEFINE BUTTONDEFINE BUTTON(定义按钮)命令(定义按钮)命令l定义定义:DEFINE BUTTON DEFINE BUTTON

22、“按钮名按钮名”,“命令命令” 在在Debug-Function EditorDebug-Function Editor(Open Ini FileOpen Ini File)中定义)中定义外中断按钮:外中断按钮: define button INT0(P3.2) , PORT3=PORT30 x04define button INT0(P3.2) , PORT3=PORT30 x04 define button T0(P3.4) , PORT3=PORT30 x10 define button T0(P3.4) , PORT3=PORT30 x10 define button INT1(P3

23、.3) , PORT3=PORT30 x08 define button INT1(P3.3) , PORT3=PORT30 x08 define button T1(P3.5) , PORT3=PORT30 x20 define button T1(P3.5) , PORT3=PORT30 x20 每按钮一次对每按钮一次对P3.2P3.2取反取反l删除删除:KILL BUTTON nKILL BUTTON n define button define button “clr drtrclr drtr”, ,”dptr=0dptr=0” kill button 1 kill button 1

24、中断服务函数与寄存器的定义_ Keil C51命令lEVALEVALEVAL EVAL (1/2561/256) 0 x000 x00EVAL EVAL (256/256256/256) 0 xFF0 xFFPORT3 0 xFFPORT3 0 xFFex0_isr_counter ex0_isr_counter 询问变量的值询问变量的值中断如何扩充1l定时器中断作为外部中断使用定时器中断作为外部中断使用 l把把80518051的的T1 T1 、T0T0用作对外部脉冲计数方式。每当用作对外部脉冲计数方式。每当P3.4P3.4(T0T0)或)或P3.3P3.3(T1T1)引脚上发生负跳变时,引脚

25、上发生负跳变时, T1 T1 和和T0T0的计数器加的计数器加1 1。利用这个特性,可以把。利用这个特性,可以把P3.4P3.4和和P3.3P3.3引脚作为外部中断请求输入线,而定时器的溢出中断作为外引脚作为外部中断请求输入线,而定时器的溢出中断作为外部中断请求标志。部中断请求标志。 T0(P3. 4)Vcc中断如何扩充1l定时器中断作为外部中断使用(软件)定时器中断作为外部中断使用(软件) 定时器定时器T1T1对外部计数对外部计数/ /* *TH1TH1、TL1TL1采用采用1616进制赋值进制赋值* */ /void int0(void) interrupt 3void int0(void

26、) interrupt 3 / /* *中断服务程序中断服务程序* */ / void main(void)void main(void) TMOD= TMOD=(TMOD&0 x0f)|0 x60;TMOD&0 x0f)|0 x60; ET1=1; EA=1; TR1=1; ET1=1; EA=1; TR1=1; TH1=0 xFF; / TH1=0 xFF; /* *TH1=-1/256-1TH1=-1/256-1; * */ / TL1=0 xFF; / TL1=0 xFF; /* *TL1=-1%256TL1=-1%256; * */ / while(1) while(

27、1) ;T1(P3. 2)中断如何扩充2l中断和查询结合的方式中断和查询结合的方式中断如何扩充2#include #include sbit LED_A=P10;sbit LED_A=P10;sbit LED_B=P11;sbit LED_B=P11;sbit LED_C=P12;sbit LED_C=P12;sbit IA=P13;sbit IA=P13;sbit IB=P14;sbit IB=P14;sbit IC=P15;sbit IC=P15;中断如何扩充2void main(void)void main(void) IT0=1; IT0=1;IT1=1;IT1=1;EX0=1;EX0

28、=1;EX1=1;EX1=1;EA=1;EA=1;LED_A=0;LED_B=0;LED_C=0;LED_A=0;LED_B=0;LED_C=0;IA=1;IB=1;IC=1;IA=1;IB=1;IC=1;while(1);while(1); 中断如何扩充2void int0(void) interrupt 0void int0(void) interrupt 0 LED_A=0;LED_B=0;LED_C=0; LED_A=0;LED_B=0;LED_C=0;IE1=0;IE1=0;EX1=1;EX1=1; void int1(void) interrupt 2void int1(void)

29、 interrupt 2 EX1=0; EX1=0; if(IA=0) LED_A=1;if(IA=0) LED_A=1;else if(IB=0) LED_B=1;else if(IB=0) LED_B=1;else if(IC=0) LED_C=1;else if(IC=0) LED_C=1; 中断如何扩充3l利用硬件扩充多个中断源利用硬件扩充多个中断源l采用一个采用一个8/38/3优先编码器优先编码器74LS14874LS148,把多个中断源信号作为一个中断效果很好。,把多个中断源信号作为一个中断效果很好。 lI7-I0I7-I0优先级逐步降低优先级逐步降低lGSGS为标志位:判断是否有有效输入为标志位:判断是否有有效输入中断如何扩充3l软件设计思路软件设计思路#include #include unsigned char status;unsigned char

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论