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

发布者:国宝集团最新更新时间:2018-04-10 来源: eefocus关键字:MCS51系列  单片机  软件复位 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:MCS51系列  单片机  软件复位 引用地址:MCS51系列单片机软件复位方法介绍

上一篇:基于单片机的角度测量仪的设计方法
下一篇:在Keil C51中直接使用二进制数的解决方法

推荐阅读最新更新时间:2024-03-16 15:59

医疗电子 MCU厂成长新动力
    医疗电子市场可望强劲成长,将成国内微控制器(MCU)厂近年业绩成长主要动力之一。 根据研调机构IC Insights预期,全球医疗电子市场在2010年因全球经济疲软,及欧、美遏制医疗成本,成长趋缓后,未来3年可望回复强劲成长动能。 IC Insights预估,今年全球医疗电子市场产值将约473亿美元,将年增3%,明年全球医疗电子市场产值可望攀高至509亿美元,将较今年成长8%。 今年医疗系统半导体产值将约44亿美元,年增7%,IC Insights看好,明年医疗系统半导体产值可望达49亿美元规模,将较今年强劲成长12%。 IC Insights预期,2017年全球医疗电子产值可望达654亿美元,2012年至2017年复合成长
[手机便携]
用51单片机制作呼吸灯
//晶振11.0592 //灯光在单片机控制之下完成由亮到暗的逐渐变化,感觉像是在呼吸 //本例在51hei-5型开发板上实现了一个数码管和一个led灯一起实现呼吸效果 //文件下载:http://www.51hei.com/f/fxd.rar #include reg52.h #define uint unsigned int #define uchar unsigned char sbit D1=P0^7; uchar sr; uchar jf; uchar code table ={ 0,1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18, 19,20,21,22,23,24,25,2
[单片机]
Microchip:不断拓展8位和16位MCU市场
一、约400种8位和16位MCU产品可供选择 Microchip如今有约400种8位和16位的单片机(MCU)产品供用户选择,适用于消费、汽车、办公自动化、通信及工业控制等不同市场领域的高产量嵌入式控制应用。这些产品可提供一系列功能特色:小的封装尺寸、高集成度、超低功耗、极高的性能、先进的模拟功能、高度可靠的闪存技术,以及先进的通信功能,如CAN、USB、Ethernet、LIN和RF。此外,Microchip还提供配套的开发工具和软件来为整个8位和16位单片机市场服务,让用户能够轻松、快速地开发出他们的应用。 Microchip产品的一大特色就在于所有产品都采用了同一种开发系统基础架构。当应用需求发生变动时,能够实现各类Mi
[焦点新闻]
凌阳十六位单片机与51单片机的比较分析
  凌阳单片机简介   凌阳单片机是一款控制处理数据以及数字信号处理设备。其语音识别模块自带语音的API函数,其中包括A2000格式和S480格式自动播放及手动播放的播放函数,S240、MS01格式自动播放的播放函数、DVR格式的语音录放函数和语音识别函数,让凌阳单片机不但可以作为普通的单片机开发系统,而且还可以作为一个语音系统进行语音播放、语音录放和语音识别,大大降低了凌阳单片机的开发难度,并增强了凌阳单片机的使用领域和功能。   凌阳单片优点   功能强、效率高的指令系统:μ’nSPTM的指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。低功耗、低电压:μ’nSPTM家族采用
[单片机]
凌阳十六位<font color='red'>单片机</font>与51<font color='red'>单片机</font>的比较分析
3个字让你记住单片机的大小端模式
今天,我们来讲解一下单片机的大小端模式,目录如下: 1、什么是大小端? 2、怎么区分大端模式和小端模式? 3、如何判断单片机的大小端模式? 4、大端模式与小端模式怎么转换? 5、STM32是大端还是小端模式? 一、什么是大小端? 我们常常提到的大小端,其英文名字为“endianness”,直译过来就是“字节序”的意思,是内存中存储数据的 字节顺序 (注意:一定要记住是“字节的顺序”,因为在计算机系统中都是以字节为单位的,每个地址单元都对应一个字节,即8bit)。 在C语言系统中,除了8bit的char类型,还有16bit的short类型、32bit的long类型。对于超过8bit的数据的存储,必然存在存在如何将多个字
[单片机]
3个字让你记住<font color='red'>单片机</font>的大小端模式
采用单片机和传感器实现温湿度检测系统的设计
引言 随着社会经济的发展和科学技术的不断进步,许多情况下都需要对环境的温湿度进行限定,因此,必须在某些特定环境安装温湿度报警器以进行监控。为此,本文利用集成温湿度传感器HM1500的测温快速、使用简便等特点,同时结合MSP430单片机强大的功能,设计了一个监控系统来对温湿度进行实时监控以进行超限报警。本系统测量准确、调试方便、可实时记录报警信息、方便工作人员排故,并可广泛应用于条件恶劣、人员不便进入的场合。 1 系统结构和总体设计方案 本系统的总体设计方案如图1所示。本方案采用分别设计温度和湿度采样电路的方法,将集成温度传感器AD590采集得到的电流信号和湿度传感器HM1500采集到的电压信号转换为给定范围内的电压信号。然后由
[单片机]
采用<font color='red'>单片机</font>和传感器实现温湿度检测系统的设计
单片机实现简单音乐发生器
/* 主程序 */ void main() { uchar key,k; TMOD = 0x01; // T0,工作方式1 ET0 = 1; EA = 1; while(1) { P1 = 0xf0; // 发全0行扫描码 if ((P1&0xf0)!=0xf0) // 若有键按下 { delay(); // 延时去抖动
[单片机]
STM32的基本系统是怎样的?
电源 无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空 对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU 用万用表测试供电电压是否正确,调试时最好用数字电源供电,以便过压或过流烧坏板子,电压最好一步一步从进线端测试到芯片供电端 复位、启动选择 Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址 在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或电源,切不可悬空;STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 用户闪存 = 芯片内置的Fla
[单片机]
STM32的基本系统是怎样的?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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