中断保护现场

发布者:runaway2000最新更新时间:2016-09-23 来源: eefocus关键字:中断保护现场  寄存器 手机看文章 扫描二维码
随时随地手机看文章
对于中断处理程序中使用到的寄存器,如果主程序中也要使用该寄存器就会发生冲突。常见的需要保护的寄存器有A、B、DPTR、PSW和工作寄存器组。
    由于本技能训练的中断处理程序十分简单,对主程序没有影响,所以未进行保护现场,而一般的中断处理程序均需要保护现场。常见的几种保护现场的方法如下:
    (1)累加器A的保护
     累加器A是程序中使用最为频繁的寄存器,中段处理程序中如果需要使用累加器A,就会改变A的数值。这样中断调用返回后,主程序中的输出控制字就被破坏了,造成输出错误。为了防止这种现象的出现,在中断处理程序中首先将需要使用的寄存器压入堆栈保存,中段处理程序完成后再使其弹出堆栈。以流水灯的中断程序为例,这一程序如下:
          K1:PUSH  ACC               ;将累加器A压入堆栈
              MOV   R6,#0FFH         ;中断处理程序
              ...............
 
          K2:POP   ACC           ;从堆栈中弹出数据到累加器A中        
              RETI                ;中断返回
      注意:将累加器A压入堆栈的指令不是PUSH   A,而是PUSH  ACC。这里ACC是汇编语言默认的符号,它代表累加器A的地址0E0H。
     (2)程序状态字的保护
    由于程序状态字寄存器PSW有几个标志位是执行指令时自动设置的,如果子程序中有改变程序状态字寄存器PSW的指令,则一定要将PSW压入堆栈保护。
    例如:主程序指令如下:
          ADD    A,#0FH
          JC      L1
    其中第一条指令会根据运算结果改变进位标志位C的状态,而第二条指令需要根据C的状态决定是否转移。如果执行完第一条指令后发生中断,中断处理程序中有改变了C的状态,这样终端返回後在执行JC  L1 时就会发生错误。尽管在主程序和子程序中并未直接出现PSW ,但是却出现了PSW 寄存器冲突。为了避免这种情况的出现,子程序中只要使用了能影响PSW中某一位的指令,则一定要将PSW压入堆栈保护。
    影响PSW中标志位的指令参考指令表。
    (3)工作寄存器组的保护
      由于并没有PUSH  Rn指令,所以需要将工作寄存器压入堆栈是只能使用地址。例如:要将R6对应的地址压入堆栈。但是根据PSW中RS0和RS1的数值,R6可能对应4格地址,即06H、0EH、16H、1EH,究竟应当压哪一个地址判断起来比较麻烦。工作寄存器族的设置则提供了一个保护工作寄存器的简单方法。
    程序设计前可以将4格工作寄存器组安排在不同的程序段中,如第0组安排在主程序中使用、第1组安排在外部中断0中使用等。在外部中断0的处理程序中首先将PSW压入堆栈,然后设置RS1=0、RS0=1,这样再使用工作寄存器时就会直接使用第1组工作寄存器组,而不影响第0组工作寄存器组。中断处理程序执行完后弹出PSW,就直接恢复了程序中的工作寄存器组。工作寄存器组及其对应地址见表:
                工作寄存器组及其对应的地址
 PSW.4 RS1  PSW.3  RS0  PSW 组  R0-R7 
 0  0  #00H  第0组  00H-07H
 0  1  #08H  第1组  08H-0FH
 1  0  #10H  第2组  10H-17H
 1  1  #18H  第3组  18H-1FH
     保护方法举例如下:
         PUSH    PSW             ;将PSW压入堆栈
         MOV     PSW,#08H        ;使用第1组工作寄存器组
      .......................    ;中断处理程序
         POP     PSW             ;恢复 PSW
         RET                     ;中断返回
    (4)DPTR的保护
      DPTR是一个常用的地址指针,它是一个16位的寄存器,压入堆栈保护时必须分别将高8位和低8位压入。操作如下: 
       .........................
         PUSH    DPH             ;将DPTR高8位压入堆栈
         PUSH    DPL             ;将DPTR低8位压入堆栈
       ......................... 
         POP     DPL             ;将DPTR低8位弹出堆栈
         POP     DPH             ;将DPTR高8位弹出堆栈       
       .........................
      注意:根据堆栈先进后出的操作原理,先压入的必须后弹出,不得颠倒顺序。
关键字:中断保护现场  寄存器 引用地址:中断保护现场

上一篇:c51 串口 波特率的计算
下一篇:AT89C 系列单片机解密原理

推荐阅读最新更新时间:2024-03-16 15:11

寄存器,存储器,RAM,ROM有什么区别?
这些都是比较抽象的专业名词了,特别是寄存器,很多人在学单片机的时候对这个一脸懵逼,寄存器到底是个啥玩意? 其实不用很深刻的理解它到底是什么,你只需要知道通过配置寄存器的值,就可以把外设用起来。 我做单片机开发的这10几年,接触寄存器非常多,比如单片机有寄存器,很多外围芯片也有寄存器(EEPROM、FLASH、时钟芯片等),只要你掌握其中一个,其它的都可以触类旁通。 就像密码锁一样,设置正确的密码,锁就会打开,寄存器也是一样,设置正确的值,芯片资源就能为你所用。 下面更加全面地介绍下它们之间的区别: 一、寄存器 在单片机应用上,寄存器(register)通常用于存储程序的运行时状态,例如程序计数器(Program Counter,P
[单片机]
Silicon Image对Analogix提起诉讼
SiliconImage今天宣布它已经在美国加利福尼亚北部联邦地方法院向硅谷数模半导体有限公司(Analogix Semiconductor,以下简称Analogix 公司)提起诉讼。Analogix是一家总部位于加利福尼亚洲圣克拉拉县的特拉华公司。 该诉讼控告Analogix公司涉嫌版权侵权、盗用商业秘密以及从事非法、不公平而且带有欺骗性的商业行为。在本诉讼案件当中,Silicon Image公司宣称Analogix公司涉嫌未经授权并且侵犯Silicon Image公司的知识产权,复制并使用Silicon Image公司的专有寄存器映射图与半导体配置软件。控告宣称Analogix公司非法获取Silicon Image公司的秘密专
[焦点新闻]
51单片机的GPIO配置
导语 通过单片机控制外围器件(LED,蜂鸣器,数码管,按键),本质上是对于单片机IO口的操作,相对于STM32,51单片机IO口模式较少,但了解IO的内部对于学习了解51单片机也由很大的帮助。 GPIO GPIO(General Purpose Input Output),通用输入输出。既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。可以通过软件去控制。 在大多数的时候,我们将IO口可以看为一个电子开关,通过向IO寄存器中写入相应的值,其输出的电平就随着寄存器的变化而变化,这是IO口的输出,在大多数的单片机中,需要去配置单片机的IO模式,是输入还是输出。 即需要预先初始化,配置GPIO的参数,再去使用
[单片机]
51单片机的GPIO配置
手把手教你写S12XS128程序(15)--A/D寄存器说明5
5、ATD0状态寄存器5---ATD0START0、ATD0START0 ATD0START0反映当前的转换通道、A/D转换是否结束、是否有外部触发等; ATD0START1反映转换序列中相应的转换是否完成。寄存器ATD0START0、 SCF ---转换序列完成标志 在单次转换模式时,当转换完成后置位 (SCAN = 0) 在连续转换模式时,当第一次转换完成后置位 (SCAN = 1),当AFFC = 0,写 1 清零。 ETORF ---外部触发覆盖标志 如果在转换过程中高/低电平出现,置位 FIFOR 当结果寄存器在读出之前已经被写入时,置位 ( CCF 没有清零) CC 转换计数器---
[单片机]
基于TMS320F2812的交流变频调速系统的设计
  目前已有多种PWM 控制方式应用于交流变频调速系统,其中空间矢量PWM(SVPWM)以其特有的优越性能,在电机调速方面得到广泛应用。该种方法控制简单,数字化实现方便,可显著减小逆变器输出电流谐波成分及电机谐波损耗,降低脉动转矩,提高电压利用率。   本文主要介绍利用TMS320F2812(以下简称F2812)实现对变频调速系统的实时控制。 图1 变频调速系统结构图 图2 控制板逻辑框图 TMS320F2812主要特点   F2812运算速度快,工作时钟频率达150MHz,指令周期可以达到6.67ns 以内,低功耗(核心电压1.8V,I/O口电压3.3V)。   采用哈佛总线结构,具有强大的操作能力、迅速的中断响应
[模拟电子]
STM32:位带操作分析
传统操作:修改一个32位寄存器内值的方法是,从寄存器中取出值,修改这个值,然后再放回这个寄存器中。 位带操作:对于位带区的每一位,在位带别名区都有一个32位的地址对应,当需要修改值时,直接对该地址所指向的值进行修改。 位带区:支持位带操作的地址区,也就是说此区域可以给它起一个地址别名。 位带别名:即为上述映射到的32位地址(别名)所在区域,对这个别名地址的访问最终作用到位带区的访问上。 支持位带操作的两个内存区域是: 0X2000_0000-0X200F_FFFF(SRAM区中的最低1MB) 0X4000_0000-0X400F_FFFF(片上外设区中的最低1MB) 位带区与位带别名区之间的映射关系见下
[单片机]
STM32:位带操作分析
基于PIC单片机的SPWM控制技术
引言 在UPS等电力电子设备中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难。SPWM技术较好地克服了这些缺点。目前SPWM的产生方法很多,汇总如下。 1)利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进; 2)由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制; 3)利用CPLD(复杂可编程逻辑器件)设计,实现数字式SPWM发生器; 4)基于单片机实现SPWM,此方法控制电路简单可靠,利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。 而当今单片
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved