实现软件陷阱技术,如果可以如何具体实施。
答:
1.位数的确定:应该从数据采集系统的静态精度和动态平滑性两方面来考虑。从静态精度方面来说,要考虑输入信号的量化误差传递到输出所产生的误差,它是模拟信号数字化时产生误差的主要部分。量化误差与A/D转换器的位数有关,位数越大,量化误差越小,另一方面,由于模拟信号是先经过测量装置的测量,在经A/D转换器转换后输入计算机中的,因此总的误差有测量误差和量化误差共同构成。总之,A/D转换器的精度应与测量装置的精度相匹配。也就是说,一方面要求量化误差在总误差中所占的比重要小,使它不显著的扩大测量误差;另一方面,必须根据目前测量装置的精度水平,对A/D转换器的位数提出恰当的要求。目前,大多数测量装置的精度值不小于0.1%~0.5%,故A/D转换器的精度取0.05%~0.1%即可,相应的二进制码为10~11位,加上符号位,即为11~12位。
有些特殊的应用或量程范围很大时,A/D转换器要求更多的位数,只是往往采用双精度的转换方案。
从动态平滑性的要求来考虑,可用一段模拟量化过程的程序,在计算机上逐步改变位数,计算数学模型的动态曲线,然后根据曲线的平滑程度来确定位数。通常,满足静态精度要求的位数也能满足动态平滑的要求。但对动态平滑性要求较高的系统,还需要硬件(模拟滤波)或软件(数字滤波)进行平滑处理。一般8位以下的A/D转换器称为低分辨率A/D转换器,9~12位的称为中分辨率,13位以上的称为高分辨率。
转换速度的确定:转换时间的倒数就是转换速率。即每秒钟能完成的转换次数。确定A/D转换器的转换速率时,应考虑系统的采样速率。例如:如果用转换时间为100us的A/D转换器,则其转换速率为10 000次/S。根据采样定理和实际需要,一个周期的波形需10个采样点,那么这样的A/D转换器最高也只能处理频率威1KHz的模拟信号。把转换时间减少到10us,信号频率可提高到10KHz。对一般计算机而言,要在10us内完成A/D转换以外的工作,如读数据、再启动、存数据、循环计数等已经比较困难了,要继续提高采集数据的速率,就不能用CPU来控制,必须采用DMA技术来实现。
2. 对计算机控制系统抗干扰技术的认识:由于工业现场的工作环境往往十分恶劣,计算机控制系统不可避免地受到各种各样的干扰。这些干扰可能会影响到测控系统的精度,使系统的性能指标下降,降低系统的可靠性,甚至导致系统运行混乱或故障,进而造成生产事故。干扰可能来自外部,也可能来自内部;它可通过不同的途径作用于控制系统,且其作用程度及引起的后果与干扰的性质及干扰的强度等因素有关。干扰是客观存在的,研究抗干扰技术就是要分清干扰的来源,探索抑制或消除干扰的措施,以提高计算机控制系统的可靠性和稳定性。
C51进行编程的情况下能够实现软件陷阱技术,具体实施:
软件陷阱技术实现形式之一:
单片机应用系统的用户应用程序一般由循环结构的主程序和中断服务子程序组成,将下面的软件陷阱程序段插入到用户应用程序中,即在用户应用程序存储器不用区域写入代码“0000020000H”。 NOPNOPLJMP 0000H
当单片机应用系统工作正常时,单片机的CPU不会执行软件陷阱程序段;但是,当单片机应用系统受到干扰而程序跑飞后,由于程序计数器PC值错误,破坏了正常的指令格式,导致执行非正常指令,从而执行软件陷阱程序段,落入软件陷阱,将跑飞的程序引导到复位入口地址0000H。软件陷阱程序段中的连续2条NOP指令是为了增强“LJMP0000H”被捕获的能力,即“LJMP0000H”不会被冲散,当程序跑飞后会得到完整地执行,从而使跑飞的程序纳入正常轨道。 软件陷阱技术实现形式之二:
虽然上述的软件陷阱技术能实现可靠回复功能,但是有两个方面的严重隐患。第一,隐患主要是在对中断的处理上;首先,程序跑飞很可能是发生在中断服务子程序中,其次,一些未使用的中断很可能因为程序跑飞而被错误地激活,而这时只是简单地让跑飞的程序从头开始运行,就不能关闭已激活的中断,这样,单片机的中断系统会认为程序仍在处理中断,就不会再响应同级中断。第二,大部分单片机应用系统在上电复位初始化后,不希望在程序跑飞而用软件陷阱回复后又重新初始化。
为了解决第一个隐患,当程序跑飞时,一定要想办法关闭可能发生的中断,然后再执行用户应用程序。大家知道,当CPU进入中断后,就只能用RETI指令关闭中断。解决第一个隐患的具体方法是,改变软件陷阱程序段:当程序跑飞后,将跑飞的程序引到0202H处,然后在0202H处完成关闭中断的工作,即在用户应用程序存储器不用区域写入代码“0000020202H”。需要注意的是,程序存储器不用区域的最后两个存储单元,一定要分别写入代码“00H”。 NOP NOP
LJMP 0202H 前面的连续2条NOP指令是为了 增强“LJMP0202H”被捕获的能力
而在0202H开始的程序存储器单元进行如下的编程: ORG 0202H
MOV DPTR,#ERR1 PUSH DPL PUSH DPH RETI
关闭第1级中断,并跳转到ERR1处 ERR1: CLR A PUSH ACC PUSH ACC
RETI 关闭第2级中断,软件回复到0000H处
这样,就保证了无论在什么情况下,都可以关闭2级中断。当然,如果没有中断被激活时运行了这段程序,也不会有什么不良影响。
为了解决第二个隐患,可以在系统主程序入口处加一个软件开关来判别是上
电复位直接进入0000H的,还是经过软件陷阱回复而进入0000H的,根据不同的判别结果执行不同的程序。
单片机应用系统上电时,上电复位电路会使单片机处于复位状态。这一般称为冷启动。但是,软件陷阱技术使跑飞的程序回复到主程序入口地址0000H时,不影响特殊功能寄存器SFR的有效位。解决第二个隐患的具体方法是,设置上电复位标志。例如,以PSW.5作为上电标志位,当PSW.5=0时,表示是上电复位;当PSW.5=1时,表示是软件陷阱回复。图2是上电复位与程序跑飞后软件陷阱回复初始化处理框图。0000H是MCU的复位入口,程序启动后,首先判断是上电复位,还是程序跑飞后软件陷阱回复。上电复位是开机操作,要建立上电标志,并进行系统的完全初始化。程序跑飞后软件陷阱回复应该进行相关资源的检查与修复,以防止系统运行出错。另外,根据系统特点,需要保留一些过程数据,不得进行完全初始化。
为了解决上述两个隐患,有如下具体编程。其中,START0为系统上电复位完全初始化子程序入口,ER2ROR为程序跑飞后软件陷阱回复应进行的系统部分初始化和相关资源的检查与修复程序入口,LOOP是用户应用程序功能模块入口。
ORG0000H LJMP START ORG0100H
START: MOV C,PSW.5 JC ERROR SETB C
MOV PSW.5,C LCALL START0 LJMP LOOP ERROR: „„
LOOP: „„ ;应用程序功能模块 „„
LJMP LOOP
ORG 0200H NOP NOP
MOV DPTR,#ERR1 PUSH DPL PUSH DPH
RETI ;关闭第1级中断,并跳转到ERR1处ERR1: CLR A
PUSH ACC PUSH ACC
RETI ;关闭第2级中断,软件回复到0000H处
软件陷阱在用户应用程序中的安排位置:(1)在主程序的应用功能模块之间 (2)闲置未使用的EPROM/FlashROM
空间
(3)在中断服务子程序中
(4)在未使用的程序存储器地址空间 (5)对外部RAM写操作实施监控保护而设置软件陷阱
因篇幅问题不能全部显示,请点此查看更多更全内容