积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 单片机 >> 相关文章
  相关分类: 相关文章 | 应用论文 | 新产品 | 下载 |
单片机中断多优先级的软件扩展方法
 
作者:张 辉   来源:国外电子元器件    点击数:374   更新时间:2007-9-14
您可以添加到网摘 让更多人关注此文章:

    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设定INT1为高优先级正在执行外部中断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子程序的真实入口地址


  ·


  ·


  ·


POP DPH


  POP DPL


  RETI


  T1: PUSH DPL



  PUSH DPH


  MOV DPTR,#T1RL


  PUSH DPL


  PUSH DPH


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


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


  T1RL: · ;T1子程序的真实入口地址


  ·


  ·


  ·


  POP DPH


  POP DPL


  RETI


  SS: PUSH DPL


  PUSH DPH


  MOV DPTR,#SSRL


  PUSH DPL


  PUSH DPH


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


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


  SSRL: · ;串行口子程序的真实入口地址


  ·


  ·


  ·


  POP DPH


  POP DPL


  RETI


  上述程序利用IP寄存器给出了两级优先级,其中INT0、T0为高优先级,INT1、T1串行口为低优先级。为使某中断能响应同级甚至低级中断,只要在中断服务子程序中用RETI指令清除相应的不可寻址的“优先级生效”触发器即可。程序一开始的两条PUSH指





令的作用是对原始数据进行入栈保护(如此时DPTR中的数据不需保留,则这两条压栈指令也可不要,相应的弹栈指令也可不要),然后将其真实子程序入口地址入栈,并经RETI出栈后弹给PC指针,以便在执行完RETI后正确执行真实子程序。当该中断服务子程序执行完毕后,RETI将返回主程序断点处以继续执行原来程序。


  4 结束语


  本文所阐述的多优先级扩展方法是纯软件方法,该方法只需在程序中加入为数不多的相应代码,便可进行各种中断嵌套(如同优先级响应或高优先级响应低优先级等)。此方法的代价是要花费更多的中断响应时间,但相对于添加硬件扩展的方法而言,这点代价还是值得的。

[1]



相关文章
· 单片机4×4矩阵式键盘的课程设计[29]
· 基于单片机的数字正弦机研制[45]
· 图形LCD模块ACM19264ASB的汉字显示[13]
· 基于单片机的康复仪研究[24]
· 基于单片机的康复仪研究[16]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
各种冲值卡批发销售!独家特价!
特价销售GPS车载导航系统!
数字电视批发销售!你想不到的价格!
品牌相机批发销售!你想不到的价格!
品牌手机批发销售!你想不到的价格!
笔记本电脑批发销售!你想不到的价格!
那一年我做了鸭子2
那一年我做了鸭子1
等你十年(下)
等你十年(上)
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
新店开业,部分开发板&元器件特...
[原创]VB编程RS232串口...
红外摄像机控制故障分析与处理方...
红外防水摄像机在智能视频监控中...
步进电机不用驱动芯片能驱动吗?...
我要选一块双串口,带AD的单片...
[分享]运放和功放的区别是什么...
4×4矩阵式键盘的课程设计...
做过高速信号滤波的高手帮忙...
做视频信号放大器,各位有什么好...

 
赞助商 [更多]
 


ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网