新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机软件抗干扰的误区介绍

单片机软件抗干扰的误区介绍

作者:时间:2012-10-14来源:网络收藏

中存在这样一种广泛流传的误解:在MCS-51系列中,只要用指令使程序从起始地址开始执行,就可以复位,摆脱干扰。通过一个简单的实验,揭示了复位的可靠方法。

本文引用地址:http://www.eepw.com.cn/article/170788.htm

有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系统单片机虽然没有复位指令,但片内集成了WATCHDOG电路,故也不成问题。而普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又不带硬件WATCHDOS,如果没有外接硬件WATCHDOG电路,就必须采用技术。常用的技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位就是用一系列指令来模仿复位操作,这就是MCS-51系列单片机所特有的软件复位技术。

现用一简单的实验说明,实验电路如附图所示。接于仿真插座P1.0的发光二极管LED0用来表示主程序的工作情况,接于P1。1的发光二极管LED1用于表示低级中断子程序的工作情况,接于P1。2的发光二极管LED2用来表示高级中断子程序的工作情况,接于P3。2口的按钮用来设立干扰标志,程序检测到干扰标志后故意进入死循环或掉进陷井,模仿受干扰的情况,从而检验各种复位方法的实际效果。寮验初始化程序如下:

ORG 0000H

STAT: LJMP MAIN 复位入口地址

LJMP PX0 按钮中断向量(低级中断)

ORG 000BH

LJMP PT0 t0中断向量(低级中断)

ORG 001BH

LJMP PT1 T1中断向量(高级中断)

ORG 0030H

MAIN:

CLR EA

MOV SP,#7

MOV P1,#0FFH

MOV P3,#0FFH

MOV TMOD,#11H

CLR 00H 干扰标志初始化

SETB ET0

SETB ET1

SETB EX0

SETB PT1

SETB TR0

SETB TR1

SETB EA

LOOP: CPL P1.0 主程序发光二极管LED闪烁

MOV R6,#80H

MOV R7,#0

TT1:

DJNZ R7,TT1

DJNZ R6,TT1

SJMP LOOP

PX0:

SETB 00H 设立干扰标志,模拟发生干扰

PT0: CPL P1.1 低级中断程序发光二极管LED1闪烁

RETI

PT1: CPL P1.2 高级中断程序发光二极管LED2闪烁

RETI

END

实验步骤如下:

1. 按上述程序启动执行,三个发光二极管都应闪烁(否则应先排除故障),表示主程序和各中断子程序正常。因模拟干扰标志未加检测,故不受按钮影响。

2. 修改主程序如下,按下按钮后主程序即掉入死循环中。

LOOP: CPL P1.0

MOV R6,#80H

MOV R7,#0H

TT1: DJNZ R7,TT1

DJNZ R6,TT1

JNB 00H,LOOP 受干扰否?

STOP: LJMP STOP 掉入死循环。

这时可以看到,主程序停止工作(LED0停止闪烁),而两个中断子程序继续运行(LED1和LED2继续闪烁)。

3. 将定时器T1妆作软件WATCHDOG,将30H单元用作软件WATCHDOG计数器。主程序中加入一条复位软件WATCHDOG的指令。

LOOP: CPL P1.0

MOV 30H,#0 复位软件WATCHDOG计数器

LOOP: CPL P1.0

MOV R6,#80H

MOV R7,#0H

TT1: DJNZ R7,TT1

DJNZ R6,TT1

JNB 00H,LOOP 受干扰否?

STOP: LJMP STOP 掉入死循环。

T1中断子程序修改如下:

PT1: CPL P1.2 高级中断程序发光二极管闪烁

INC 30H

MOV A,30H

ADD A,#0FDH

JC ERR 达到3次否?

RETI

ERR: LJMP STAT 软件WATCHDOG动作


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭