51单片机软件抗干扰的技术误区

发布者:TranquilOasis最新更新时间:2014-01-17 来源: dqjsw关键字:51单片机  软件抗干扰  技术误区 手机看文章 扫描二维码
随时随地手机看文章

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

  有的单片机(如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 掉入死循环。[page]

  T1中断子程序修改如下:

PT1: CPL P1.2 高级中断程序发光二极管闪烁
INC 30H
MOV A,30H
ADD A,#0FDH
JC ERR 达到3次否?
RETI
ERR: LJMP STAT 软件WATCHDOG动作
当按下按钮前,程序正常运行(三个LED全闪)。按下按钮后,主程序能迅速恢复工作,但两个中断子程序被封锁,不再工作。过程如下:主程序检测到干扰后进入死循环,不能执行复位30H单元的操作,T1中断使30H不断增值,计数到3时,软件WATCHDOG执行动作,执行一条LJMP指令,使程序从头执行。MAIN过程中清除了干扰标志(表示干扰已经过去),使主程序迅速恢复工作。按理说MAIN过程中也重新设定了各个中断,并开放了它们,为什么中断不能恢复工作呢?这是因为中断激活标志的复位工作被遗忘了,因为它没有明确的位地址可供编程,直接转向0000H地址并不能完成真正的复位。软件复位是使用软件陷井和软件WATCHDOG后必须进行的工作,这时程序出错完全有可能发生中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件WATCHDOG是高级中断,它将阻止所有中断响应。由此可见,清除中断激活标志的得要性,很多文献的作者回为没有认识到这一点进入误区。

4. 在所有指令中,只有RETI指令能清除中断激活标志。出错处理程序ERR主要是完成这一功能,其它的善后工作交由复位后的系统去完成。为此,我们重新设计T1中断子程序如下所示:

PT1: CPL P1.2 高级中断程序发光二极管闪烁
INC 30H 软件WATCHDOG计数器增值
MOV A,30H
ADD A,#0FD
JC ERR 达到3次否?
RETI
ERR: CLR EA 关中断
CLR A 准备复位地址(0000H)
PUSH ACC
PUSH ACC
RETI 清除中断激活标志并复位

  这段程序先关中断,以便后续处理能顺利进行,然后用RETI指令替代LJMP指令,从而既清除了中断激活标志又完成了转向0000H的任务。按这样改好后程序再运行,结果仍不理想:按下按钮后,有时只有主程序和高级中断子程序能迅速恢复正常,而低级中断仍有被关闭的可能。如果按如下方法把干扰转移到低级中断中,则按下按钮后低级中断必然被关闭:

LOOP: CPL P1.0
MOV R6,#80H
MOV R7,#0H
TT1: DJNZ R7,TT1
DJNZ R6,TT1
SJMP LOOP
PT0: CPL P1.1
JB 00H,STOP
RETI
STOP: LJMP STOP 掉入死循环。

  仔细分析后可能得出结论:当软件WATCHDOG是嵌套在低级中断中起作用时,复位后只清除了高级中断激活标志,低级中断标志仍然被置位,从而使低级中断一直被关闭。

  5. 修改出错处理如下:

ERR: CLR EA 正确的软件复位入口
MOV 66H,#0AAH 重建上电标志
MOV 67H,#55H
MOV DPTR,#ERR1 准备第一次返回地址
PUSH DPL
PUSH DPH
RETI 清除高级中断激活标志
ERR1: CLR A
PUSH ACC
PUSH ACC
RETI 清除低级中断激活标志
这时,必须执行两次RETI,才能到达0000H,以保证清除全部中断激活标志,达到和硬件复位相同的效果。同样,软件陷井也必须由下列三条指令才能达到目的。
NOP
NOP
LJMP STAT
改成:
NOP
NOP
LJMP ERR
  
结论:当主程序受到干扰被软件陷阱捕获时,中断标志并未置位,执行ERR过程中,RETI指令等效于RET指令,同样可以达到软件复位的目的。实验结果证明:只有LJMP ERR才能万无一失地实现软件复位,使系统摆脱干扰同,恢复正常。在MCS-51单片机的软件复位过程中,必须连续执行两次中断返回指令RETI才能确保系统恢复正常。

关键字:51单片机  软件抗干扰  技术误区 引用地址:51单片机软件抗干扰的技术误区

上一篇:基于CAN的电源控制系统设计
下一篇:51单片机的中断响应及撤销

推荐阅读最新更新时间:2024-03-16 13:34

8-基于51单片机的二氧化碳检测及调节系统仿真
具体实现功能 由STC89C52单片机+二氧化碳传感器+LCD1602液晶显示屏+按键+蜂鸣器+指示灯+继电器+风扇+电源构成。 具体功能: ①二氧化碳传感器测得二氧化碳数据后经过单片机处理,由LCD1602实时显示,第一行显示测得的浓度值,第二行显示报警阈值; ②可通过按键设置二氧化碳报警阈值; ③测得的甲醛浓度在正常范围时,绿灯亮,超过报警阈值时,红灯亮,蜂鸣器响,开始声光报警; ④测得的甲醛浓度超过报警阈值时,继电器吸合,风扇转动,开始排风,降低二氧化碳浓度。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU
[单片机]
8-基于<font color='red'>51单片机</font>的二氧化碳检测及调节系统仿真
51单片机入门 - 矩阵键盘行扫描实验
矩阵式键盘识别方法(行扫描法) 检测列线的状态: 列线Y4~Y7置高电平,行线Y0~Y3置低电平。只要有一列的电平为低,则表示键盘该列有一个或多个按键被按下。若所有列线全为高电平,则键盘中无按键按下。 判断闭合按键所在的位置: 行线置高电平,列线置低电平。检测行线的状态。 举例:当按下第一行第一列的按键时 行扫描,行线为低电平,列线为高电平,得到 1110 0000 列扫描,行线为高电平,列线为低电平,得到 0000 1110 将得到的结果进行或运算,得到 1110 1110,对应第一行第一列,十六进制为0xEE 按键表 行 列 bin hex 1 1 1110 1110 0xEE
[单片机]
<font color='red'>51单片机</font>入门 - 矩阵键盘行扫描实验
关于51单片机晶振的问题总结
晶振是什么?全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。 在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解。 一,为什么51单片机爱用11.0592MHz晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶
[单片机]
基于51单片机SPI器件的串口控制
0 引 言 串行外设接口(Serial Peripheral Interface,SPI)是一种高速同步串行输入/输出端口,近年来广泛应用于移位寄存器、D/A转换器、A/D转换器、串行E2PROM、LED显示驱动器等外部设备的扩展。SPI接口可以共享,便于组成带多个SPI接口器件的系统。其传送速率可编程,连接线少,具有良好的扩展性。 1 SPI接口介绍 SPI是摩托罗拉公司推出的一种同步串行通信接口,用于微处理器、微控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准。目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,E2PROM,FLASH ROM,A/D转换器、D/A转换器、LE
[单片机]
基于<font color='red'>51单片机</font>SPI器件的串口控制
基于AT89S51单片机的定时报警器电路图
设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1-59 秒)进行倒计时,当计时到0 时数码管闪烁“00”(以1Hz 闪烁),按键功能如下:   (1)设定键:在倒计时模式时,按下此键后停止倒计时,进入设置状态;如果已经处于设置状态则此键无效。 (2)增一键:在设置状态时,每按一次递增键,初始值的数字增1。 (3)递一键:在设置状态时,每按一次递减键,初始值的数字减1。 (4)确认键:在设置状态时,按下此键后,单片机按照新的初始值进行倒计时及显示倒计时的数字。如果已经处于计时状态则此键无效。 图 定时报警器电路原理图
[模拟电子]
基于AT89S<font color='red'>51单片机</font>的定时报警器电路图
51单片机与MXA2500GL的振动信号分布式检测
C8051F020单片机性能特点 CYGNAL的C8051F020是集成模拟、数字信号的混合信号系统级SOC(System On Chip)单片机,与目前常用的51系列单片机指令集完全兼容。采用100脚TQFP封装,体积小,运算速度快。它采用CYGNAL公司的专利CIP- 5l微处理器内核。CIP-5l在提升805l速度上采取了新的途径,即设法在保持CISC结构及指令系统不变的情况下,对指令运行实行流水作业。在这种模式中,废除了机器周期的概念,指令以时钟周期为运行单位。平均每个时钟可以执行完l条单周期指令,从而大大提高了指令运行速度。 与805l相比,C8051F020在相同时钟下单周期指令运行速度为原来的12倍,整个指令
[单片机]
<font color='red'>51单片机</font>与MXA2500GL的振动信号分布式检测
以AT89C51单片机为核心的高频开关电源系统设计
引言 模块化是开关电源的发展趋势,并联运行是电源产品大容量化的一个有效方案,可以通过设计N+l冗余电源系统,实现容量扩展。本系统是多台高频开关电源(1000A/15V)智能模块并联,电源单元和监控单元均以AT89C51单片机为核心,电源单元的均流由监控单元来协调,监控单元既可以与各电源单元通信,也可以与PC通信,实现远程监控。 1 PWM控制电路 TL494是一种性能优良的脉宽调制控制器,TL494由5V基准电压、振荡器、误差放大器、比较器、触发器、输出控制电路、输出晶体管、空载时间电路构成。其主要引脚的功能为: 脚1和脚2分别为误差比较放大器的同相输入端和反相输入端; 脚15和脚16分别为控制比较放大器的反相
[单片机]
以AT89C<font color='red'>51单片机</font>为核心的高频开关电源系统设计
51单片机的GPIO配置
导语 通过单片机控制外围器件(LED,蜂鸣器,数码管,按键),本质上是对于单片机IO口的操作,相对于STM32,51单片机IO口模式较少,但了解IO的内部对于学习了解51单片机也由很大的帮助。 GPIO GPIO(General Purpose Input Output),通用输入输出。既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。可以通过软件去控制。 在大多数的时候,我们将IO口可以看为一个电子开关,通过向IO寄存器中写入相应的值,其输出的电平就随着寄存器的变化而变化,这是IO口的输出,在大多数的单片机中,需要去配置单片机的IO模式,是输入还是输出。 即需要预先初始化,配置GPIO的参数,再去使用
[单片机]
<font color='red'>51单片机</font>的GPIO配置
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved