中断的延时..ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断的延时.

9.5.1 中断的延时响应和延时处理问题 一次中断过程从中断源发出请求到得到CPU的响应,必然存在一定的延时时间,各个相关信号的时序图(也称定时图)如图9.2所示。 在图9.2,第1行是系统时钟脉冲信号,每4个时钟周期对应一个指令周期。第2行就是指令周期信号,该信号只有在RC震荡模式下,从OSC2角上可以向片外送出。第3行是单片机外部引脚INT是用边沿触发的。假设预先设定的是INT中断信号上升沿有效,则该信号的上升沿将会在一个时钟周期后引发中断标志位INTF被置位(=1)。第4行就代表外部中断标志INTF信号,每个指令周期内部的第2个时钟脉冲上升沿,该信号被抽检一次。一旦检测到INTF信号被设置为1,则CPU会在接下来的一个指令周期内,将全局中断屏蔽位GIE清位(=0)。第5行就是全局中断屏蔽位GIE。在GIE信号被清位的下一个指令周期内,程序计数器PC被置入中断向量0004H,见图中第6行。同时,在该指令周期内完成到中断服务子程序的跳转,并且实现提取该子程序的首条指令,即指令(0004H)见图中第7行。在其后的一个指令周期内,便正式开始执行中断服务子程序的第一条指令,见图中第8行。自从INT引脚输入有效信号,到中断服务子程序的第一条指令得到执行,大约需要3~4个指令周期的延时。更景区的延时时间将取决于中段时间的发生时机。 以上描述的只是一次中断从申请到得到CPU的响应的延时时间,下面再来分析一下CPU响应一次中断到该中断到得到有效处理的延时时间。由于具有中断功能的PIC系统单片机(低档产品PIC16C5X和PIC12C5X系列不具备中断功能),采用的是多源中断的设计方案(即一个中断向量对应着多个中断源),只有唯一的中断向量(也叫中断矢量),或者说只有一个中断服务子程序入口地址。这就意味着,此类单片机的中断服务子程序只能编写一个。这类单片机的硬件结构得到简化了,那么相应的软件设计上就得多开销一些。在一个中断服务子程序中,若想对多个中断源作出处理,就必须在进入中断服务子程序后,首先执行调查具体中断源的一条或多条指令,其后才能对茶道的中断源作出有针对性的服务。如此一来,就形成了一次中断从CPU响应到进入针对性处理的延时时间。该时间有长有短,他会随着被开放的中断源的个数的增加而增加。最好情况时只有一个中断源被开放,则不需检测中断源就可以立即进入针对性处理。最坏情况是所有中断源全部开放,则用在检测中断源上的时间会最长。 另外,PIC单片机采用的是硬件堆栈结构,其好处是极不占用程序存储器空间,也不占用数据存储器空间,还不用用户去操作堆栈指针。 同时也带来一个不可回避的弱点,就是不具备像其他单片机系统中的压栈()PUSH)和出栈(PULL)指令,实现中断现场的保护自然就会麻烦一些,并且占用的处理时间也就会相应多一点;再者,硬件堆栈的深度固定不变,自然使得程度的嵌套次数受到限制。 9.5.2 中断的现场保护问题 中断现场的保护是终端技术中一个很重要的环节。在进入中断服务子程序期间,只有返回地址即程序计数器PC的值被自动压入堆栈。若需要保留其他寄存器的内容,就得由程序员另想办法。由于PIC单片机的指令系统中没有像其他单片机那样的PUSH(入栈)PULL(出栈)之类的指令,所以要用一段用户程序来实现类似的功能。因为是用一段程序来实现现场保护,而程序的执行有可能会影响到W寄存器和STATUS寄存器,所以应该首先把这两个寄存器保护起来,然后再去保存其他用户认为有必要保护的寄存器。并且在PIC单片机中,中断现场数据不是保留到芯片的堆栈存储区中,而是保留在用户自己选择的一些文件寄存器(即RAM数据存储器单元)中,但让一般应该选择通用寄存器来保护现场。后面给出的是一段原厂家最新提供的实现保护中断现场的实例程序片断。 ;将寄存器的内容保存到临时备份寄存器中 [1]MOVWF W_TEMP ;复制W倒塌的临时备份寄存器W_TEMP中 [2]SWAPF STATUS,W ;将STATUS寄存器高低半字节交换后放入 [3]CLRF STATUS ;不管当前处在哪个体,都设置体0作当前体 [4]MOVWF STATUS_TEMP ;保存STATUS到体0上的临时寄存器

文档评论(0)

叮当文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档