历史上的今天
返回首页

历史上的今天

今天是:2025年04月12日(星期六)

2018年04月12日 | 浅谈单片机软件复位方法

2018-04-12 来源:eefocus

有的单片机(如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。


推荐阅读

史海拾趣

Chesivale Electronics公司的发展小趣事

在技术创新和合作伙伴关系的支持下,Chesivale Electronics公司开始加速市场扩张的步伐。公司不仅在国内市场取得了良好的业绩,还积极拓展海外市场。通过参加国际电子展会、设立海外分支机构等方式,公司的品牌知名度和影响力逐渐提升。同时,公司也注重品牌建设,通过提升产品质量、加强客户服务等措施,赢得了客户的信任和好评。这些努力使得Chesivale Electronics公司在国内外市场上都取得了不俗的成绩。

CML公司的发展小趣事

在完成了数十年的成功发展后,CML并未满足于现状。公司开始着手制定面向未来的战略规划,旨在继续保持在半导体行业的领先地位。CML加大了对新兴技术的研发投入,如人工智能、物联网等领域,积极探索新的应用场景和市场机会。同时,公司还加强了与国际同行的合作与交流,不断提升自身的技术水平和市场竞争力。通过这些努力,CML为未来的发展奠定了坚实的基础,展望着更加辉煌的未来。

以上是基于CML公司发展历程的五个可能故事。请注意,这些故事虽然基于事实进行构建,但并非真实的历史记录。如需了解更多关于CML公司的具体发展历程和故事,建议查阅相关文献或访问公司官方网站。

Anytek Technology Corporation Ltd公司的发展小趣事

Anytek Technology Corporation Ltd自创立之初,便敏锐地捕捉到了车载电子产品的市场潜力。2003年,公司果断进军车载及行车记录仪领域,凭借前瞻性的市场洞察力和技术积累,迅速在行业内崭露头角。当时,随着汽车保有量的不断增加,行车记录仪作为保障行车安全、记录行车过程的重要设备,市场需求日益旺盛。Anytek凭借高品质的产品和专业的服务,赢得了广大消费者的信任和好评。

Conxall公司的发展小趣事

随着科技的飞速发展,物联网成为了新的热点。Conxall公司敏锐地捕捉到了这一机遇,投入大量资源进行物联网技术的研发。经过数年的努力,公司成功推出了一款具有高度集成和智能化特点的物联网模块,广泛应用于智能家居、智慧城市等领域,为公司的快速发展奠定了坚实的基础。

Eurosil Electronics Ltd公司的发展小趣事

随着技术的不断成熟,Eurosil开始将产品推向市场。公司凭借优质的产品和卓越的服务,逐渐在电子行业中树立了良好的品牌形象。同时,Eurosil积极拓展国际市场,与多家国际知名企业建立了合作关系,将产品销往全球各地。这一过程中,Eurosil不仅扩大了市场份额,也积累了丰富的国际经验。

CONEXANT公司的发展小趣事

在电子行业的历史长河中,洛克维尔国际是一个不可忽视的名字。作为一家由威拉德·洛克维尔创立的大型公司,洛克维尔国际通过一系列合并与收购,逐渐壮大其业务版图。然而,随着时间的推移,公司进行了战略调整,并于1996年将其半导体部门剥离。这一剥离行动最终催生了科胜讯公司(Conexant Systems),一个专注于半导体技术的独立实体。科胜讯公司继承了洛克维尔在半导体领域的深厚技术积累和市场经验,为其后续的发展奠定了坚实基础。

问答坊 | AI 解惑

移动视频监控在“数字城管”中的应用

移动式无线视频监控,指系统的视频采集前端是可移动的视频采集终端,对不同的临时监控需求点进行监控。可移动的视频采集终端由于监控点不固定,因此,它必须利用无线公网作为监控数据的传输网络。    移动视频监控系统原理   移动视 ...…

查看全部问答>

请问你们知道前边值和后面的值有什么关系吗?

在2440.h中这么写的 #define ADC_BASE      0xB1800000 // 0x58000000 而在map.a中是这样写的, DCD 0x91800000, 0x58000000,  1  ; A/D convert register 0x91800000: 虚拟地址 0x58000000: 物理地 ...…

查看全部问答>

大家用wince6.0, 在vs2005里是怎么找函数和变量定义的???

转到声明,转到定义都用不了,怎么回事?是不是非托管代码的原因?…

查看全部问答>

关于USB接口的serial驱动

serial驱动是将USB接口模拟成串口?那是怎样与外部设备进行通信的?难道就和普通的串口一样?…

查看全部问答>

八位二进制数转BCD码

怎样将八位的二进制数转换成一字节的BCD码?…

查看全部问答>

PPP协议

  cfanlwn  你那还有PPP协议的资料没,发我一份啊!…

查看全部问答>

WinCE 4.2下软重启的工具

谁有WinCE 4.2下软重启的工具啊。网上的都是用于Win Mobile版本的。不能用。…

查看全部问答>

【讨论】如何自建库并调用它?

在IAR下要如何自建库,又怎么去调用呢?可否举个最简单的例子?????…

查看全部问答>

安装了IAR5.2,破解失败,怎么回事啊,用5.2的朋友进来看看

Fatal Error[Cp001]: Copy protection check, No valid license found for this product对程序进行编译就会有这个错误,用软件破解了啊,也在网上查了,但是还是没有解决我卸载好几遍了希望高手帮助啊…

查看全部问答>