董明刚
2003年2月
电力线载波通信以电力线为信道进行数据传送,既经济,又方便。目前,在
我国要得到这种经济和方便,却不是一件容易的事。电力线载波抄表已经做了很
多年了,但是在实际应用中总会有一些问题出现,所以还是不能在电力部门进行
普遍推广应用。
我们对载波抄表出现问题的原因基本上都是清楚的,电源污染比较严重,电
网中存在着多次谐波,还有尖峰脉冲等。以我国目前的经济状况,不可能将那些
对电网的电源质量产生影响的用电设备全都报废,所以电源污染是现实,不可能
回避。在现实面前,我们的许多科技工作者没有低头,研究出了很多载波通信算
法,并且取得了很好的成绩。当这些科技工作者辛苦地研究通信算法技术并取得
成绩的时候,也许他们忽略了对另一种技术的研究——软件抗扰技术。
电力线载波通信设备工作不正常,总体上来说是出于两种原因:1.冲击,设
备硬件受到冲击可能暂时失效,甚至损坏,设备电源受到冲击可能会产生大幅度
的电压或电流的变化;2.干扰,信号受到干扰造成通信失败,程序受到干扰则不
能收发信号。可以知道,干扰的对象有两个,一个是信号,另一个是程序。当信
号受到干扰时,表现为信道质量降低。比如同频干扰,使序列信号变得杂乱无章。
但是同频干扰对程序产生的影响则不是很大,一般情况下都不会使程序跑飞。当
程序受到干扰时,表现为设备不工作或工作不正常。比如尖峰脉冲,很容易使程
序跑飞,程序不能正常运行,也就没有收发数据的能力。但是尖峰脉对信号影响
并不大,它对序列信号的修改很少,所以我们可以通过纠错算法很容易的将数据
修复。
对信号的干扰,我们已经有很多好的办法,基本能保证信道的质量,就不讨
论这个问题了。对程序的干扰,我们首先想到的通过硬件来解决,加强电源的稳
定性,加硬件看门狗等许多办法。虽然我们在硬件上做了很多工作,但是程序运
行不稳定甚至死机的问题仍然困扰着我们。为什么会这样呢?因为我们不可能通
过硬件将抵制住所有的干扰。当干扰穿过硬件防护区进入CPU时,程序就被打乱
了,运行出现了错误。对于这个问题,我们束手无策了吗?我们是有办法的,让
程序自己来解决这个问题。我们在编写程序的时候多做两项工作。第一、当程序
运行出错时,我们要捕捉到错误。第二、当我们捕捉到错误时,分析错误原因,
然后做出相应的处理。我们在软件中做了这两项工作,随之带来很多的好处:第
一、程序运行稳定,不再有死机问题;第二、硬件看门狗可以不用了;第三、硬
件抗扰措施可以简化。做好软件抗扰,既保证了系统的稳定性,又降低了系统成
本。所以说,软件抗扰技术是一项很重要的技术。在电力线载波通信方面,软件
抗扰技术应该是重要的一项技术。
如果您需要单片机软件开发,请与我联系。
电话: 010-62906811
手机: 13651306375
E-Mail: dongminggang@163.com
--------------------------------------------------------------------------
程序设计与抗干扰
董明刚
2003年2月
目前,单片机的应用是很普遍的,但是单片机(可以扩展到所有的处理器)
的软件设计技术是非常欠缺的。从理论上来说明这些欠缺比较复杂,从示例来分
析这些欠缺则比较容易。下面兴举出一些示例进行分析。
例一:
ORL A,#0B2H ;44 B2
SUBB A,#80H ;94 80
MOV R4,A ;FC
RET ;22
这是一段MCS-51程序,作用是:将累加器A与0B2H做或运算,再减去80H,然
后放到通用寄存器R4中返回。但是它的作用不只是这一点,它还有一种潜在的作
用。让我们看一下由它生成的十六进制代码:44 B2 94 80 FC 22 。单片机正常
执行这段程序时,从44代码开始执行,运行结果与源程序的目的是相同的。当单
片机受到干扰后,指令执行指针PC指向这段代码的B2代码时,我们看一下是什么
情况。从B2开始进行反汇编,就可知道干扰后的运行情况。
LOP: CPL P1.4 ;B2 94
SJMP LOP ;80 FC
RET ;22
干扰后形成了一个死循环。如果P1.4是看门狗的输入,那么就死机了。
例二:
PROCX:
MOVLW 0
CALL SUB1
ADDWF 20H,1
RETURN
SUB1:
ADDLW 1
CALL SUB2
ADDWF 21H,1
RETURN
SUB2:
ADDLW 2
CALL SUB3
ADDWF 22H,1
RETURN
SUB3:
ADDLW 3
CALL SUB4
ADDWF 23H,1
RETURN
SUB4:
ADDLW 4
CALL SUB5
ADDWF 24H,1
RETURN
SUB5:
ADDLW 5
.
.
.
ADDWF 25H,1
RETURN
这是一段PIC16CXX的程序,这段程序有五级程序调用。从这五级程序调用来
分析一下受到干扰后可能发生的情况。当单片机运行SUB5这段程序时,来自外部
的干扰使指令执行指针指向 ADDLW 1 这条指令。PIC16CXX单片机是八级硬件堆
栈,这时就会产生堆栈区的地址数据覆盖,堆栈中存储的地址都是SUB2到SUB5调
用返回的地址。这样,由于堆栈的数据覆盖,使程序在SUB1至SUB5代码区域中反
复运行。如果在SUB5中有清看门狗的指令,那么就产生死机现象。
从以上两个示例来看,指令执行指针的非正常跳转就有可能产生不正常的运
行。指令指针的不正常跳转是由于干扰产生的,那么我们想办法消除干扰不就可
以了吗?按照正常解决问题的思路,我们都会这样去考虑。而事实上,我们是无
法将干扰消除干净的。什么样的干扰?什么时候发生?从哪里来?这些我们无法
全部预测。既然我们无法将干扰完全消除,那么就从另一个方面去考虑问题。我
们不去考虑如何消除干扰,而是去考虑如何消除干扰后的影响。这样就把问题转
化了,我们面对的不再是各种各样的干扰,而是程序在干扰后如何恢复正常运行
的问题,也就是程序的逻辑严谨性问题。
从两个示例可以知道,干扰可能使指令指针产生跳转而出现死机情况。干扰
对单片机的影响还不止于此,它有可能将单片机的所有 RAM(包括特殊寄存器和
硬件堆栈)都改变。有的干扰能将系统的硬件(如单片机的ROM或I/O)毁坏,这
样的干扰是极少出现的,我们对它是无能为力的,也就不去考虑这样的干扰了。
我们要解决的干扰问题,是在硬件没在损坏的情况下,干扰消失后程序不能恢复
正常运行问题。这样,问题就清晰地摆出来了:程序代码不需要特殊的初始条件
就能够进入正常运行状态。对此,我们很自然的会提出一个问题——这样的程序
能编写出来吗?只是一种设想吧?目前可以得到的答案是:可以编写出这样的程
序,编写这样的程序需要采用两种逻辑设计方法:1.代码逻辑设计方法;2.思维
逻辑设计方法。这两种方法一般都是同时采用的,我把它合起来,称作规模化逻
辑设计方法。关于规模化逻辑设计方法,这是我研究出的一种软件设计技术,现
在还没有公开。这里,我采用规模化逻辑设计方法对例一的程序进行重新编写,
以便我们对规模化逻辑设计有一个初步认识。
SETB SUBX_F ;置运行标志
ORL A,#0B2H
NOP ;代码冗余,防止修改RAM
SUBB A,#80H
NOP ;代码冗余,防止程序跑飞
MOV R4,A
JNB SUB_F,RESTART ;如果运行出错,转到错误处理入口
CLR SUBX_F ;清运行标志
RET
如果您需要单片机软件开发,请与我联系。
电话: 010-62906811
手机: 13651306375
E-Mail: dongminggang@163.com
--------------------------------------------------------------------------
单片机的软硬件同步设计
董明刚
2003年2月
我们用单片机做设计时,需要有一个好的设计方法。一般来说,我们都是把
软、硬件工作分开,同步进行,以便加快速度,提高效率。这就要解决一个问题:
软、硬件工作怎样分配?就这个问题我做一下论述。
做单片机设计之前,先要了解设计的前提条件。不管是单一的产品,还是大
的控制系统,我们在设计前先搞清楚要设计的产品(或系统)的工作环境和性能
要求。工作环境可分为三大类:1.危险环境;2.普通环境;3.安全环境。性能要
求可分为两大类:1.抗冲击性能;2.抗干扰性能。抗冲击性能主要与硬件相关,
与软件关系很小,在这里不做分析。抗干扰性能与软、硬件都相关,而且相关的
程度相差不多,这是我们要分析的问题。工作环境是设计的首要前提。我们在确
定工作环境的前提下,来分析软、硬件综合设计。
一、危险工作环境下的工作分工
危险环境是指很可能产生冲击而使硬件损坏,容易出现干扰而便使程序运行
紊乱的工作环境。这种环境下,硬件设计一定要达到两点要求:1.一定要有很强
的抗冲击能力;2.一定要能够抑制持续性的干扰。软件设计一定要做到干扰后快
速恢复的能力,对于可预测到的干扰能够有效的防范。在这种工作环境下,软、
硬件的工作分工基本是确定,基本没有软、硬件工作重新分配的可能性。需要解
释的一个问题是——为什么抵抗持续性的干扰一定要通过硬件来实现?因为软件
是不能消除干扰或抑制干扰的,只能做到干扰后的恢复,程序在持续干扰期间是
不可能正常运行的。再说一下可预测到的干扰。通过程序控制启动电机或启动某
一设备,就有可能出现干扰,这种干扰是可预测的,在编程时要考虑减少这种干
扰对程序正常运行的影响。
二、普通工作环境下的工作分工
普通环境是指不太可能产生冲击,容易出现干扰的工作环境。这时,我们要
考虑对干扰如何处理的问题,这就涉及到软、硬件工作如何分配的问题。我们可
以根据不同情况来分配软、硬件工作。一、当软件工作量很大,而且成本要求比
较宽松时,我们就通过硬件来解决抗扰问题,如增强电源稳定性,利用屏蔽,使
用硬件狗等。二、当成本要求比较苛刻时,我们只好通过软件来解决抗扰问题。
如果软件的可靠性非常好,那么在硬件上就可以省掉硬件狗以及电源的抗扰电路
等。三、当对产品(或系统)的运行稳定性要求很高时,那么我们就要在软、硬
件上同时增加抗扰措施。这时我们要以软件抗扰为主,硬件抗扰为辅。为什么要
以软件为主呢?因为对于程序的紊乱运行,软件纠错非常快,而硬件纠错就显得
特别慢。对运行稳定性要求很高时,对软件设计的要求就非常苛刻,在程序中不
能出现逻辑冒险现象。对于硬件来说,要做的有两点,一是抑制持续性干扰,二
是减弱干扰。
三、安全工作环境下的工作分工
安全环境是指没有冲击,很少出现干扰的工作环境。这时对软、硬件设计的
要求都不高,如果成本要求比较宽松,那么就按工作量来分配软、硬件的工作,
如果成本要求较严格,那么就在软件上多做些工作。
以上对软、硬件的工作分配做了叙述。我们继续谈一下在程序设计时的编程
语言的选用。如果是危险工作环境下的设计或普通工作环境下有稳定性要求的设
计,我们要全部用汇编语言来编程,因为用汇编语言对程序的控制更具体、更全
面。其它情况下我们可以选用C语言来编程,这样可以提高开发速度。这里提到
编程语言选用,是与产品(或系统)的再开发有关系的。一个有稳定性要求的产
品(或系统),如果是用C语言做的程序,那么在第二次开发时,C语言程序几乎
没有什么可利用的价值,而用汇编语言编写的程序则有很大再利用价值。
如果您需要单片机软件开发,请与我联系。
电话: 010-62906811
手机: 13651306375
E-Mail: dongminggang@163.com