资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,5,章 中断系统,中断概念的引入,当单片机的,CPU,正在处理某事件时,若外部发生了某一,偶然事件,(,如定时器溢出、引脚上电平变化,),,,请求,CPU,迅速,去处理,于是,CPU,就,暂时中止,当前的工作,,转去处理,所发生的事件。中断处理完该事件后,再,回到原来,被中止的地方,继续执行原来的工作,实现这种功能的部件称为中断系统。,中断特点,在计算机主程序的流程中,插入其他事件的处理程序的能力,是提高工作效率的一项重要功能。,随机性:不可预测,急迫性(,及时响应和服务,),单片机中断功能的强弱直接标志着系统结构的好坏,中断包括,3,个过程,请求过程:中断事件请求;,响应过程:响应、识别中断源、找到该事件服务程序入口;,服务过程:服务事件、返回;,中断源:,请求中断的事件称为。,中断申请:,中断源向,CPU,提出的需要服务的请求,称为中断请求。,中断响应过程:,CPU,暂时中断自身的事务,转去处理事件的转移过程。,中断断点:,专入服务服务程序时,原来程序将被暂停,暂停点将要执行但没有被执行的那条指令地址。,中断服务:,对事件的整个处理过程,称为,(,或中断处理,),。,PIC,中断的常用名词概念,中断控制逻辑电路,解决问题:,解决怎样将外部事件的请求传达到,CPU,,与微机的中断控制器有相似之处。,这里的外部事件大多是指,PIC,的外围功能模块功能完成后,才能满足条件的前提下提出的请求。,中档,PIC,包括以下中断源,(,参看,113,页,),中断逻辑,EEIF,EEIE,ADIF,ADIE,RCIF,RCIE,TXIF,TXIE,T0IF,T0IE,INTF,INTE,RBIF,RBIE,PEIE,.,.,.,.,BCLIF,BCLIE,GIE,Interrupt,to CPU,Wake-up,(if in SLEEP),11,个外围模块的中断,3,个基本(内核)中断,+,+,总结,中断请求能够传达到,CPU,的,条件,:模块功能完成的标志,模块使能,外围使能,总使能;,控制逻辑的特点总结,(参看,114,页,,2,、,3,为重点),F877,有,14,个中断源,代表着,14,种不同的事件,可以插入主程序中作优先中断处理,有,3,个基本,中断源,,加上,11,个,外围中断都由一个全局中断,允许位,GIE,来控制,每一个中断都有一个中断,标志位(,xxIF,),和一个中断,允许位(,xxIE,),,必须二者同时,有效,,方能产生请求下传。该允许位由软件人员设定。标志信号(,xxIF,)只能由相应的模块功能完毕后,由硬件自动产生。所以,中断的引发最终在硬件。,这,14,个中断中,有,11,个属于外围模块的中断,,通过一个外围中断,允许位,PEIE,来统一控制是否使能。,中断请求能够传达到,CPU,的条件有:各模块功能完成的,标志(,xxIF,),各模块使能(,xxIE,),外围使能,PEIE,,总使能,GIE,;,中断活动的全过程,(,114,页),自学,重点掌握,中断相关的寄存器,(,104-108,页),中断控制寄存器,INTCON,选项寄存器,OPTION_REG,第一外设中断屏蔽寄存器,PIE1,第一外设中断标志寄存器,PIR1,第二外设中断屏蔽寄存器,PIE2,第二外设中断标志寄存器,PIR2,1.,中断控制寄存器,INTCON,(,105,页),主要用于中断控制,方式的,设置,。,3,个基本,中断源的模块允许和模块标志,2,选项寄存器,POTION_REG,Bit6,INTEDG,:外部中断,INT,触发信号边沿选择位。,0:,选择,RB0/INT,下降沿触发有效;,1,:,选择,RB0/INT,上升沿触发有效。,3,第一外围设备中断屏蔽寄存器,PIE1,4,第一外围设备中断标志寄存器,PIR1,5,第二外围设备中断屏蔽寄存器,PIE2,6,第二外围设备中断标志寄存器,PIR2,中断系统的特点,中断源的识别,教材,119,页,中断优先级的控制,教材,120,页,中断嵌套,教材,120,页,中断相应的时序与时间分析,教材,121,页,中断的现场保护,教材,122,页,PIC,不存在中断嵌套,当,CPU,响应的任何一个中断时,全局中断屏蔽位,GIE,将会,自动清,0,;当中断返回时它又会自动恢复为,1,。所以,PIC,不允许中断嵌套,主要原因是它的堆栈空间小。,中断响应时间,响应时间是指从中断请求有效,(,中断请求标志位置,1),,到,CPU,响应中断所需的时间。,1,图,6-3,2,3,4,5,响应,执行(,0004H,)指令,开始,中断响应,时间分析,(,1,),INT,中断请求能被,CPU,检测到,每个指令周期内的,第,2,个时钟,脉冲上升沿时,该信号被硬件抽检,1,次。,(,2,)从,INT,中断信号上升沿有效到引发中断标志位,INTIF,被置位,假设预先设定的是,INT,中断信号上升沿有效的话,则该信号的上升沿将会在,1,个时钟周期后引发中断标志位,INTIF,被置位。,(,3,),CPU,清全局中断屏蔽位,GIE,1,个指令周期后,清零全局中断屏蔽位,GIE,(,4,)程序计数器,PC,被置入中断向量,0004H,,完成跳转。在,GIE,信号被清零的,下一个指令周期内,,程序计数器,PC,被置入中断向量,0004H,,见图,6-3,中第,6,行。同时在该指令周期内完成到中断服务程序的跳转,并且实现提取该子程序的首条指令,即(,0004H,)指令,见图,6-3,中第,7,行。,(,5,)执行中断服务程序,在其后的,1,个指令周期内,正式开始,执行中断服务程序的第,1,条指令,,见图,6-3,中第,8,行。,结论:参看教材,122,页,中断响应,时间分析,中断的现场保护问题,(,122,页),进入了中断服务子程序后,只做了,保护断点,,即只有,返回地址,,跳转前的,PC,值被自动压入堆栈,。,还需要,保护现场,:只要是主程序和中断服务,双方都要用到,的存储装置,寄存器,都要保护。,对于,W,寄存器、,STATUS,和,PCLATH,寄存器属于通常要保护的,然后再去保存其它双方都用到的寄存器。参看教材,122,页:那些寄存器需要保护?,注意区分,2,条指令对标志的影响(,参考下图,),MOVWF W-TEMP,;不影响标志,MOVF W-TEMP,;会被当成运输结果影,响,Z,标志,,STATUS,注意:中断请求的撤除处理,标志清除:,中断响应后,中断请求,标志应及时清除,。否则,如果返回后,请求标志仍然有效,将会,造成一个中断的重复响应,。,识别中断源:,进入中断服务程序后,如果同时开放多个中断源的话,程序中必须安排指令,,识别中断源,。这可以通过检查各个中断源的标志位来实现。一旦确定出发出申请的中断源,就用软件把该中断源的标志位,人为地清,零。,实验,:,利用外部中断,单键触发,8,位二进制累加计数器,功能:用外部中断输入引脚,RB0/INT,接收连接在该引脚上的按键信息。每次检测到一次按键就对,8,位计数器,COUNT,加一,;,将,COUNT,的值直接送给,8,个发光二极管显示。,说明:将跳线器,JP_RB,的,KEY0,,,JP_RD,的,LED0LED7,短接。,运行程序,不断按击,KEY0,键,看,LED,变化情况。,#include p16f877a.inc,COUNT EQU 20H ;,定义,COUNT,作为键码寄存器,SAVEW EQU 21H ;,定义,SAVEW,寄存器,用于现场保护,SAVES EQU 22H ;,定义,SAVES,寄存器,用于现场保护,COUNT1 EQU 23H ;,定义,COUNT1,寄存器,用于延时,COUNT2 EQU 24H ;,定义,COUNT2,寄存器,用于延时,;*,ORG 00H,NOP ;,空指令,GOTO MAIN,ORG 0 x004;,中断入口,MOVWF SAVEW,SWAPF STATUS,W,CLRF STATUS,MOVWF SAVES ;,保护现场,GOTO RB0INT,JMP,SWAPF SAVES,W;,恢复现场,MOVWF STATUS,SWAPF SAVEW,F,SWAPF SAVEW,W,RETFIE;,中断返回,函数名称:,main;*,函数功能:初始化设置,使能由,INT,引脚输入的外部中断,MAIN,BCF STATUS,RP1,;对用到的功能初始化,BSF STATUS,RP0 ;,转到体,1,CLRF OPTION_REG ;,开启内部弱上拉,;RB0/INT,下降沿触发,有效,CLRF TRISD ;,将,PORTD,设置为输出端口,MOVLW B00111111,MOVWF TRISB ;,将,RB0-RB5,设置为输入端口,BSF INTCON,INTE ;,由,INT,引脚输入外部中断请求使能被允许,BCF STATUS,RP0 ;,转到体,0,CLRF COUNT ;COUNT,清零,MOVF COUNT,W,MOVWF PORTD ;,初始化显示,将,COUNT,送给,PORTD,BSF INTCON,GIE ;,打开全局中断,BSF INTCON,PEIE ;,打开外设中断,GOTO$;,无条件等待,函数名称:,RB0INT;*,函数功能:,INT,引脚输入的外部中断,RB0INT,服务函数,,COUNT,加,1,并通过,LED,来显示。,RB0INT,BTFSC PORTB,0 ;,再次测试按键是否确实按下,?,是,跳过下条指令,GOTO JMP ;,否,恢复现场,中断返回,BTFSS INTCON,INTE ;,判断中断源,是否允许由,INT,引脚输入的外部中断,GOTO JMP ;,否,结束中断,BTFSS INTCON,INTF ;,是,继续判断是否为,INT,中断,GOTO JMP ;,否,结束中断,CALL DELAY_20ms ;,是,调用延时子程序,INCF COUNT,1 ;COUNT,自加,1,MOVF COUNT,0 ;COUNT,送到,W,寄存器,MOVWF PORTD ;,送到,RD,端口显示,CHE,BTFSS PORTB,0 ;,判断按键是否松开,GOTO$-1 ;,否;继续返回上条指令检测,CALL DELAY_20ms ;,是,调用延时子程序,BTFSS PORTB,0 ;,再次判断按键是否松开,GOTO CHE,BCF INTCON,INTF ;,是,清标志位,JMP,SWAPF SAVES,W;,恢复现场,MOVWF STATUS,SWAPF SAVEW,F,SWAPF SAVEW,W,RETFIE;,中断返回,;*,函数名称:,DELAY_20ms;*,函数功能:延时,20ms,DELAY_20ms,MOVLW D28 ;,设置外部循环次数,MOVWF COUNT1 ;,LOOP3,MOVLW D237 ;,设置内部循环次数,MOVWF COUNT2 ;,DECFSZ COUNT2,1 ;,内部循环变量自减,1,为,0,则跳转,GOTO$-1 ;,DECFSZ COUNT1,1 ;,外部循环变量自减,1,为,0,则跳转,GOTO LOOP3 ;,RETURN ;,返回主程序,END,实验二,按键中断实验:参看教材,
展开阅读全文