《51单片机应用开发从入门到精通》——2.13 软件陷阱实例

2.13 软件陷阱实例

在单片机系统的实际应用中,系统的抗干扰能力显得非常重要。提高单片机系统的抗干扰能力除了采取硬件抗干扰手段外,也可采用软件抗干扰的手段,并且软件抗干扰具有设计灵活、节省硬件资源、成本低的优点,加以合理运用也能起到很好的抗干扰效果。

软件抗干扰的措施主要有指令冗余、软件陷阱、软件“看门狗”等。本节通过软件陷阱实例介绍如何编写软件抗干扰程序。

本节首先介绍什么是程序跑飞以及软件陷阱技术,接着讲述软件陷阱在程序中的位置,最后将给出软件陷阱程序实例并对软件陷阱程序进行分析。

2.13.1 基础知识

单片机程序正常运行时,程序计数器PC始终指向正在执行指令的下一条指令第一个字节的程序存储器单元地址,这样就保证了单片机能够正确地读取每一条指令的各个字节,即CPU先读取操作码,再读取操作数(如果有操作数字节的话)。在8051单片机中,程序计数器PC的寻址范围是0000H~FFFFH,共64KB。用户应用程序中,根据系统要求,规定了程序运行的唯一路径。这体现在系统上电后,程序计数器PC有唯一的变化历程,保证了程序正常、有序地运行。程序跑飞是指系统受到某种干扰后,程序计数器PC的值偏离了给定的唯一变化历程,导致程序运行偏离正常的运行路径。

程序跑飞的因素及后果往往是不可预计的。但在很多情况下,程序跑飞后PC指向未写入数据的Flash程序存储器。由于没有写入数据的Flash程序存储器的内容为0FFH,机器码0FFH对应的指令为MOV R7,A,所以系统不断地执行MOV R7,A指令,并很快会执行到程序存储器的最末尾,进入死循环而导致死机。这时,采用软件陷阱技术能有效引导跑飞的程序尽快退出死循环并迅速复位。

2.13.2 软件程序设计

软件陷阱程序主要包括程序跑飞的捕获和复位处理两部分,下面对这两部分分别给出程序实例并对程序做详细解释。

1.软件陷阱

软件陷阱程序段如下:

NOP
NOP
LJMP ERR     ;跳转到软件陷阱复位处理程序

当单片机系统工作正常时,单片机不会执行软件陷阱程序段。但是当单片机系统受到干扰而程序跑飞后,由于程序计数器PC值错误,破坏了正常的指令格式,导致执行非正常指令,从而执行软件陷阱程序段,落入软件陷阱,将跑飞的程序引导到软件陷阱复位入口地址ERR。

软件陷阱程序段中的连续2条NOP指令实际上也就是指令冗余的抗干扰方法,目的是为了增强LJMP ERR被执行的能力,即LJMP ERR指令不会被冲散,当程序跑飞后会得到完整地执行,从而使跑飞的程序纳入正常轨道。

2.软件陷阱在程序中的位置

下面将根据软件陷阱在程序中的不同位置,给出软件陷阱程序的具体实例。

(1)未使用的中断向量区

在未使用的中断向量区放上软件陷阱,就可以及时捕捉到错误的中断。在未使用的中断向量区放置软件陷阱的实例如下:

ORG 0000H
LJMP MAIN       ;程序跳转到主程序入口
ORG 0003H
LJMP X0_INT     ;程序跳转到外部中断0中断服务程序入口
     NOP        ;冗余指令
     NOP
     LJMP ERR    ;陷阱
ORG 000BH
LJMP T0_INT      ;程序跳转到T0中断服务程序入口
     NOP         ;冗余指令
     NOP
     LJMP ERR    ;陷阱
ORG 0013H
LJMP X1_INT      ;程序跳转到外部中断1中断服务程序入口
     NOP         ;冗余指令
     NOP
     LJMP ERR    ;陷阱
ORG 001BH
LJMP T1_INT      ;程序跳转到T1中断服务程序入口
     NOP         ;冗余指令
     NOP
     LJMP ERR    ;陷阱
ORG 0023H
LJMP S_INT       ;程序跳转到串行口中断服务程序入口
     NOP         ;冗余指令
     NOP
     LJMP ERR    ;陷阱

(2)子程序后面

当用户应用程序正常运行时,这些软件陷阱程序段并不会执行,但是当单片机受干扰而使程序失控时,程序计数器PC指针一旦落入这些陷阱区,就可以马上将跑飞的程序拉回到正确的轨道。

;……
RET
   NOP      ;冗余指令
   NOP
   LJMP ERR     ;陷阱

(3)中断服务程序后面

;……
RETI
   NOP      ;冗余指令
   NOP
   LJMP ERR     ;陷阱

(4)在表格区

TABEL:
DB ;……
DB ;……
   NOP      ;冗余指令
   NOP
   LJMP ERR     ;陷阱

(5)未使用的程序存储器空间

如上文所述,程序一旦跑飞到未使用的程序存储器空间,将会飞流直下,一般在一些固定的地址加入软件陷阱,捕获跑飞的程序。

ORG 1000H
   NOP      ;冗余指令
   NOP
   LJMP ERR     ;陷阱
ORG 1FFBH
   NOP      ;冗余指令
   NOP
   LJMP ERR     ;陷阱

3.复位处理程序

跑飞的程序被软件陷阱捕捉后,可以直接使用LJMP 0000H指令使程序回到正常的执行状态。但是由于程序跑飞前的单片机状态不确定,一些情况下直接使用LJMP 0000H指令使程序返回正常状态并不可靠,因此最好加入一段错误复位处理程序,将单片机恢复到正常状态。错误复位处理程序实例如下:

ERR:
   CLR EA    ;关闭中断                                (1)
   MOV DPTR,#ERR1  ;准备第一次返回地址                 (2)
   PUSH DPH    ;                                     (3)
   PUSH DPL    ;                                     (4)
   RETI     ;清除高级中断激活标志                      (5)
ERR1:
   CLR A    ;准备复位地址0000H                         (6)
   PUSH A    ;                                        (7)
   PUSH A    ;                                        (8)
   RETI     ;清除低级中断激活标志                       (9)

使用以上的错误复位处理程序主要是由于程序受到干扰而跑飞是随机发生的,如果程序跑飞前正处于中断状态,直接跳转到程序起始位置0000H并不能使单片机回到正常工作状态(中断激活标志未清除)。在8051单片机中,能够清除中断激活标志的指令只有RETI指令,因而可以利用RETI指令使单片机回到正常状态。而在最严重的情况下,程序跑飞时,单片机正处于两级中断嵌套的状态,此时需要通过两个RETI指令才能使单片机回到正常状态。下面我们看看上面的错误复位处理程序实例是如何使单片机回到正常状态的。

程序(1)关闭中断,使错误复位处理程序不受到中断信号的影响。程序(2)~(4)将ERR1的地址压入堆栈中。程序(5)使用RETI指令清除高级中断激活标志,同时使程序跳转到ERR1处继续执行。程序(6)~(8)将地址0000H压入堆栈中。程序(9)再次使用RETI指令清除低级中断激活标志,同时使程序跳转到起始位置0000H。通过这一系列操作,才能真正可靠地将单片机恢复到正常状态,并从程序起始位置重新开始执行。

2.13.3 技巧总结

  • 本实例详细解释了软件陷阱的作用、原理,并给出了软件陷阱的程序实例。本实例需要注意以下两点。
  •  在程序的恰当位置放置软件陷阱,可以在一定程度上加强抗干扰能力。但是软件陷阱的作用是有限的,在抗干扰要求高的情况下,还应当和“看门狗”等硬件抗干扰手段结合使用。
  •  软件陷阱最好不要将程序直接引导向启动地址0000H,而应当加入一段如上文所示的错误复位处理程序。在错误复位处理程序中,除通过本实例给出的这些指令操作使单片机的状态恢复正常外,还可加入一些保存关键数据的操作。
时间: 2024-09-18 13:01:59

《51单片机应用开发从入门到精通》——2.13 软件陷阱实例的相关文章

《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

2.4 延时时间计算实例 51单片机应用开发从入门到精通 在单片机的实时控制系统中,常常需要用到延时操作,所以,延时子程序往往是编写单片机程序中不可缺少的一部分.延时方法有硬件延时和软件延时,硬件延时将在后面有关章节中介绍,本节将介绍软件延时方法. 所谓软件延时,就是让计算机重复执行一些无具体任务的程序,利用执行程序的时间来达到延时的目的. 2.4.1 机器周期和指令周期 单片机读.写操作都需要消耗一定的时间,机器周期是指单片机完成一个基本操作所用的时间,如读操作.写操作等.当石英晶体为12MH

《51单片机应用开发从入门到精通》——2.9 交通灯实例

2.9 交通灯实例 51单片机应用开发从入门到精通 定时器/计数器是单片机中最常用.最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用方法,并复习如何使用上节学习的散转程序. 本节首先介绍交通灯的基础知识以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的编程以及程序的全貌,最后将总结一下本实例的技巧与注意点. 2.9.1 基础知识 交通灯控制器实例主要使用了8051单片机的定时器/计数器,本实例的基础知识主要包括:交通灯的变化规律.定时器/计数器的概念

《51单片机应用开发从入门到精通》——2.10 变频报警实例

2.10 变频报警实例 51单片机应用开发从入门到精通 本实例是用软件延时方法实现变频振荡报警,即用P3.4端口输出1kHz和2kHz的变频信号以示报警,每隔1s交替变换1次.本节硬件设计与上节相同. 2.10.1 程序设计 本程序利用软件延时方法,使P3.4端口输出1kHz和2kHz的变频信号,每隔1s交替变换1次. 1.流程图 程序设计流程如图2-16所示. 2.程序 汇编语言编写的变频报警源程序FS02.ASM代码如下: 01: MAIN: MOV R1,#8 ;1kHz持续时间 02:

《51单片机应用开发从入门到精通》——导读

前言 51单片机应用开发从入门到精通 随着微处理器技术和SoC技术的发展,从较早的4位机到8位机,一直发展到现在的32位机,单片机的应用逐渐渗透到生产.生活的各个领域.本书主要针对MCS-51体系单片机,从硬件.软件两个方面的基础知识开始进行介绍.MCS-51体系单片机由于具有简单易学.稳定性好.成本低等优点,在工业控制.家用电器.汽车电子乃至航天电子等许多领域都有着重要的应用. 本书主要针对初.中级读者群,通过众多的实例介绍单片机开发的基础知识.基本工具.基本过程及简单应用,既方便初学者入门,

《51单片机应用开发从入门到精通》——1.3 Keil uVision2集成开发环境

1.3 Keil uVision2集成开发环境 51单片机应用开发从入门到精通 uVision2 IDE是Keil software公司的产品,它集项目管理.编译工具.代码编写工具.代码调试以及完全仿真于一体,特别适用于个人开发或者人数少.对开发过程的管理还不成熟的开发团体.这一功能强大的软件提供简单易用的开发平台,可以让开发者在开发过程中集中精力于项目本身,加快开发速度. 1.3.1 uVision2介绍 uVision2的界面窗口如图1-13所示,该软件提供了丰富的工具,常用命令都具有快捷工

《51单片机应用开发从入门到精通》——1.5 测试方法和工具

1.5 测试方法和工具 51单片机应用开发从入门到精通 完成一个用户样机,首先要完成硬件组装工作,然后进入软件设计.调试和硬件调试阶段.硬件组装就是在设计.制作完毕的印制板上焊好元件与插座,然后就可用仿真开发工具进行软件设计.调试和硬件调试工作. 1.用户样机软件的设计.调试 用户样机软件设计.调试的过程如图1-25所示,可为以下几个步骤. 第一步,建立用户源程序.用户通过开发系统的键盘.CRT显示器及开发系统的编辑软件,按照所要求的格式.语法规定,把源程序输入到开发系统中,并存在磁盘上. 第二

《51单片机应用开发从入门到精通》——2.1 简单点亮发光二极管实例

2.1 简单点亮发光二极管实例 51单片机应用开发从入门到精通 单片机最简单的实例之一就是点亮发光二极管(LED)闪烁.本节通过点亮1只发光二极管的实例来介绍单片机的I/O口操作. 本节首先介绍单片机I/O口结构的基础知识,接着介绍实例的硬件电路,然后给出了实例程序,最后将分析操作单片机的I/O口的技巧与注意点. 2.1.1 基础知识 8051单片机有4个并行I/O口:P0-P3.这4个I/O口中只有P0口是真正的双向口,P1-P3是准双向口,P3口还具有第二功能,为系统提供一些控制信号.4个并

《51单片机应用开发从入门到精通》——2.2 跑马灯实例

2.2 跑马灯实例 51单片机应用开发从入门到精通 在上一节点亮1只LED的基础上,让我们来看看如何控制多只LED实现跑马灯效果. 2.2.1 硬件电路图 本实例中,硬件电路和上一节的硬件电路相似,为了实现跑马灯,本实例电路连接了8只LED,原理电路图如图2-2所示. 2.2.2 软件程序设计 控制多只LED实现跑马灯效果可以有多种实现方式,下面给出其中两种,请对比这两种实现方式的优劣. 1.程序全貌 首先,使用上节学习的直接寻址位置1指令SETB bit和直接寻址位清0指令CLR bit控制P

《51单片机应用开发从入门到精通》——2.7 中断的控制及设置

2.7 中断的控制及设置 51单片机应用开发从入门到精通中断系统结构如图2-6所示,从图可见,中断控制的实质是对4个特殊功能寄存器TCON.SCON.IE和IP进行管理和控制.只要按照人们的要求对这些寄存器的相应位进行设置(存入0或1,一般设置1为开通),就能完成对中断的有效管理和控制. 2.7.1 中断允许控制寄存器IE 1.IE的格式及位的含义寄存器IE的地址为A8H,作用是控制各中断源的开放与关闭.它实行两级控制,IE中有个总的控制位EA,当EA = 0时,屏蔽所有的中断请求:而当EA =

《51单片机应用开发从入门到精通》——2.12 电子琴

2.12 电子琴 51单片机应用开发从入门到精通本实例是采用44矩阵式键盘设计出16个音符,随意弹奏. 2.12.1 硬件设计 电子琴电路设计如图2-19所示. 单片机P3为输入端口,接有44矩阵式键盘,键盘上标出16个音符.键盘的4条行线的一端与单片机P3端口的P3.0.P3.1.P3.2和P3.3口相接,另一端通过上拉电阻接到 + 5V上:4条列线的一端与P3端口的P3.4.P3.5.P3.6和P3.7口相接.单片机的P2.4端口为输出端,通过限流电阻R1与三极管基极相接,三极管的集电极接有