微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 单片机关键技术基础详解(二)

单片机关键技术基础详解(二)

时间:02-21 来源:本站整理 点击:

软件复位是在利用软件陷阱技术或软件看门狗技术时,必需配套实施的一项后续处理工作。所谓"软件复位"是一种由用户软件控制的复位活动,就是利用一系列指令来模拟硬件复位所实现的各种操作内容,并且重新从头开始执行用户程序。

  其中的操作内容应该包含:(1)对于标准80C51的21个特殊功能寄存器SFR的复位操作,利用MOV指令很容易实现。全部复位可能不是必需的,只管那些在用户程序中用到的SFR即可,可以由用户自己定制。

  2)对于无统一编址的程序计时器PC的复位,利用一条跳转指令即可。(3)中断激活触发器的复位既容易被人们忽略,也不容易实现。理由是它们对于用户程序是不可见的,无法直接读写其内容。有的编程人员采用LJMP 0000H(机器码为20 00 00H)作为软件陷阱,认为直接跳转到复位矢量就完成了软件复位,就是这类失误案例的典型代表。

  清除中断激活触发器有何必要呢?程序的跑飞是随机发生的,其起飞点完全可能发生在低级或高级中断服务子程序中,这时的中断激活触发器已经被置位。如果在程序回复之后没有及时清除它们,将阻止以后出现的所有的同级或低级中断请求。

  

  图1 中断激活触发器示意图

  中断激活触发器包含高权组和低权组两个触发器,电路组成如图1所示,该图是根据作者的理解和经验绘制的。电路中包括1个逻辑或门G1、两个S-R触发器FF1和FF2。当CPU响应低级中断请求之后,FF1被置位,其Q = 0,封锁"低权组"不再受理新的低级中断请求;当CPU响应高级中断请求之后,因为G1的作用而使FF1和FF2同时被置位,FF1的Q = 0封锁"低权组",FF2的Q = 0封锁"高权组",不再受理新的高级和低级中断请求。

  如何设计"软件复位程序"呢?其编写方法如下。

  SWRST: ;定义软件复位程序的实际入口地址

  CLR EA ;首先关闭中断源总使能位

  SETB F0 ;设置一个软件复位标志位

  MOV P0,#0FFH ;设定通用端口P0为高阻输入状态

  MOV P1,#0FFH ;设定通用端口P1为高阻输入状态

  MOV P2,#0FFH ;设定通用端口P2为高阻输入状态

  MOV P3,#0FFH ;设定通用端口P3为高阻输入状态

  MOV PSW,#00H ;设定程序状态字寄存器为原始值

  …… ;(据实际需要还可初始化其他SFR)

  MOV DPTR,#SWR0 ;为RETI准备弹出地址,而又不想改变执行顺序

  PUSH DPL ;压栈低字节,在先

  PUSH DPH ;压栈高字节,在后

  RETI ;中断返回指令,清除高级中断激活触发器

  SWR0: CLR A ;准备复位地址

  PUSH ACC ;压栈低字节00H

  PUSH ACC ;压栈高字节00H

  RETI ;清除低级中断激活触发器,并跳到0000H

  以下几点需要说明:(1)首先关闭总的中断使能位,以确保软件复位过程顺利完成;(2)其中的核心指令是中断返回指令RETI,因为在整个指令集中只有该指令能够清除中断激活触发器;(3)末尾RETI指令的作用还代替了一条3字节的"LJMP 0000H"指令;(4)由软件陷阱捕获的跑飞程序并不一定同时置位了所有两个中断激活触发器,但是该程序仍然适用,并且也没有任何负面影响;(5)软件复位标志这里利用了PSW中的一个通用位F0,也可以利用F1、GF0、GF1以及RAM字节单元或位单元等;(6)软件复位是一种不外扩任何硬件电路、不导致单片机发生状态迁移、纯软件的复位方法。

  软硬件复位技术

  软硬件复位是软件复位功能的一种延伸,也是单片机的一种自主复位方式,既具有软件复位的特点(可以由编程人员按需要来启用),又具有硬件复位的特点(能够实现硬件复位的全部操作内容)。这种复位方式是本文作者自行规划、设计和命名的。

  

  (a)分立件电路方式

  

  (b)IC电路方式

  在上述软件复位的基础上很容易实现这里所说的软硬件复位方式,不过需要外扩一定的硬件电路的支持。图2是两种配合软硬件复位的外扩电路。其中,图2 (a)电路是在普通复位电路的基础上,添加1只三极管Q1和3只阻容元件而成的,并且其导通与截止由一条并口引脚控制,如P1.0。平时P1.0维持高电平,Q1截止;当内部软件需要实施该复位时,从P1.0脚输出低电平,Q1导通把RST脚拉高,强行复位单片机。这里R3、R4和C2起着延时和限流的双重作用。图2(b)电路是在MAX812M对接80C51电路基础上添加一条连线而成的,其工作原理与上类似。该连线把MAX812M的人工复位输入脚 MR和一条通用I/O脚(如P1.0)连接起来即可。

  如何设计"软硬件复位程序"呢?其编写方法如下。

  SHRST: ;定义软硬件复位程序的入口地址

  SET F1 ;设置一个软件复位标志位

  CLR P1.0 ;从P1.0输出低电平,开始实施软硬件复位

ORL PCON,#02H;置位PD,令单片机进入停机状态

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top