单片机系统软件抗干扰设计

2013-08-15 00:54方向阳
科技视界 2013年5期
关键词:服务程序看门狗主程序

方向阳

(郑州市第六十三中学,河南郑州450009)

0 引言

随着单片机测控系统越来越复杂, 工作环境的干扰也越来越严重。 面对环境恶劣的工业现场,大量的干扰源虽然不会造成单片机系统硬件的破坏,却常常会侵入系统破坏数字信号的时序,更改单片机寄存器内容,导致程序在地址空间内“乱飞”,或者陷入死循环。 因此,要保证新型微控制器的可靠性、安全性,就必须在提高硬件可靠性的基础上,在程序设计中采取措施,通过软件技术增强系统的稳定运行。

由于程序设计灵活,节省硬件资源,所以软件抗干扰设计越来越引起人们的重视。下面,就以MCS-51 系列单片机为例,讨论在基于单片机的测控系统中,主要应用的软件抗干扰设计。

1 指令冗余设计

“指令冗余”就是在程序关键的地方人为插入一些单字节指令,或将有效单字节指令重写。它是使程序从“乱飞”状态恢复正常的一种有效措施,其前提条件要求PC 指针必须指向程序运行区,且必须执行到冗余指令。 正常情况下CPU 取指令过程是先取操作码,再取操作数,当指令计数器PC 受到干扰出现错误时,程序便脱离正常轨道“乱飞”,导致CPU 把一些操作数当作操作码来执行, 从而引起整个程序的混乱。

NOP 指令的插入是指令冗余设计的一种主要方式,由于MCS-51的所有指令不超过3 个字节,且多为单字节指令,所以通常是在双字节指令和三字节指令后插入两个字节以上的NOP 指令。 这样即使程序“乱飞”落到操作数上,由于空操作指令NOP 的存在,就避免了后面的指令被当作操作数执行,使程序自动纳入正轨。

此外,在对于程序流向控制起决定作用(如RET、ACALL、LJMP 等)或对系统工作状态起重要作用(如SETB 等)的指令后面,插入两条NOP 指令或重复写入该指令,也可迅速将乱飞程序纳入正轨,确保这些重要指令的正确执行。

2 软件陷阱的设计

当乱飞的程序进入非程序区,冗余指令便失去作用。 此时可通过软件陷阱的设定,拦截乱飞程序,将其迅速引向一个指定位置,再进行错误处理,使程序重新纳入正轨。

2.1 未使用的中断向量区

MCS-51 单片机的中断向量区为:0003H~002FH, 如果部分因干扰而开放的话,可以在此区设计软件陷阱,捕捉错误中断。

设计陷阱时,首先要开放相应的中断,在中断服务程序中安排软件陷阱,将程序引至复位入口地址或处理错误的程序入口地址。 当设定复位入口地址时,常采用的软件陷阱形式为:

NOP

NOP

LJMP 0000H

也可利用某中断源,如定时溢出中断T0,可在中断服务程序中设定陷阱程序如下:

ORG 000BH ;T0 溢出中断入口地址

NOP

NOP

POP ACC

POP ACC;丢弃PC 压入堆栈的错误断点

PUSH 00H

PUSH 00H;将断点地址0000H 送入栈顶

RETI

2.2 未使用的EPROM 区

作为软件陷阱的常用指令形式:LJMP 0000H, 其机器码为0000020000。 对于没有使用完的EPROM 芯片空间, 可用020000 填充,如果程序飞入该区间,即可快速导入正轨。

3 程序监视定时器的设计

程序监视定时器(Watchdog,WDT),俗称“看门狗”。 WDT 通过监视程序运行状态, 判断程序是否进入死循环或出现程序跑飞现象,进而强迫程序回到复位状态。一可通过硬件电路实现,二可设置软件“监视跟踪定时器”实现,也就是我们要讲的软件“看门狗”技术。

在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断,使对应的中断服务程序得不到执行,此时硬件看门狗电路将失效,必须采用软件“看门狗”予以配合,才能有效地解决此类问题。

设计软件“看门狗”时,采用环形中断监视系统,具体过程如下:

(1)用定时器T1 监视主程序的运行时间。估算系统主程序执行一次循环所需的时间t,给T1 设定一稍大于t 的定时时间(给主程序留有一定的裕度),在主程序中对T1 进行初始化编程。 如果主程序运行出现故障,T1 不能被及时初始化, 经过时间t 后,T1 必将产生溢出中断,转入中断服务程序,使PC 重新获得主程序入口地址。 对于经常使用定时器T1 进行串行通讯的测控系统,T1 则不能进行中断, 可在主程序中设一运行观测标志变量,改由串行口中断进行监控。

(2)用定时器T0 监视定时器T1 的运行。在T1 中断服务程中设一运行观测标志变量WatchT1,T1 中断服务程序每执行一次,WatchT1加1,在T0 中断服务程序中通过检测WatchT1 的变化情况判定T1 运行是否正常。 若检测到标志变量变化不正常,比如应当加1 而未加1,则可断定主程序运行出现故障,须在中断服务程序中修改地址使程序重新复位。

(3)主程序监视定时器T0 的运行。 在T0 中断服务程序中设一运行观测标志变量WatchT0,T0 中断服务程序每执行一次,WatchT0 加1。主程序在运行的开始储存变量WatchT0 的初值,在主程序的尾部对变量进行判断比较, 如果变量值发生了预期的变化, 说明T0 中断正常,如果没有变化则使程序重新复位运行。

采用以上这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性,从而保证系统的稳定运行。

4 结束语

从根本上来说,软件抗干扰仍是被动措施,而硬件抗干扰是主动措施。所以对基于单片机的测控系统来说,由于干扰信号众多,我们必须通过分析系统所处环境的各种干扰来源,采用硬件与软件抗干扰相结合的方法,完善系统监控程序,更好地保证单片机系统长期稳定可靠的运行。

[1]王幸之.单片机应用系统抗干扰技术[M].北京:北京航空航天大学出版社,2001.

[2]刘光斌,刘冬,姚志成.单片机系统实用抗干扰技术[M].北京:人民邮电出版社,2003.

[3]何立民.MCS-51 系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,2001.

猜你喜欢
服务程序看门狗主程序
SylixOS系统的中断嵌套机制研究与实现
基于C#的进程守护程序的设计
把他叫醒
电控冰箱软件模块化设计
一种采用FPGA实现的通用看门狗电路
水利工程施工监理服务程序及质量控制
未经授权的第三方软件侵权问题研究
——以“腾讯与360之争”为视角*