好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

最新第5章STC15F2K60S2单片机中断系统.ppt

54页
  • 卖家[上传人]:hs****ma
  • 文档编号:591896385
  • 上传时间:2024-09-18
  • 文档格式:PPT
  • 文档大小:1.17MB
  • / 54 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第第5章章 STC15F2K60S2单片单片机中断系统机中断系统 5.1 5.1 中断的概念中断的概念5.2 STC15F2K60S25.2 STC15F2K60S2单片机的中断系统结构单片机的中断系统结构5.3 5.3 中断允许及其优先级管理中断允许及其优先级管理5.4 5.4 单片机中断处理过程单片机中断处理过程5.5 5.5 中断的应用举例中断的应用举例 5.1 中断的概念 在单片机应用系统中,中断技术主要用于实时监测与控制,能对外界发生的事件进行及时的处理中断系统是为使CPU具有对外界紧急事件的处理能力而设置的 当中央处理器CPU正在处理某件事的时候外界发生了紧急的事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方(断点),继续原来的工作,这样的过程称为中断实现这种功能的部件称为中断系统,请求CPU中断的请求源称为中断源 单片机的中断系统有多个中断源,当几个中单片机的中断系统有多个中断源,当几个中断源同时向断源同时向CPUCPU请求中断时,系统会根据其优先级来请求中断时,系统会根据其优先级来处理,即先响应中断优先级高的中断源,再响应优处理,即先响应中断优先级高的中断源,再响应优先级低的中断源。

      例如,若规定按键扫描处理优先先级低的中断源例如,若规定按键扫描处理优先于显示器输出处理,则于显示器输出处理,则CPUCPU在处理显示内容的过程中,在处理显示内容的过程中,可以被按键的动作打断,转而处理键盘扫描问题,可以被按键的动作打断,转而处理键盘扫描问题,待扫描结束后再继续进行显示器处理过程待扫描结束后再继续进行显示器处理过程 图图5-1 5-1 中断响应和处理过程中断响应和处理过程 5.2 STC15F2K60S25.2 STC15F2K60S2单片机的中断系统结构单片机的中断系统结构 5.2.1 5.2.1 中断源中断源 STC15F2K60S2单片机中断系统共有共有1414个中断源个中断源,分别为外部中断外部中断0 0((INT0INT0)、定时器)、定时器T0T0中断、外部中断中断、外部中断1 1((INT1INT1)、定时器)、定时器T1T1中断、串口中断、串口1 1中断、中断、A/DA/D转换中断、低转换中断、低压检测中断(压检测中断(LVDLVD)、)、CCP/PWM/PCACCP/PWM/PCA中断、串口中断、串口2 2中断、中断、SPISPI中中断、外部中断断、外部中断2 2(( )、外部中断)、外部中断3 3(( )、定时器)、定时器T2T2中断、外部中断中断、外部中断4 4(( ))。

      除外部中断外部中断2 2(( )、外部)、外部中断中断3 3(( )、定时器)、定时器T2T2中断、外部中断中断、外部中断4 4(( )等)等4 4个中断源固定为最低优先级中断外个中断源固定为最低优先级中断外,其它的中断源都具有具有2 2个中断优先级个中断优先级,可实现2级中断服务程序嵌套 STC15F2K60S2 STC15F2K60S2单片机中断系统结构示意图如图单片机中断系统结构示意图如图5-25-2所所示这些中断源与特殊功能寄存器示这些中断源与特殊功能寄存器TCONTCON、、SCONSCON、、S2CONS2CON、、CCONCCON、、PCONPCON、、ADC_CONTRADC_CONTR、、IEIE、、IE2IE2、、INT_CLKOINT_CLKO、、IPIP等有关,等有关,下面首先介绍与中断源有关的寄存器功能下面首先介绍与中断源有关的寄存器功能 STC15F2K60S2单单片机中断系统结构片机中断系统结构示意图示意图 5.2.2 5.2.2 中断源标志寄存器中断源标志寄存器 1. TCON1. TCON寄存器寄存器 TCON寄存器为定时定时/ /计数器计数器T0T0、、T1T1的控制寄存器,该寄存器包括了T0和T1的溢出中断请求标志位TF0和TF1,也包括了外部中断外部中断0 0((INT0INT0)和外部中断)和外部中断1 1((INT1INT1))的中断请求标志位IE0和IE1,以及外部中断0和外部中断1的中断源的触发方式。

      TCON寄存器的字节地址为88H,可位寻址,其格式如下: ØTF1TF1:定时:定时/ /计数器计数器T1T1的溢出中断标志位的溢出中断标志位当启动T1计数后,从初值开始计数,当产生溢出后由硬件将TF1置1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清0,TF1也可由软件清0ØTR1TR1:定时:定时/ /计数器计数器T1T1的运行控制位的运行控制位当TR1为1 时运行,为0时停止运行ØTF0TF0:定时:定时/ /计数器计数器T0T0溢出中断标志溢出中断标志其功能与TF1类似ØTR0TR0:定时:定时/ /计数器计数器T0T0的运行控制位的运行控制位其功能与TR1类似 ØIE1IE1:外部中断:外部中断1 1请求源(请求源(INT1/P3.3INT1/P3.3)标志位)标志位IE1为1时,外部中断1向CPU请求中断,当CPU响应该中断时由硬件将IE1清0ØIT1IT1:外部中断:外部中断1 1中断触发方式选择位中断触发方式选择位,当IT1为0时,INT1/P3.3引脚上的上升沿或下降沿均可触发外部中断1IT1为1时,为下降沿触发方式ØIE0IE0:外部中断:外部中断0 0请求源(请求源(INT0/P3.2INT0/P3.2)标志位)标志位。

      与IE1功能类似ØIT0IT0:外部中断:外部中断0 0中断触发方式选择位中断触发方式选择位,功能与IT1类似 2. SCON2. SCON和和S2CONS2CON寄存器寄存器 SCON为串行口1控制寄存器,包括了串行口发送和接收中断的请求标志位TI和RISCON寄存器的字节地址为98H,可位寻址,其格式如下: ØRIRI:串行口:串行口1 1接收中断标志接收中断标志若串行口1允许接收且以方式0工作,则每当接收到第8位数据时置1;若以方式1、方式2或方式3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口以方式2或方式3工作且SM2=1时,则仅当接收到的第9位数据RB8为1后,同时还要接收到停止位的中间时置1RI为1表示接收器已接收到一帧数据,串行口1正向CPU申请中断(接收中断),RI必须由用户的中断服务程序清0 ØTITI:串行口:串行口1 1发送中断标志发送中断标志串行口1以方式0发送时,每当发送完8位数据,由硬件置1;若以方式1、方式2或方式3发送时,在发送停止位的开始时置1TI为1表示串行口已发送一帧数据,串行口1正在向CPU申请中断(发送中断)。

      值得注意的是,CPU响应发送中断请求,转向执行中断服务程序时并不将TI清0,TI必须由用户在中断服务程序中清0 SCON寄存器的其他位与中断无关,将在后续相关章节介绍 S2CONS2CON为串行口为串行口2 2控制寄存器,字节地址为控制寄存器,字节地址为9AH9AH,,S2CONS2CON中中各位功能与串口各位功能与串口1 1控制寄存器控制寄存器SCONSCON类似,其中类似,其中S2TIS2TI和和S2RIS2RI为串为串口口2 2的发送和接收中断标志位的发送和接收中断标志位ØS2RIS2RI:串行口:串行口2 2接收中断标志接收中断标志若串行口2允许接收且以方式0工作,则每当接收到第8位数据时置1;若以方式1、方式2或方式3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口2以方式2或方式3工作且S2SM2=1时,则仅当接收到的第9位数据S2RB8为1后,同时还要接收到停止位的中间时置1S2RI为1表示串行口2已接收到一帧数据,正向CPU申请中断(接收中断),S2RI必须由用户的中断服务程序清0 ØS2TIS2TI:串行口:串行口2 2发送中断标志发送中断标志。

      串行口2以方式0发送时,每当发送完8位数据,由硬件置1;若以方式1、方式2或方式3发送时,在发送停止位的开始时置1S2TI=1表示串行口2已发送完一帧数据,正在向CPU申请中断(发送中断)值得注意的是,CPU响应发送中断请求,转向执行中断服务程序时并不将S2TI清0,S2TI必须由用户在中断服务程序中清0 3. ADC_CONTR3. ADC_CONTR寄存器寄存器 ADC_CONTR为A/D转换控制寄存器,字节地址为BCH,ØADC_POWERADC_POWER::ADCADC电源控制位电源控制位当ADC_POWER为0时,关闭ADC电源;当ADC_POWER为1时,打开ADC电源 ØADC_FLAGADC_FLAG::ADCADC转换结束标志位,可用于请求转换结束标志位,可用于请求A/DA/D转换的中断转换的中断当A/D转换完成后ADC_FLAG置1,要用软件清0不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是否结束,当A/D转换完成后,ADC_FLAG为1,一定要软件清0 ØADC_STARTADC_START::ADCADC转换启动控制位,转换启动控制位,设置为1时,开始转换,转换结束后为0。

      A/D转换控制寄ADC_CONTR中的其他位与中断无关,将在后续相关章节介绍 4.PCON 4.PCON寄存器寄存器 PCON为电源控制寄存器,与低压检测中断有关,PCON格式如下: ØLVDFLVDF:低压检测标志位:低压检测标志位,同时也是低压检测中断请求标志位 在正常工作和空闲工作状态时,如果内部工作电压VCC低于低压检测门槛电压,该位自动置1,与低压检测中断是否被允许无关即在内部工作电压VCC低于低压检测门槛电压时,不管有没有允许低压检测中断,该位都自动为1该位要用软件清0,清0后,如内部工作电压VCC继续低于低压检测门槛电压,该位又被自动设置为1 在进入掉电工作状态前,如果低压检测电路未被允许可产生中断,则在进入掉电模式后,该低压检测电路不工作以降低功耗如果被允许可产生低压检测中断,则在进入掉电模式后,该低压检测电路继续工作,在内部工作电压VCC低于低压检测门槛电压后,产生低压检测中断,可将MCU从掉电状态唤醒 5. CCON5. CCON寄存器寄存器 CCON寄存器是可编程计数器阵列(PCA)模块控制寄存器,地址为D8H,可位寻址。

      CCON寄存器格式如下:ØCFCF::PCAPCA计数器阵列溢出标志位计数器阵列溢出标志位当PCA计数器溢出时,CF由硬件置1如果CMOD寄存器的ECF位置1,则CF标志可用来产生中断CF位可通过硬件或软件置1,但只可通过软件清0ØCRCR::PCAPCA计数器阵列运行控制位计数器阵列运行控制位该位为1时,启动PCA计数器阵列计数;该位为0时,关闭PCA计数器ØCCF2CCF2::PCAPCA模块模块2 2中断标志中断标志当出现匹配或捕获时该位由硬件置1该位必须通过软件清0ØCCF1CCF1::PCAPCA模块模块1 1中断标志中断标志与CCF2功能类似ØCCF0CCF0::PCAPCA模块模块0 0中断标志中断标志与CCF2功能类似 6. SPSTAT6. SPSTAT寄存器寄存器 SPSTAT寄存器是SPI状态寄存器,地址为CDHØSPIFSPIF::SPISPI传输完成标志传输完成标志当一次串行传输完成时,SPIF置1,此时,如果SPI中断被打开(ESPI=1,EA=1),则产生中断当SPI处于主模式且SSIG=0时,如果为输入并被驱动为低电平,SPIF也将置1,表示“模式改变”。

      SPIF标志通过软件向其写入1而清0ØWCOLWCOL::SPISPI写冲突标志写冲突标志在数据传输的过程中如果对SPI数据寄存器SPDAT执行写操作,WCOL将置1,WCOL标志通过软件向其写入1而清0 使用单片机的外部中断0和外部中断1,当外部中断0发出中断请求后点亮蓝色LED灯,当外部中断1发出中断请求后点亮黄色LED灯如果在信号同时到达的条件下,需要指定那个LED灯先亮,如何实现?如果两个中断的请求信号同时到达单片机,哪个LED灯先点亮? 5.3 中断允许及其优先级管理 STC15F2K60S2单片机的中断允许控制及优先级控制分别由中断允许寄存器IE、IE2、INT_CLKO(AUXR2)以及中断优先级控制寄存器IP、IP2等控制 5.3.1 中断允许寄存器 STC15F2K60S2单片机中的各中断源是否开放或禁止,是由内部的中断允许寄存器IE、IE2、INT_CLKO控制中断采用两级控制方式,即总中断和各中断源分别独立控制 ØEAEA::CPUCPU的总中断允许控制位的总中断允许控制位,EA=1,CPU开放总中断,EA=0,CPU屏蔽所有的中断申请EA的作用是使中断允许形成两级控制。

      即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制ØELVDELVD:低压检测中断允许位低压检测中断允许位ELVD=1,允许低压检测中断;ELVD=0,禁止低压检测中断ØEADCEADC::A/DA/D转换中断允许位转换中断允许位EADC=1,允许A/D转换中断;EADC=0,禁止A/D转换中断1. IE1. IE寄存器寄存器 IE寄存器主要负责总中断允许控制和外部中断0、外部中断1、定时器T0、定时器T1、串口1、A/D转换、低压检测等中断源中断允许控制,IE的字节地址为A8H,可位寻址 ØESES:串行口:串行口1 1中断允许位中断允许位ES=1,允许串行口1中断;ES=0,禁止串行口1中断ØET1ET1:定时:定时/ /计数器计数器T1T1的溢出中断允许位的溢出中断允许位ET1=1,允许T1中断;ET1=0,禁止T1中断ØEX1EX1:外部中断:外部中断1 1中断允许位中断允许位EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断ØET0ET0:定时:定时/ /计数器计数器T0T0的溢出中断允许位的溢出中断允许位ET0=1,允许T0中断;ET0=0禁止T0中断。

      ØEX0EX0:外部中断:外部中断0 0中断允许位中断允许位EX0=1,允许外部中断0中断;EX0=0禁止外部中断0中断 ØET2ET2:定时器:定时器T2T2中断允许位中断允许位ET2=1时,允许T2中断;ET2=0,禁止T2中断ØESPIESPI::SPISPI中断允许位中断允许位ESPI=1,允许SPI中断;SPI=0,禁止SPI中断 ØES2ES2:串行口:串行口2 2中断允许位中断允许位ES2=1,允许串行口2中断;ES2=0,禁止串行口2中断 STC15F2K60S2单片机复位以后,IE和IE2被清0,所有的中断被禁止若要开放某些中断源,则可通过程序把IE和IE2中的相应控制位置1,同时还必须把总中断EA置1 2. IE22. IE2寄存器寄存器 IE2寄存器主要负责定时器T2、SPI和串口2等中断源的中断允许控制,地址为AFH其格式如下: ØEX4EX4:外部中断:外部中断4 4(( )中断允许位)中断允许位,EX4=1时允许外部中断4中断,EX4=0时,禁止外部中断4中断,外部中断4只能下沿触发ØEX3EX3:外部中断:外部中断3 3(( )中断允许位)中断允许位,EX3=1时允许外部中断3中断,EX3=0时,禁止外部中断3中断,外部中断3只能下沿触发。

      ØEX2EX2:外部中断:外部中断2 2(( )中断允许位)中断允许位,EX2=1时允许外部中断2中断,EX2=0时,禁止外部中断2中断,外部中断2只能下沿触发 T2CLKO、T1CLKO、T0CLKO是时钟输出控制位,与中断无关,将在后续章节中介绍 3. INT_CLKO3. INT_CLKO寄存器寄存器 INT_CLKO(AUXR2)为外部中断2、外部中断3、外部中断4中断允许和时钟输出控制寄存器,地址为8FH其格式如下: 5.3.2 5.3.2 中断优先级管理寄存器中断优先级管理寄存器 STC15F2K60S2单片机中除了外部中断2( )、外部中断3( )、外部中断4( )、定时器T2中断等4个中断源固定为最低优先级中断外,其它中断源(外部中断0、定时器T0中断、外部中断1、定时器T1中断、串口1中断、A/D转换中断、低压检测中断(LVD)、CCP/PWM/PCA中断、串口2中断、SPI中断等)都具有两个中断优先级,即高优先具有两个中断优先级,即高优先级和低优先级级和低优先级,可实现两级中断服务程序嵌套中断源的优先级由特殊功能寄存器IP和IP2中相应的位进行设置。

      下面分别介绍这两个优先级管理寄存器 ØPPCAPPCA::PCAPCA中断优先级控制位中断优先级控制位 PPCA=0时,PCA中断为低优先级中断(优先级0); PPCA=1时,PCA中断为高优先级中断(优先级1)ØPLVDPLVD:低压检测中断优先级控制位低压检测中断优先级控制位 PLVD=0时,低压检测中断为低优先级中断(优先级0); PLVD=1时,低压检测中断为高优先级中断(优先级1)ØPADCPADC::A/DA/D转换中断优先级控制位转换中断优先级控制位 PADC=0时,A/D转换中断为低优先级中断(优先级0); PADC=1时,A/D转换中断为高优先级中断(优先级1)ØPSPS:串口:串口1 1中断优先级控制位中断优先级控制位 PS=0时,串口1中断为低优先级中断(优先级0); PS=1时,串口1中断为高优先级中断(优先级1)1.IP1.IP寄存器寄存器IP为中断优先级控制寄存器,地址为B8H,可位寻址 ØPT1PT1:定时器:定时器1 1中断优先级控制位中断优先级控制位 PT1=0时,定时器1中断为低优先级中断(优先级0); PT1=1时,定时器1中断为高优先级中断(优先级1)。

      ØPX1PX1:外部中断:外部中断1 1优先级控制位优先级控制位 PX1=0时,外部中断1为低优先级中断(优先级0); PX1=1时,外部中断1为高优先级中断(优先级1)ØPT0PT0:定时器:定时器0 0中断优先级控制位中断优先级控制位 PT0=0时,定时器0中断为低优先级中断(优先级0); PT0=1时,定时器0中断为高优先级中断(优先级1)ØPX0PX0:外部中断:外部中断0 0优先级控制位优先级控制位 PX0=0时,外部中断0为低优先级中断(优先级0); PX0=1时,外部中断0为高优先级中断(优先级1) ØPSPIPSPI::SPISPI中断优先级控制位中断优先级控制位 PSPI=0时,SPI中断为低优先级中断(优先级0); PSPI=1时,SPI中断为高优先级中断(优先级1)ØPS2PS2:串口:串口2 2中断优先级控制位中断优先级控制位 PS2=0时,串口2中断为低优先级中断(优先级0); PS2=1时,串口2中断为高优先级中断(优先级1) 2. IP22. IP2寄存器寄存器 IP2为中断优先级控制寄存器,主要对串行口2、SPI中断源的中断优先级设置,地址为B5H。

      其格式如下: 中断优先级控制寄存器中断优先级控制寄存器IPIP、、IP2IP2的各位都可由用户程序的各位都可由用户程序置置1 1和清和清0 0但IP寄存器可位操作,所以可用位操作指令或字节操作指令更新IP的内容而IP2寄存器的内容只能用字节操作指令来更新STC15F2K60S2单片机复位后IP、IP2均为00H,各个中断源均为低优先级中断 STC15F2K60S2STC15F2K60S2单片机高优先级的中断请求可以打断单片机高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高低优先级的中断,反之,低优先级的中断请求不可以打断高优先级及相同优先级的中断优先级及相同优先级的中断当两个相同优先级的中断同时产生时,将由查询次序来决定系统响应哪个中断STC15F2K60S2单片机的各个中断的向量地址、查询次序、优先级、请求标志及中断允许位如表5-1所示 表表5-1 STC15F2K60S25-1 STC15F2K60S2单片机中断向量地址单片机中断向量地址/ /优先级优先级/ /请求标志请求标志/ /允许位允许位 当单片机系统中有多个中断源同时向CPU请求中断时,CPU在响应中断源的中断请求时,必须遵循以下基本原则:必须遵循以下基本原则: ((1 1)不同优先级中断源同时申请中断时,先高后低。

      不同优先级中断源同时申请中断时,先高后低 当多个中断源同时发出中断请求时,优先级高的中断将首先被响应,只有优先级高的中断服务程序执行完毕后,才能响应低优先级的中断 ((2 2))同同一一优优先先级级的的多多个个中中断断源源同同时时申申请请中中断断时时,,CPUCPU则则按按自自然然优优先级从高到低依次响应先级从高到低依次响应其自然优先级顺序如下: ((3)一个正在执行的低优先级可被高优先级中断请求所中断,待)一个正在执行的低优先级可被高优先级中断请求所中断,待高优先级中断处理完毕后再返回低优先级中断,实现中断的嵌套高优先级中断处理完毕后再返回低优先级中断,实现中断的嵌套而高优先级中断不能被低优先级中断所中断而高优先级中断不能被低优先级中断所中断 5.4 单片机中断处理过程 5.4.1 中断的响应条件 当中断源向CPU发出中断请求时,如果中断的条件满足,CPU将进入中断响应周期,STC15F2K60S2单片机响应中断的条件: (1)中断源有请求,相应的中断标志位为1; (2)CPU开放总中断(EA=1); (3)中断允许寄存器相应的中断允许位置1; (4)无同级或高级中断正在处理。

      满足以上条件,CPU一般会响应中断单片机CPU在每个指令周期的最后一个时钟周期按优先顺序查询各中断标志,如果查到某个中断标志为1,将在下一个指令周期按优先级的高低顺序进行处理 在程序运行过程中,并不是任何时刻都可以响应中断,如出现下面情况之一时,单片机不响应中断请求单片机不响应中断请求 ((1 1))CPUCPU正在处理同级或高优先级中断;正在处理同级或高优先级中断; ((2 2)正在执行的指令尚未执行完毕,即当前指令不能)正在执行的指令尚未执行完毕,即当前指令不能执行一半就响应中断;执行一半就响应中断; ((3 3)正在执行的指令是中断返回指令)正在执行的指令是中断返回指令RETIRETI或是访问专或是访问专用寄存器用寄存器IEIE或或IPIP的指令时,必须在执行完该指令后还要再执的指令时,必须在执行完该指令后还要再执行一条指令才能响应中断行一条指令才能响应中断 5.4.2 5.4.2 中断的处理过程中断的处理过程 1 1.中断响应.中断响应 (1)将相应的优先级状态触发器置1(阻断其他同级或低级的中断请求)。

      (2)执行一条硬件LCALL指令,即程序计数器PC的值压入堆栈保存,再将中断服务子程序的入口地址送入PC 2 2.中断处理.中断处理 执行相应的中断服务程序 3 3.中断返回.中断返回 执行完中断服务程序后,把中断响应时入堆栈保存的断点地址从堆栈栈顶弹出送回PC,CPU返回原来的断点继续往下执行程序 5.4.3 5.4.3 中断请求的撤除中断请求的撤除 STC15F2K60S2单片机的14个中断源中有的中断标志可以由硬件自动撤消,有的必须由软件清除中断源向CPU发出中断请求后,中断请求信号分别锁存在TCON、SCON、S2CON、ADC_CONTR、CCON、PCON、SPSTAT等特殊功能寄存器中当某个中断源的请求被CPU响应后,应将相应的中断请求标志位及时清除,否则CPU会再一次响应该中断Ø硬件自动清除中断标志位:硬件自动清除中断标志位:外部中断0、外部中断1、外部中断2、外部中断3、外部中断4、定时器T0、定时器T1、定时器T2的中断请求标志位在响应中断后,硬件会自动清0,用户无须关心Ø需软件清除中断标志位:需软件清除中断标志位:串行口1中断标志位TI和RI、串行口2中断标志位S2TI和S2RI、ADC中断标志位ADC_FLAG、SPI中断标志位SPIF、PCA中断标志位CF/CCF0/CCF1/CCF2、低压检测中断标志位LVDF,需要在中断服务程序中用软件将其清0。

      注意:注意: 对于STC15F2K60S2单片机外部中断来说,由于系统每个时钟对外部中断引脚采样1次,所以为了确保被检测到,输入信号应该至少维持2个时钟不管是下降沿触发还是上升沿触发,要求必须在相应的引脚维持高电平和低电平至少1个时钟以上,才能确保该下降沿或上升沿被CPU检测到 5.5 中断的应用举例 5.5.1中断处理程序的编写 中断处理程序一般包括中断控制程序和中断服务程序(函数)两部分组成 1. 中断控制程序 中断控制程序主要完成中断的初始化,一般放在主程序即可,主要完成以下几个任务: (1)根据需要设定相关变量或寄存器的初始值; (2)根据需要在IP、IP2寄存器中设定中断优先级; (3)在IE、IE2寄存中把相应中断源的对应位置1,开放相应的中断; (4)CPU开放总中断EA 2 2.中断服务程序(函数).中断服务程序(函数) 中断服务程序完成对具体中断源的处理,不同的应用系统的中断服务程序(函数)有所不同,一般包括以下几个内容: ((1 1)根据需要选择需要保护和恢复现场)根据需要选择需要保护和恢复现场 当CPU进入中断服务程序后,如果使用与主程序相同的寄存器时,必定会破坏该单元中原来的数据,如果不加以保护,则中断返时将导致主程序的混乱。

      因此,在进行中断服务程序后,应根据需要保护现场,中断返回前恢复现场在C51语言编程中,则在中断函数中声明局部变量,也可以选择不同的寄存器组,保护和恢复现场不需要过多考虑 ((2 2)根据需要清除中断请求标志位,)根据需要清除中断请求标志位,有的标志位不能通过硬件自动清除,如RI和TI等,因此,要在中断服务程序中用软件清除相应的标志位,以免造成CPU再次响应中断 采用C51编写中断函数,其一般格式如下: 返回值类型返回值类型 函数名(形式参数表)函数名(形式参数表) interrupt n [using n]interrupt n [using n] 其中,interrupt关键字后的n为对应中断源编号,告诉编译器中断程序的入口地址using是可选项,其后面的n为选择寄存器组,可以是0、1、2、3,分别对应RAM中的4个寄存器组 STC15F2K60S2单片机各个中断源所对应的中断服务程序入口地址及中断号如表5-2所示 如果使用如果使用C C语言编程中断函数时,则以中断号来区分每一个中断语言编程中断函数时,则以中断号来区分每一个中断。

      例如:例如: void INT0_ISR (void) interrupt 0 {} // void INT0_ISR (void) interrupt 0 {} // 外部中断外部中断0 0中断函数中断函数; ;void T0_ISR (void) interrupt 1 {} // void T0_ISR (void) interrupt 1 {} // 定时器定时器T0T0中断函数中断函数; ;void INT1_ISR(void) interrupt 2 {} // void INT1_ISR(void) interrupt 2 {} // 外部中断外部中断1 1中断函数中断函数; ;void T1_ISR(void) interrupt 3 {} // void T1_ISR(void) interrupt 3 {} // 定时器定时器T1T1中断函数中断函数; ;void UART1_ISR(void) interrupt 4 {} // void UART1_ISR(void) interrupt 4 {} // 串行通信中断函数串行通信中断函数; ;void ADC_ISR(void) interrupt 5 {} // ADCvoid ADC_ISR(void) interrupt 5 {} // ADC中断函数中断函数; ;void LVD_ISR(void) interrupt 6 {} // ADCvoid LVD_ISR(void) interrupt 6 {} // ADC中断函数中断函数; ;void PCA_ISR(void) interrupt 7 {} // PCAvoid PCA_ISR(void) interrupt 7 {} // PCA中断函数中断函数; ;void UART2_ISR(void) interrupt 8 {} // void UART2_ISR(void) interrupt 8 {} // 串行通信串行通信2 2中断函数中断函数; ;void SPI_ISR(void) interrupt 9 {} // SPIvoid SPI_ISR(void) interrupt 9 {} // SPI中断函数中断函数; ;void INT2_ISR (void) interrupt 10 {} // void INT2_ISR (void) interrupt 10 {} // 外部中断外部中断2 2中断函数中断函数; ;void INT3_ISR (void) interrupt 11 {} // void INT3_ISR (void) interrupt 11 {} // 外部中断外部中断3 3中断函数中断函数; ;void T2_ISR (void) interrupt 12 {} // void T2_ISR (void) interrupt 12 {} // 定时器定时器T2T2中断函数中断函数; ;void INT4_ISR(void) interrupt 16 {} // void INT4_ISR(void) interrupt 16 {} // 外部中断外部中断4 4中断函数中断函数; ; 5.5.2 5.5.2中断应用举例中断应用举例 【【例例5-15-1】】如图5-3所示,当按键K1按下时,P1口的8个LED灯闪烁5次,采用中断方式实现,试编程实现。

      分析:分析:由于按键K1连接在INT0/P3.2口,采用外部中断0实现,LED灯闪烁一次,即亮一下又熄灭,共循环5次,在中断函数中实现 #include // #include // 包含头文件包含头文件void delay(unsigned int i) // void delay(unsigned int i) // 延时函数延时函数 { while(--i>0);{ while(--i>0); } }void main( ) // void main( ) // 主函数主函数 { EX0=1; // { EX0=1; // 开放外部中断开放外部中断0 0 IT0=1; // IT0=1; // 设定外部中断设定外部中断0 0为下降沿触发方式为下降沿触发方式 EA=1; // EA=1; // 开放总中断开放总中断 while(1); // while(1); // 等待等待 } }void INT0_ISR() interrupt 0 // void INT0_ISR() interrupt 0 // 外部中断外部中断0 0函数函数 { { unsigned char i; unsigned char i; for(i=0;i<5;i++) // for(i=0;i<5;i++) // 循环循环5 5次次 { P1=0x00;{ P1=0x00; delay(1000); delay(1000); P1=0xff; P1=0xff; delay(1000); delay(1000); } } } }C51参考程序如下:参考程序如下: 【【例例5-25-2】】如图5-4所示,按键K1接在P3.2口,按键K2接在P3.3口,当无按键按下时,LED灯闪烁,当K1按下时,使LED灯左循环两遍,当K2按下时,使LED灯右循环两遍。

      要求K2执行的优先权高于K1,即当K1按下时,如果此时K2按下,则先执行K2,K2执行完后再继续执行K1功能,试编程 分析:分析:K1、K2分别接在外部中断0和外部中断1,根据题意,外部中断1的优先级要高于外部中断0的优先级,这就是中断源的嵌套由于低优先级可被高优先级中断,但高优先级不能被低优先级中断,系统采用两个中断函数实现 #include // #include // 包含头文件包含头文件#include // #include // 包含包含_crol__crol_()函数头文件()函数头文件void delay(unsigned int i) // void delay(unsigned int i) // 延时函数延时函数 { while(--i);{ while(--i); } }void main() // void main() // 主函数主函数{ EX0=1; // { EX0=1; // 开放外部中断开放外部中断0 0 IT0=1; // IT0=1; // 设定外部中断设定外部中断0 0为下降沿触发方式为下降沿触发方式 EX1=1; // EX1=1; // 开放外部中断开放外部中断1 1 IT1=1; // IT1=1; // 设定外部中断设定外部中断1 1为下降沿触发方式为下降沿触发方式 PX0=0; // PX0=0; // 设定外部中断设定外部中断0 0为低优先级为低优先级 PX1=1; // PX1=1; // 设定外部中断设定外部中断1 1为高优先级为高优先级 EA=1; // EA=1; // 开放总中断开放总中断 while(1)while(1) // // 循环等待循环等待 { {P1=0x00;P1=0x00;// LED// LED灯亮灯亮 delay(10000);delay(10000); P1=0xff; P1=0xff;// LED// LED灯灭灯灭 delay(10000);delay(10000); } }} }参考程序如下:参考程序如下: void INT0_ISR() interrupt 0 // void INT0_ISR() interrupt 0 // 外部中断外部中断0 0函数,函数,LEDLED灯循环左移灯循环左移{ unsigned char i,led;{ unsigned char i,led; led=0xfe; led=0xfe; for(i=0;i<16;i++) // for(i=0;i<16;i++) //左循环左循环2 2遍遍 { { P1=led; P1=led; delay(10000); delay(10000); led=_crol_(led,1); led=_crol_(led,1);// // 循环左移循环左移 } }} }void INT1_ISR() interrupt 2 //void INT1_ISR() interrupt 2 //外部中断外部中断1 1函数,函数,LEDLED灯循环右移灯循环右移{ unsigned char j,led;{ unsigned char j,led; led=0xfe; led=0xfe; for(j=0;j<16;j++) // for(j=0;j<16;j++) //右循环右循环2 2遍遍 { {P1=led;P1=led; delay(10000); delay(10000); led=_cror_(led,1); led=_cror_(led,1); // // 循环右移循环右移 } }} } 【【例例5-35-3】】如图5-4所示,按键K1接在INT0/P3.2口,利用外部中断0的上升沿和下降沿均可触发方式,统计INT0/P3.2口引脚输入脉冲的跳变次数,并在P1的LED显示出来。

      #include // #include // 包含头文件包含头文件void main() // void main() // 主函数主函数{ IT0=0; // { IT0=0; // 设定外部中断设定外部中断0 0为上升沿和下降沿触发方式为上升沿和下降沿触发方式 EX0=1; // EX0=1; // 开放外部中断开放外部中断0 0 EA=1; // EA=1; // 开放总中断开放总中断 while(1); // while(1); // 循环等待循环等待 } } void INT0_ISR() interrupt 0 // void INT0_ISR() interrupt 0 // 外部中断外部中断0 0函数函数 { { P1++; // P1++; // 统计脉冲跳变次数统计脉冲跳变次数 } }参考程序如下:参考程序如下: 习 题5-1 什么是中断? 中断有哪些作用?5-2 STC15F2K60S2单片机有几个中断源?并写出各中断源的入口地址和 对应的中断号?5-3 STC15F2K60S2单片机响应中断后,需要用软件清除中断标位的中源有哪些?5-4 STC15F2K60S2单片机外部中断0、外部中断1、外部中断2、外部中断3各有哪些触发方式?如何设置?5-5 如果在STC15F2K60S2单片机中要设置中断源的优先级为:定时器1>串口中断1>外部中断0 >外部中断1,应如何设置?5-6 简述STC15F2K60S2单片机的中断响应条件?5-7 简述C51中断函数编写格式?试举例说明? 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.