MCS51系列单片机软件复位的方法

出处:hbicecream 发布于:2008-09-01 09:25:52

  摘要:文章指出了一种广泛流传的误解:在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 ;掉入死循环。

  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 STAT和LJMP ERR1来替代LJMP ERR,再将干扰检测分别设在低级中断和主程序中,实验结果必然证明同:只有LJMP ERR才能万无一失地实现软件复位,使系统摆脱干扰同,恢复正常。在MCS-51单片机的软件复位过程中,必须连续执行两次中断返回指令RETI

  请登陆: 维库电子市场网(www.dzsc.com) 浏览更多信息



  
关键词:单片机

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!