微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 80C51复位标志位的设置与应用研究

80C51复位标志位的设置与应用研究

时间:09-11 来源:互联网 点击:
2 复位标志位的应用方法

一般的初始化程序段落的编写方法很简单,不过它仅适用于那些要求不高、功能也很简单的单片机项目。这类项目(如一些小家电之类的单片机应用)几乎不存在很强的“过程性”或“不间断性”,对于随时可能发生的复位操作以及重新从头运行的用户程序,不会带来太大的影响或破坏性后果。

而对于“过程性”或“不间断性”要求很强的单片机项目,一旦发生偶然性复位操作,并且重新从头运行用户程序,那么将会带来极大的负面影响或破坏性后果。例如,单片机控制的面包机,在一次加工面包的过程中,会经历搅拌、加热等工序;假若其间发生意外复位并且重新从头执行程序,则会导致成为废品或者烧焦。电脑控制的手术机器人,在一次手术过程中如果发生意外复位并且返工,将会带来难以想象的严重后果。电脑控制的导弹,在对准目标发射之后的飞行过程中,如果发生意外复位并且重新从头执行程序,那么将会产生难以预料的结果。

综上所述,单片机在工作过程中,受到意外干扰而进行复位操作,如果说是不可避免的,那么复位之后从何处或在何种背景下开始运行程序,则是可以人为安排的。因此,复位标志位的应用方法实质上就是复位处理程序的编写方法。复位处理程序的处理流程如图2所示。


类似于编写UART串口通信中断服务程序的思路,在进入中断程序之后首先要检测中断标志位,看是一次接收中断(RI=1)还是一次发送中断(SI=1),然后再进入不同程序分支进行针对性服务。从图2中可以看出,在从复位矢量0000H开始执行用户程序时,首先应该检测复位标志寄存器,判断是电源初始加电还是其他复位源引起的复位或程序计数器PC清零。

① 如果是电源初始加电,则进行原始状态的初始化。这种情况最简单。

② 如果属于程序跑飞引起的软件复位、软硬件复位、非法地址复位,或者人工强行复位,则应该依据具体情况尽量恢复数据或修正参数,以便尽最大可能不影响或少影响程序的正常运行(恢复和修正数据的具体算法这里不再深入探讨)。

③ 如果是欠压复位,则尽量从被打断的程序断点处重新开始执行程序。具体的实现方法和步骤可以是: 复位之前——单片机响应PFO中断请求而进入其服务程序后,保存堆栈指针SP当前值到指定RAM单元,把单片机推入停机状态;复位之后——待电源恢复后, MAX813L得电而从RESET端送出高电平信号,唤醒停机状态下的单片机。若唤醒后的单片机再检测到是欠压复位,则首先复原先前的SP值,再利用一条 RET(或RETI)指令弹出停机之前的程序断点到PC,从而可以继续执行前面的任务。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top