网站首页 | 经济学论文 | 证券金融 | 管理学 | 会计审计 | 法学论文 | 医药学论文 | 社会学论文 | 教育论文 | 计算机 | 艺术论文 | 哲学论文 | 财务管理 |
写论文网
  • 民法论文
  • 经济法论文
  • 国际法论文
  • 法学理论论文
  • 司法制度论文
  • 国家法论文
  • 宪法论文
  • 刑法论文
  • 行政法论文
  • 您的位置:写论文网 > 法学论文 > 民法论文 > 单片机的中断优先级【单片机... 正文 2019-12-26 07:26:30

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

    相关热词搜索:

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

    单片机中断多优先级的软件扩展方法 关键词:单片机;
    中断;
    优先级;
    寄存器 1 引言 所谓中断是指当CPU正在处理某件事情的时候,外部发生的某一事件 (如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速 去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处 理完该事件以后,再回到原来被中止的地方继续原来的工作,这样的一个过程称 之为中断。以8051为例,中断系统含有5个中断源,分别是外部中断0请求 (INT0),外部中断1请求(INT1),定时/计数器0溢出中断请求(T 0),定时/计数器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 0013HLJMP 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 DPLRETI 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 DPLRETI 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 结束语本文所阐述的多优先级扩展方法是纯软件方法,该方法只需在程序中加入 为数不多的相应代码,便可进行各种中断嵌套(如同优先级响应或高优先级响应 低优先级等)。此方法的代价是要花费更多的中断响应时间,但相对于添加硬件 扩展的方法而言,这点代价还是值得的。

    • 范文大全
    • 教案
    • 优秀作文
    • 教师范文
    • 综合阅读
    • 读后感
    • 说说
    单片机的中断优先级【单片机中断多优先级的软件扩展方法】》由(写论文网)整理提供,版权归原作者、原出处所有。
    Copyright © 2019 写论文网 All Rights Reserved.