(佛山食神网络智能科技有限公司)
摘要:单片机系统由于其编程的简易性,在现在计算机系统中应用越来越广泛。但是其由于工作环境非常恶劣,在实际应用中收到的干扰非常严重。本文针对目前单片机系统中出现的“跑飞”现象进行分析,对指令冗余法的应用进行了举例说明,希冀可以为以后在这一方面的研究工作提供一份可供参考的资料。
关键词:单片机系统;跑飞;编程;抗干扰
1引言
单片机应用系统作为一种嵌入式系统的典型应用方法,在工作环境上比其它类型的计算机系统更加恶劣,但在它的性能要求上又必须使它具有很强的实时响应性能,在外界环境发生改变时能够及时的做出响应,因此这就对单片机的应用系统提出了很高的性能要求以及工作的可靠性,对外界环境有一定的抗干扰能力。抗干扰能力在单片机应用系统的发展历程中一直以来都是系统研究人员最关心的问题之一。在应用单片机系统开发某些应用软件时,系统的抗干扰能力就直接决定了系统开发的成功与否,因此可以看出抗干扰能力在单片机应用系统中的重要作用。目前,单片机应用系统的抗干扰技术分别从硬件和软件两个方面入手,分为硬件抗干扰技术和软件抗干扰技术。
硬件抗干扰技术顾名思义就是从单片机的硬件下手,选择合理的器件来提高抗干扰能力。在器件的选择上要根据其所发挥的作用来定,有针对性的去替换某些器件,比如说输入/输出光电隔离、对IC器件配置合理的去藕电容、根据可靠性的原则对PCB板进行一个针对性的设计,抵制外界的干扰信息对系统进行侵害,可以说硬件抗干扰技术是一种主动防御的方式,切断干扰源或者是信号的干扰途径。
软件抗干扰技术相比于硬件抗干扰技术来说就属于一种被动式抗干扰方式,软件抗干扰技术主要是通过在单片机系统中开发一些抗干扰的应用系统来处理单片机系统中接受的这些干扰源,也就是说当外界环境对系统产生干扰之后,如果系统因此而出现偏离原定运行状态的情况下,抗干扰软件就会将系统引入到正常运行的状态,保证系统运行的稳定性。这就相当于处理干扰信号。
以上两种方式都可以使单片机系统不受干扰信号的影响,根据大数据统计表明在以往的单片机系统受干扰故障中,有五分之四的干扰故障来自于系统收到干扰信号之后脱离正常的工作状态,使之不能正常的运行下去,此外,我们应用的单片机系统,有控制强电设备部分,这时抗干扰就要着重考虑,不然可能造成较严重的影响。所以,除在硬件方面采取措施外,软件上也应认真考虑。所以说本文主要针对如何通过软件抗干扰的方法使单片机系统能够不受外界干扰因素的侵扰,保持正常的运行状态。
通过汇总以往的工作数据表明单片机系统在受到干扰因素影响后主要产生两种不正常工作的方式,一种是程序进入“死循环”的状态,并一直运行下去;另一种是程序出现“跑飞”的现象,使得运行结果混乱。在实际故障中“跑飞”现象更为严重,因此本文着重对“跑飞”现象的对策进行探讨。
2系统“跑飞”的软件处理技术
“跑飞”是指单片机系统在受到外界干扰后,系统程序从一个运行轨道突然跳转到另一个程序的运行轨道上去,从而造成整个系统运行的结果出现异常。系统一旦发生“跑飞”之后其结果就会很难去预测。有些情况下,系统在发生程序的跳转之后在经过一段时间的运行,系统又会自己跳转到原来的程序上去,这相当于系统的实现了了“自修复”功能,但大多数情况下,系统在发生“跑飞”后就需要人为的采取一些干扰的措施来使系统恢复到原来正常工作的状态,这种方法就是通过编程的手段实现。
指令冗余法就是当前来说一种针对“跑飞”现象而开发的一种很好的软件抗干扰技术。我们通过以往的工作知道在程序发生异常的跳转时,如果系统中的重要数据不会发生破坏,系统就有可能会通过“自修复”功能恢复到原来的程序上去,保证正常的运行下去。因此,我们可以针对系统的这一特性,在程序段中添加一些适当的冗余命令,比如说在某些双字节、三字节指令前面插入两条NOP指令,或在程序中的重要指令前(如控制转移指令)前插入两条NOP指令,保证程序运行到此处时保持完整,不会出现因拆散而造成混乱。
在单片机的指令系统,“NOP”是最短的指令,它不但只有一个字节,而且是空操作,不会造成不良影响。我们正是利用了这一点。
假设程序因干扰被“跑飞”(不可预料的转移)到程序的某地址,这样执行的程序有可能会出现新的操作,因为很有可能跳人的地址不是原程序中一条指令的开始地址。但是如经过的程序段中有两条“NOP”指令,计算机会自动恢复设计的操作。
下面一个例子说明,有如下一段程序:
;SWAPA
MOVDPTR,#21H;
MOVA,@DPTR
对应的机器码:
ROM地址机器码ROM地址机器码
;;0243E0
0240900244C4
024100;;
024221
现设系统因干扰,程序由执行处跳到“0241”处,则以下的执行程序变为:
;LJMP0E0C4H
NOP;
显然,机器操作出现了错误。如将源程序修改为:
;MOVXA,@DPTR
MOVDPTR,#90HSWAPA
NOP;
NOP
对应的机器码为:
ROM地址机器码ROM地址机器码
;;024400
0240900245E0
0241000246C4
024221;;
024300;;
仍设程序跳到“0241”,则计算机作如操作:
;MOVXA,@DPTR
NOPSWAPA
LJMP0
相当于程序重新开始,不致引起恶性后果。
当然,实际情况会很复杂。在程序中即使加“NOP”语句,也会出现各种料想不到的操作,但是这种方法会减少出现更坏后果的可能。基于以上考虑,作如下几点具体做法:
①填充中断矢量表:中断入口处,投有直接写一条跳转指令或进入处理,而是先写了两条“NOP”指令,然后再跳转,剩下的几个字节用“NOP”填满。未用到的中断也如此处理,只是跳转的方面不同-AJMP0
②程序中加“NOP”:在执行程序中,隔一段或认为重要的地方,加几条“NOP”。最初调试时,我们的应用系统常固起合一些开关而出现了未设计的操作。采取措施后,这种情况大大减少。
③EPROM剩余字节的处理:首先把未用到的EPROM片的地址线接地。这就减少了程序跳转的范围。如在我们应用系统中,EPROM片用2716(2K),但程序不足1K,就把2716的A10脚接地。
其次是在EPROM空间的最后一些未用字节中写几条绝对跳转指令。一旦程序跳到这些地址,就强迫它重新开始。当然其中间或也加了几条“NOP’’。
在我们的调试中,采用上述方法后,系统变乱的次数减少了很多,说明这些办法是有效的。当然,以上办法使执行程序变得长了,由于我们对控制的反应时间要求不高,这些作法是可以接受的。
3结束语
综上所述,我们可以知道指令冗余法可以对程序“跑飞”现象有一个很好的解决办法,其实程序发生“跑飞”是由很多原因造成的,其可能会造成的结果也很难预料,上文中提到的这一种方法并不能解决所有“跑飞”现象,它只是在一定程度上增强了系统的“自修复”能力,间接地来实现了单片机系统的抗干扰能力。除此之外还有像软件陷阱技术也对程序“跑飞”现象起到一定的解决作用。因此,在使用软件抗干扰技术对单片机系统的抗干扰能力增强时要根据系统实际的工作环境,有针对性的选用各种解决方法,使之能够发挥最大的作用。
参考文献:
[1]翟晓华.单片机软件抗干扰技术分析与设计[J].山西科技,2008(6):70-72.
[2]张士钱.单片机系统软件抗干扰措施的分析[J].龙岩学院学报,2005,23(6):30-31.
[3]赵敏.单片机软件抗干扰技术分析[J].质量技术监督研究,2008(12):23-25.
[4]潘峥嵘,秦耀刚.软件抗干扰技术及其在单片机上的应用[J].甘肃科技,2008(13):33.
[5]张名,张焕春.分布式测控系统模型的研究[J].计算机测量与控制.2002,10(2):107-108.
[6]李汉军,施文康.海底敷缆船测控系统的综合抗干扰措施[J].计算机测量与控制,2002,10(1):26-28.