第10讲-51单片机中断系统课件

上传人:无*** 文档编号:241638923 上传时间:2024-07-12 格式:PPT 页数:37 大小:923.50KB
返回 下载 相关 举报
第10讲-51单片机中断系统课件_第1页
第1页 / 共37页
第10讲-51单片机中断系统课件_第2页
第2页 / 共37页
第10讲-51单片机中断系统课件_第3页
第3页 / 共37页
点击查看更多>>
资源描述
第十讲51单片机中断系统一、单片机中断系统1.中断的定义 所所谓谓中中断断,是是指指CPU正正在在处处理理某某些些事事务务的的时时候候,外外部部又又发发生生了了某某一一事事件件,请请求求CPU及及时时处处理理。于于是是,CPU暂暂时时中中断断当当前前的的工工作作,转转而而处处理理所所发发生生的的事事件件。处处理理完完毕毕,再再回回到到原原来来被被中中断断的的地地方方,继继续续原原来来的的工作。这样的过程,称为中断。工作。这样的过程,称为中断。中断示意图中断方式流程图中断方式流程图中断嵌套流程图中断嵌套流程图中断源中断源 中断申请中断申请开放中断开放中断保护现场保护现场中断服务中断服务恢复现场恢复现场中断返回中断返回2.中断涉及的几个环节(单片机最多只能实现二级嵌套单片机最多只能实现二级嵌套)手机手机铃声响了 提醒你去接你准备去接电话一开始你正在电脑上看视频在电脑上暂停我的这个视频你开始接电话挂断电话 回来继续看我的视频3.AT89S52单片机的中断源 S52S52系列有系列有6 6个中断源个中断源(比(比S51S51多一个多一个T2T2)2 2个外部中断请求:个外部中断请求:INT0INT0,INT1INT1 3 3个片内定时器个片内定时器/计数器计数器T0T0、T1T1和和T2T2中断请求:中断请求:TF0TF0,TF1TF1,(TF2TF2)1 1个串行口中断请求:个串行口中断请求:TI/RITI/RI1.定时器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 TF1 TR1 TF0 TR0 IE1IE1 IT1 IT1 IE0IE0 IT0 IT0TCONTCONTF0/TF1TF0/TF1:定时器定时器0/0/定时器定时器1 1溢出溢出中断申请标志位:中断申请标志位:=0=0:定时器未溢出;定时器未溢出;=1=1:定时器溢出申请中断,进中断后定时器溢出申请中断,进中断后自动清零自动清零。TR0/TR1TR0/TR1:定时器运行定时器运行启停启停控制位:控制位:=0=0:定时器停止运行;定时器停止运行;=1=1:定时器启动运行。定时器启动运行。是管理定时器工作的是管理定时器工作的SFRSFR(其中低其中低4 4位管外部中断,位管外部中断,高高4 4位管定时器位管定时器/计数器中断)计数器中断)二、与中断相关的特殊功能寄存器二、与中断相关的特殊功能寄存器IE0/IE1IE0/IE1:外部中断申请标志位:外部中断申请标志位:=0=0:没有外部中断申请;没有外部中断申请;=1=1:有外部中断申请。有外部中断申请。IT0/IT1IT0/IT1:外部中断请求的外部中断请求的触发方式触发方式选择位:选择位:=0=0:在:在INT0/INT1INT0/INT1端申请中断的信号低电平触发端申请中断的信号低电平触发;=1 =1:在:在INT0/INT1INT0/INT1端申请中断的信号负跳变触发端申请中断的信号负跳变触发.TF1 TR1 TF0 TR0 TF1 TR1 TF0 TR0 IE1IE1 IT1 IT1 IE0IE0 IT0 IT0TCONTCON EA EA ET2 ES ET1 EX1 ET0 EX0 ET2 ES ET1 EX1 ET0 EX0IEIE2.2.中断允许寄存器中断允许寄存器IE(0A8H)IE(0A8H)EX0/EX1/ET1/ET0/ES EX0/EX1/ET1/ET0/ES 位:位:分别是分别是INT0/1INT0/1,Timer0/1Timer0/1,串行口的中断允串行口的中断允 许控制位许控制位:=0 =0 时禁止中断;时禁止中断;=1=1 时允许中断。时允许中断。ET2ET2:T2T2中断允许控制位(仅中断允许控制位(仅5252系列有)系列有)=0=0 时禁止中断;时禁止中断;=1=1 时允许中断。时允许中断。EAEA:总的中断允许控制位(总的中断允许控制位(总开关总开关):):=0=0 时禁止全部中断;时禁止全部中断;=1=1 时允许中断。时允许中断。PT2 PS PT1 PT2 PS PT1 PX1 PX1 PT0 PX0PT0 PX0IPIPPX0/PX1PX0/PX1:INT0/1INT0/1优先级控制位:优先级控制位:=0=0 时属低优先级;时属低优先级;=1=1 时属高优先级。时属高优先级。PT0/PT1/PT2PT0/PT1/PT2:T0/1/2T0/1/2中断优先级控制位:中断优先级控制位:=0=0 时属低优先级;时属低优先级;=1=1 时属高优先级。时属高优先级。PS1PS1:串行口中断优先级控制位:串行口中断优先级控制位:=0=0 时属低优先级;时属低优先级;=1=1 时属高优先级。时属高优先级。3.3.中断优先级控制寄存器中断优先级控制寄存器IP (0B8H)IP (0B8H)【例例】PX1=1;外中断;外中断INT1被设置成高优先级被设置成高优先级 PT0=0;定时器;定时器T0被设置成低优先级被设置成低优先级总线方式总线方式IP=0 x04;/IP=0000 0100 将将PX1设为设为1 PT0设为设为0;对同时发生多个中断申请时:对同时发生多个中断申请时:不同优先级的中断同时申请不同优先级的中断同时申请(很难遇到很难遇到)先高后低先高后低相同优先级的中断同时申请相同优先级的中断同时申请(很难遇到很难遇到)按序执行按序执行正处理低优先级中断又接到高级别中断正处理低优先级中断又接到高级别中断 高打断低高打断低正处理高优先级中断又接到低级别中断正处理高优先级中断又接到低级别中断 高不理低高不理低4.中断优先级处理原则三、中断系统硬件结构四、单片机的中断矢量与优先级四、单片机的中断矢量与优先级中断矢量:中断矢量:单片机的单片机的 6 6 个中断源分别对应有各个中断源分别对应有各自的中断服务程序入口地址自的中断服务程序入口地址中断矢量中断矢量000BH000BHTF0TF0定时定时/计数器计数器0(T0)0(T0)002BH002BHTF2TF2定时定时/计数器计数器2(T2)2(T2)0023H0023HRI/TIRI/TI串行口接收串行口接收/发送发送001BH001BHTF1TF1定时定时/计数器计数器1(T1)1(T1)0013H0013HIE1IE1外部中断外部中断1(INT1)1(INT1)0003H0003HIE0IE0外部中断外部中断0(INT0)0(INT0)中断优先级中断优先级中断矢量中断矢量申请标志申请标志中中 断断 源源最高优先级最高优先级最低优先级最低优先级五、外部中断(INT0,INT1)申请过程1.实验开发板中的外部中断接口电路实验开发板中的外部中断接口电路K1:外部中断:外部中断1的按键,接的按键,接P3.2线线K2:外部中断:外部中断2的按键,接的按键,接P3.3线线2.外部中断的申请过程外部中断的申请过程在在CPUCPU已经开放了外部中断允许的前提下已经开放了外部中断允许的前提下;在在INT0/INT1INT0/INT1引脚输入一个引脚输入一个负脉冲负脉冲或或低电平低电平;TCONTCON寄存器中的寄存器中的IE0/IE1IE0/IE1标志位标志位自动变自动变“1 1”,检测到检测到IE0/IE1IE0/IE1变变“1 1”后后,将产生指令:将产生指令:执行中断服务程序执行中断服务程序;并将并将IE0/IE1IE0/IE1标志位标志位自动清自动清“0 0”,以备下次申请。以备下次申请。1interrupt m 修饰符修饰符 interrupt m C51中断函数必须通过它进行修饰。在中断函数必须通过它进行修饰。在C51程序设计中,当函数定义时用了程序设计中,当函数定义时用了interrupt m修饰符,系统编译修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并时把对应函数转化为中断函数,自动加上程序头段和尾段,并按按51系统中断的处理方式自动把它安排在程序存储器中的相应系统中断的处理方式自动把它安排在程序存储器中的相应位置。位置。在该修饰符中,在该修饰符中,m的取值为的取值为031,对应的中断情况如下:,对应的中断情况如下:0外部中断外部中断01定时定时/计数器计数器T02外部中断外部中断13定时定时/计数器计数器T14串行口中断串行口中断5定时定时/计数器计数器T2其它值预留。其它值预留。六、六、C51中断函数的编写中断函数的编写C51编译器从绝对地址编译器从绝对地址8m+3处产生一个中断向量,其中处产生一个中断向量,其中m为中断号,也即为中断号,也即interrupt后面的数字。该向量包含一后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。个到中断函数入口地址的绝对跳转。3.中断函数中断函数注意注意如下:如下:(1)中断函数不能进行参数传递,如果中断函数中包含中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。任何参数声明都将导致编译出错。(2)中断函数中断函数没有返回值没有返回值,如果企图定义一个返回值将,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。类型,以明确说明没有返回值。2.using n修饰符修饰符 修饰符修饰符using n用于指定本函数内部使用的工作寄用于指定本函数内部使用的工作寄存器组,其中存器组,其中n的取值为的取值为03,表示寄存器组号。,表示寄存器组号。可以省略可以省略 省略后系统自动选择省略后系统自动选择七、七、C51编程举例编程举例本节通过几个例程介绍有关中断应用的程序的编写。本节通过几个例程介绍有关中断应用的程序的编写。1.单一外中断的应用单一外中断的应用【例例】在在51单单片片机机的的P1口口上上接接有有8只只LED。在在外外部部中中断断0输输入入引引脚脚P3.2(INT0*)引引脚脚接接有有一一只只按按钮钮开开关关K1。程程序序要要求求将将外外部部中中断断0设设置置为为负负跳跳沿沿触触发发。在在程程序序启启动动时时,P1口口上上的的8只只LED亮亮。按按一一次次按按钮钮开开关关K1,使使引引脚脚接接地地,产产生生一一个个负负跳跳沿沿触触发发的的外外中中断断0中中断断请请求求,在在中中断断服服务务程程序序中中,让让低低4位位的的LED和高和高4位的位的LED交替闪烁。具体电路如下图所示。交替闪烁。具体电路如下图所示。1819控制8只LED交替闪烁的电路参考程序如下:参考程序如下:#include void Delay(unsigned int i)/*延时函数延时函数Delay(),i为形式参数,不为形式参数,不能赋初值能赋初值*/unsigned int j;for(;i 0;i-)for(j=0;j333;j+)/*晶振为晶振为12MHz,j的选择与晶振频率有关的选择与晶振频率有关*/;/*空函数空函数*/void main()/*主函数主函数*/EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方为跳沿触发方式式*/P1=0;/*P1口的口的8只只LED全亮全亮*/20While(1)/*循环循环*/void int0()interrupt 0 using 0 /*外中断外中断0的中断服务函数的中断服务函数*/EX0=0;/*禁止外部中断禁止外部中断0中断中断*/P1=0 x0f;/*低低4位位LED灭,高灭,高4位位LED亮亮*/Delay(800);/*延时延时800ms*/P1=0 xf0;/*高高4位位LED灭,低灭,低4位位LED亮亮*/Delay(800);/*延时延时800ms*/EX0=1;/*中断返回前,打开外部中断中断返回前,打开外部中断0中断中断*/本例程包含了两个部分,一是中断系统初始化部分,另一是本例程包含了两个部分,一是中断系统初始化部分,另一是中断处理服务函数部分。中断处理服务函数部分。212.两个外中断的应用两个外中断的应用当多个中断源时,只需增加相应的中断服务函数即可。例当多个中断源时,只需增加相应的中断服务函数即可。例5-3是是处理两个外中断请求的例子处理两个外中断请求的例子【例例】如下图所示,在如下图所示,在51单片机的单片机的P1口上接有口上接有8只只LED。在外。在外部中断部中断0输入输入引脚引脚P3.2(INT0*)引脚接有一只按钮开关)引脚接有一只按钮开关K1。在外部中断在外部中断1输入引脚输入引脚P3.3(INT1*)引脚接有一只按钮开)引脚接有一只按钮开关关K2。程序要求。程序要求K1和和K2都未按下时,都未按下时,P1口的口的8只只LED呈流呈流水灯显示,仅水灯显示,仅K1(P3.2)按下时,左右)按下时,左右4只只LED交替闪烁。交替闪烁。仅按下仅按下K2(P3.3),),P1口的口的8只只LED全部闪亮。两个外中断全部闪亮。两个外中断的优先级相同。的优先级相同。2223两个外中断控制两个外中断控制8只只LED显示的电路显示的电路参考程序如下。#include void Delay(unsigned int i)/*延时函数延时函数Delay(),i为形式参为形式参数,不能赋初值数,不能赋初值*/unsigned int j;for(;i 0;i-)for(j=0;j125;j+);/*空函数空函数*/void main()/*主函数主函数*/unsigned char play 9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/*定义了流水灯的显示数据定义了流水灯的显示数据*/unsigned char a;for(;)for(a=0;a9;a+)Delay(500)/*延时延时*/P1=play a;/*将已经定义的流水灯显示数据送到将已经定义的流水灯显示数据送到P1口口*/EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/EX1=1/*允许外部中断允许外部中断1中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方式为跳沿触发方式*/IT1=1;/*选择外部中断选择外部中断1为跳沿触发方式为跳沿触发方式*/IP=0;/*两个外部中断均为低优先级两个外部中断均为低优先级*/25void int0_isr(void)interrupt 0 using 0 /*外中断0的中断服务函数*/for(;)P1=0 x0f;/*低4位LED灭,高4位LED亮*/Delay(500);/*延时*/P1=0 xf0;/*高4位LED灭,低4位LED亮*/Delay(500);/*延时*/void int1_isr(void)interrupt 2 using 1 /*外中断1的中断服务函数*/for(;)P1=0 xff;/*全灭*/Delay(500);/*延时*/P1=0;/*全亮*/Delay(500);/*延时*/26八、中断控制实例分析八、中断控制实例分析实例实例1:用外部中断用外部中断0来改变来改变P1口口LED灯的亮灭灯的亮灭实例实例2:用用LED数码管显示计数器对数码管显示计数器对INT0的计数值的计数值 (1位数码管显示)位数码管显示)实例实例3:用:用LED数码管显示计数器对数码管显示计数器对INT1的计数值的计数值 (2位数码管显示)位数码管显示)【例例】编写一个用于统计外中断编写一个用于统计外中断0的中断次数的中的中断次数的中断服务程序断服务程序int x;void int0()interrupt 0 using 1 x+;九、九、中断嵌套中断嵌套 中断嵌套只能发生在单片机正在执行一个低优先级中断服务程序的时候,此时又有一个高优先级中断产生,就会产生高优先级中断打断低优先级中断服务程序,去执行高优先级中断服务程序。高优先级中断服务程序完成后,再继续执行低优先级中断服务程序。【例例5-4】电路如图5-10所示,设计一个中断嵌套程序。要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,当K1按下再松开时,产生一个低优先级的外中断0请求(跳沿触发),进入外中断0中断服务程序,左右4只LED交替闪烁。此时按下K2再松开时,产生一个高优先级的外中断1请求29(跳沿触发),进入外中断1中断服务程序,P1口的8只LED全部闪烁。当显示一段时间后,再从外中断1返回继续执行外中断0中断服务程序,即P1口控制8只LED左右4只LED交替闪烁。设置外中断1为高优先级,外中断0为低优先级。3031两个外中断嵌套控制两个外中断嵌套控制8只只LED显示的电路显示的电路参考程序如下。#include unsigned char play 9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/*定义流水灯的显示数据定义流水灯的显示数据*/void Delay(unsigned int i)/*延时函数Delay()*/unsigned int j;for(;i 0;i-)for(j=0;j125;j+);/*空函数*/32void main()/*主函数*/unsigned char a;EA=1;/*总中断允许总中断允许*/EX0=1;/*允许外部中断允许外部中断0中断中断*/EX1=1/*允许外部中断允许外部中断1中断中断*/IT0=1;/*选择外部中断选择外部中断0为跳沿触发方式为跳沿触发方式*/IT1=1;/*选择外部中断选择外部中断1为跳沿触发方式为跳沿触发方式*PX0=0;/*外部中断外部中断0为低优先级为低优先级*/PX1=1;/*外部中断外部中断1为高优先级为高优先级*/for(;)for(a=0;a9;a+)Delay(500)/*延时延时*/P1=play a;/*将已经定义的流水灯显示数据送到将已经定义的流水灯显示数据送到P1口口*/33void int0_isr(void)interrupt 0 using 0 /*外中断外中断0的中断服务函数的中断服务函数*/for(;)P1=0 x0f;/*低低4位位LED灭,高灭,高4位位LED亮亮*/Delay(500);/*延时延时*/P1=0 xf0;/*高高4位位LED灭,低灭,低4位位LED亮亮*/Delay(500);/*延时延时*/void int1_isr(void)interrupt 2 using 1 /*外中断外中断1的中断服务函数的中断服务函数*/P1=0;/*8位位LED全亮全亮*/Delay(500);/*延时延时*/P1=0 xff;/*8位位LED全灭全灭*/Delay(500);/*延时延时*/34本例如果设置外中断本例如果设置外中断1为低优先级,外中断为低优先级,外中断0为高优先级,仍然为高优先级,仍然先按下再松开先按下再松开K1,后按下再松开,后按下再松开K2或者设置两个外中断源或者设置两个外中断源的中断优先级为同级,均不会发生中断嵌套。的中断优先级为同级,均不会发生中断嵌套。5.9.4 多外部中断源系统设计多外部中断源系统设计 AT89S51为用户提供两个外部中断请求输入端为用户提供两个外部中断请求输入端INT0*和和INT1*,实际的应用系统中,两个外部中断请求源往往不够用,需,实际的应用系统中,两个外部中断请求源往往不够用,需对外部中断源进行扩充。本节介绍一种利用外部中断和查询对外部中断源进行扩充。本节介绍一种利用外部中断和查询相结合的扩展外部中断源的方法。相结合的扩展外部中断源的方法。35例例:用外部中断用外部中断0来实现来实现P1口口8个个LED灯的亮灭三次变灯的亮灭三次变化,用外部中断化,用外部中断0来实现来实现8个开关控制个开关控制P1口口8个个LED灯灯的点亮。的点亮。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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