- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.4中断响应 2.中断过程 (1)中断发出申请,并建相应中断标志。 (2)CPU停止当前工作,响应中断。 (3)断点保存,保护现,信息压场栈。 (4)执行中断服务程序。 (5)恢复现场,弹栈。 (6)中断返回。 6.4中断响应 3.中断的现场保护问题 中断现场的保护是中断技术中一个很重要的环节。PIC单片机采用的是硬件堆栈,即在进入中断服务程序期间,只将程序计数器PC的值被自动压入堆栈。若需要保留其他寄存器的内容,就得由程序员另想办法。一般是用一段用户程序来实现现场保护的功能。 现场保护的内容随不同的软件系统而不同。首先,程序的执行有可能会影响到W寄存器和STATUS寄存器,所以,首先应该把这2个寄存器保护起来,然后再去保存其他用户认为有必要保护的寄存器。 6.4中断响应 3.中断的现场保护问题 在PIC单片机中,中断现场数据不是保留到芯片的堆栈存储区中,而是保留在用户自己选择的一些文件寄存器中,当然一般应该选择通用寄存器来保护现场。 下面是将W、STATUS和PCLATH寄存器的内容保存到临时备份寄存器中的中断现场保护程序。 MOVWF W_TEMP ;将W内容送暂存器保存 SWAPF STATUS,W ;将状态寄存器送 CLRF STATUS ;选存储体0 MOVWF STATUS_TEMP ;保护状态寄存器内容 6.4中断响应 3.中断的现场保护问题 MOVF PCLATH,W ;保护PCLATH内容 MOVWF PCLATH_TEMP CLRF PCLATH ;选择程序存储器0页 … ;中断服务程序 MOVF PCLATH_TEMP,W ;恢复PCLATH MOVWF PCLATH SWAPF STATUS_TEMP ;恢复状态寄存器内容 MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W ;恢复W内容 6.4中断响应 4.中断嵌套 当CPU相应的任何一个中断时,全局中断屏蔽位GIE将会自动清0;当中断返回时它又会自动恢复为1。如果在中断处理期间用软件将已经复位的GIE重新置位,这时再出现中断请求,就可以形成中断嵌套。也就是说,如果在响应某一中断期间又响应了其他中断请求,就形成了中断嵌套。 发生中断嵌套时,前一中断处理过程被暂停而进入后一中断处理,当后一中断过程被处理完毕之后,才会继续处理前一中断。照此方式,还可以形成多级嵌套,甚至自身嵌套。不过嵌套的级数绝对不能超过硬件堆栈的深度。 6.5中断请求的撤除 中断响应后,中断请求应及时清除。否则,如果终端请求仍然有效,会造成中断的重复响应。进入中断服务程序后,程序中必须安排指令,检查发出请求的中断源(如果同时开放多个中断源的话)。这可以通过检查各个中断源的标志位来实现。一旦确定出发出申请的中断源,就用软件把该中断源的标志位人为地清零,否则,执行中断返回指令“RETFIE”。重开中断后,由于中断标志位仍为“1”而引起CPU重复响应同一个中断请求。 6.6 中断控制编程实例 【6-1】用定时器定时,由RB0输出2分钟的方波。已知fOSC=4MHZ 解:要输出2分钟的方波,只要每隔1分钟使RB0求反一次即可。但此例要求RB0输出方波的周期时间太长,用一个定时器无法实现长时间定时,因此考虑用定时器加软件计数的方法来实现。 具体做法是:用定时器TMR0定时10ms,用软件计数实现定时一分钟。 20H单元作ms的计数单元:1s/10ms=100(64)次 21H单元作s的计数单元:1min/1s=60(3C)次 22H单元的D7位作分的计时的标志位。计时时间到后标志位置1 TMR0的计数初值为:X=28—t /(T×P)=256-10000/(1×256)=D8H 程序清单如下: LISTP=16F873 INCLUDEP16F873.INC MSECONDEQU20H ;毫秒计时寄存器 SECONDEQU21H ;秒计时寄存器 MINUTEEQU22H ;分标志寄存器 W_TEMPEQU23H;w临时寄存器 ORG0000H;复位矢量单元地址 NOP ;ICD必需的空操作 GOTOMAIN;跳转到主程序 ORG0004H;中断矢量单元地址 GOTOZD;跳转到中断程序 START CLRFPORTB ;清输出B口 BSF STATUS,RP0 ;选择存储体1 CLRFTRISB ;设置B口输出 MOVLW07H ;设置分频器归TMR0,分频比256 MOVWFOPTION_REG BCF STATUS,RP0 ;选择存储体0 MOVLW 0A0H ;开中断,开TMR0中断 MOVWF INTCON MOVLW 0D8H ;赋
文档评论(0)