EDN China > 技术文章 > 微处理器与DSP > 多媒体处理器 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

单片机中断多优先级的软件扩展方法

来源:国外电子元器件/作者:广东工业大学信息工程学院 张 辉?? 2007年09月14日 ?? 收藏0

  1 引言

  所谓中断是指当CPU正在处理某件事情的时候,外部发生的某一事件(如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再回到原来被中止的地方继续原来的工作,这样的一个过程称之为中断。以8051为例,中断系统含有5个中断源,分别是外部中断0请求(INT0),外部中断1请求(INT1),定时/计数器0溢出中断请求(T0),定时/计数器1溢出中断请求(T1)以及串行口中断请求(Tx/Rx)。既然系统含有5个中断源,就有可能出现数个中断源同时提出中断请求的情况,这样,设计人员必须事先根据它们的轻重缓急来为每个中断源确定CPU对其的响应顺序。然而,对于中断优先级寄存器IP来说,只可能设定两级优先,即控制位为1时对应的中断源为高级中断,反之,控制位为0时对应的为低级中断。这样就出现一个问题:如果一个中断正在执行,如何才能让它响应同级甚至是低级中断请求呢?

  2 中断多优先级的扩展

  根据8051的结构特点,其中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出

CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。遍历系统所提供的111条指令,只有RETI可以达到此目的。该指令可在CPU执行该指令时,一方面清除中断响应时所置位的“优先级生效”触发器,另一方面可从当前栈顶弹出断点地址送入程序计数PC,从而返回主程序。

  3 软件扩展方法

  3.1 高级中断源响应低级中断源的软件设计

  现以当前IE=84H(开放外部中断1及总控制位),IP=04H?撋瓒ǎ桑危裕蔽?高优先级?斦?在执行外部中断1服务子程序为例来进行说明。如欲响应串行口中断,也就是要实现高级中断源响应低级中断源,设计时可加入如下代码而无须改变IP寄存器的内容:

  PUSH IE ;IE内容入栈保护

  MOV IE , #10010000B ;开放串行口中断

  CALL PP ;继续执行原中断子程序,但可

  随时响应串行口中断请求

  ...

  POP IE ;恢复原IE内容

  RETI

  PP: RETI

  3.2 同级中断源之间的响应

  上述代码体现了高级中断源(INT1)响应低级中断源(串行口)的软件实现方法。但是, 8051系统共含有5个中断源,因此必须解决同优先级中断之间的嵌套问题,具体源程序如下:

  ORG 0000H

  LJMP MAIN

  ORG 0003H

  LJMP X0 ;INT0入口地址

  ORG 000BH

  LJMP T0 ;T0入口地址

  ORG 0013H

  LJMP X1 ;INT1入口地址

  ORG 001BH

  LJMP T1 ;T1入口地址

  ORG 0023H

  LJMP SS ;串行口入口地址

  MAIN: MOV IE ,#9FH ;开放所有中断

  MOV IP,#03H ;设定INT0、T0为高优先级

  SJMP $

  X0: PUSH DPL

  PUSH DPH

  MOV DPTR,#X0RL

  PUSH DPL

  PUSH DPH

  RETI ;(PC)=X0RL,清"高优先级生效"

  触发器,此时可响应其它中断请求

  X0RL:· ;INT0子程序的真实入口地址

  ·

  ·

  ·

  POP DPH

  POP DPL

  RETI

  T0: PUSH DPL

  PUSH DPH

  MOV DPTR,#T0RL

  PUSH DPL

  PUSH DPH

  RETI ;(PC)=T0RL,清"高优先级生效"

  触发器,此时可响应其它中断请求

  T0RL: · ;T0子程序的真实入口地址

  ·

  ·

  ·

  POP DPH

  POP DPL

  RETI

  X1: PUSH DPL

  PUSH DPH

  MOV DPTR,#X1RL

  PUSH DPL

  PUSH DPH

  RETI ;(PC)=X1RL,清“高优先级生效”

  触发器,此时可响应其它中断请求

  X1RL: · ;INT1子程序的真实入口地址

  ·

  ·

  ·


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

单片机? 中断? 优先级? 寄存器?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈