MCS-96系列单片机中断优先级的控制方法

控制/MCU

1883人已加入

描述

  1、前 言

  MCS—96系列单片机的中断系统颇具特色,其中断优先级的控制极具灵活性,用户可采用软、硬件结合的方法随心所欲地安排各类中断源的优先级。

  2、MCS—96系列单片机中断

  优先级结构的特点

  MCS—96系列单片机中断系统的硬件优先级排队威廉希尔官方网站 为各类中断源规定了优先级顺序。这种中断优先级的结构有如下特点。

  (1)硬件排队威廉希尔官方网站 并不能保证各中断源的优先级。这是因为在某个中断源的中断请求被CPU响应后,INT-PENDING 中的相应位即被清零,这意味着正在被服务的中断源不能参加有新的中断请求后的优先权比较,倘未采取一定措施,就会造成级别高的中断服务被级别较低的中断申请所打断的后果。譬如外中断(优先级最高)和定时器溢出中断(优先级最低)同时产生,在系统已开放中断的情况下,外中断的申请将首先被CPU所响应,进入其中断服务程序后,定时器溢出的中断申请又被优先权编码威廉希尔官方网站 加以比较,由于INT-PRNDING中对应外中断的位已被清零,这时参与优先级比较的仅有定时器溢出中断,因而外中断的服务过程被打断,CPU转向定时器溢出的中断服务程序,直到服务完毕后,才返回为外中断继续服务。不难看出,在多个中断源提出中断申请的情况下,事实上最先得到完整服务的将是级别最低的中断源,级别最高的中断服务反而要等到最后才可完成。这也意味着最高级别的中断源实质上变成了最低级别。

  (2)可采用软、硬件结合的方法实现特定的优先级别顺序。虽然如上所述,硬件排队威廉希尔官方网站 不能保证按指定优先级的高低顺序实现中断嵌套,但可采取一定的软件措施来实现设计人员所预想的优先级排队顺序。

  3、实现预定的优先级排队

  顺序的软件措施

  为实现特定的中断优先级顺序,需在软件上采取相应的措施,下面分四种情况予以讨论。

  3.1 实现硬件规定的优先级顺序

  硬件威廉希尔官方网站 规定了8种中断源的优先级顺序,即外中断的优先级最高,串行口中断次之,……,而定时器溢出中断的级别最低。实现硬件所规定的这种优先级有两种含义:一是在多个中断源提出中断申请时,CPU优先响应级别最高的请求;二是高级别的申请可打断低级别的服务过程,但反之不可,其具体做法如下:

  (1)首先在主程序中设置INT—MASK,执行指令LDB INT—MASK,#0FFH,使其内容为全1,以开放全部的中断,使任一中断源或多个中断源提出中断申请时,CPU全部予以响应。

  (2)在每一中断服务程序的开始便执行DI或PUSHF指令,以禁止所有的中断,而后将INT-MASK中优先级低于本次中断的所有位清零,而高于本次中断的所有位置1,再执行EI指令开放中断。如此做之后,在该中断服务程序执行的过程中,低级别的中断不可能实现中断嵌套而高级别的中断则可以。在中断服务程序的结尾处,应再次将INT-MASK置为FFH,以使CPU在中断返回后能再次响应任何中断。这样就保证了硬件所规定的优先权顺序。

  下面是采用上述方法的HSO中断服务程序的开始和结束处所需使用的指令示例。

  INT-SHO:PUSHF

  LDB INT-MASK,#0F0H

  EI

  .

  .

  .

  POPF

  RET

  PUSHF指令的作用是保护PSW的内容并关总中断开关;由于HSO事件中断对应INT-MASK中的D3位,因此LDB INT-MASK,#0F0H指令的作用是只允许高于HSO事件的中断;POPF的指令是恢复PSW,这样也使INT-MASK=0FFH,因为在主程序中原已将FFH送入该寄存器。

  3.2 不允许任何中断打断正在

  运行的中断服务程序

  做法比较简单,在进入中断服务程序后便关中断(使PSW.9=0),直至中断服务程序结束时才开中断。程序示例如下:

  INTSUB:PUSHF(或DI)

  .

  .

  .

  POPF(或EI)

  RET

  PUSHF使PSW.9=0,从而禁止了所有中断。在中断服务程序的运行过程中不准开放中断,直到程序结束。这样就保证了任何中断申请都不能打断正在进行的服务过程。

  3.3 使任意的中断源成为最高级别

  这是指用户安排特定的中断源的中断申请能够打断任何中断服务程序而实现中断嵌套,保证在任何情况下这一指定的中断源都能得到优先的服务。具体做法是在每一中断服务程序的开始先关总中断,而后设置INT-MASK,只开放设定为最高级别的中断。

  假设指定A/D转换结束中断能够中断任何服务过程,则外中断的中断服务程序设计如下:

  EXTINT:PUSHF   ;关总中断

  LDB INT_MASK, # 02H ;只允许A/D转换结束中断

  EI       ;开中断

  .

  .

  .

  POPF

  RET

  3.4 任意安排各中断源的优先级别

  可根据系统的实际需要,重新安排各中断源的优先级,使之不同于硬件所规定的中断优先级。具体做法是在每一中断服务程序的开始即关中断,然后对INT-MASK进行设置,只开放预定的高级别的中断。假设需设定优先级由高至低的顺序依次为:定时器溢出中断、外中断、A/D转换结束中断,则对应的三个中断服务程序可设计如下:

  TIMERV:PUSHF  ;定时器溢出的中断服务程序

  .

  .

  .

  POPF

  RET

  EXTINT:PUSHF   ;外中断的中断服务程序

  LDB INT_MASK, # 01H ;只开放定时器溢出中断

  EI

  .

  .

  .

  POPF

  RET

  AD-INT:PUSHF     ;A/D转换结束中断服务程序

  LDB INT_MASK, # 81H ;开放定时器溢出中断及外中断

  EI

  .

  .

  .

  POPF

  RET

  在A/D转换结束的中断服务程序中开放了定时器溢出中断和外中断,则这两类中断均可打断该程序的运行;在外中断的中断服务程序中只开放了定时器溢出中断;而在定时器溢出的中断服务程序的运行中则禁止任何中断,这样便保证了预定的中断嵌套的实现。

  4、MCS—96系列单片机中断优先级控制小结

  这种方法可使用户随心所欲地安排中断源的优先级顺序,具有很大的灵活性,为中断系统的设计、软件编程带来了方便。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
qixuebing 2012-05-05
0 回复 举报
学习 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分