新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 80C51复位标志位的设置与应用分析

80C51复位标志位的设置与应用分析

作者:时间:2011-05-18来源:网络收藏

  对于没有配备备用电源的单片机系统,还可以考虑利用E2PROM在断电之前的瞬间来转存位,以便在断电之后也不会彻底消失。该情况下既可选用外挂E2PROM数据存储器(如8脚串行的24C01、93C46或25C040等)的电路方案,也可选用内部本身带有E2PROM数据存储器的单片机型号,如AT89S8252等。这样在断电之前的瞬间,利用电源滤波电容C2上的少量残留能量,即可完成对于E2PROM的烧写操作。

2 位的方法

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

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

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

按此在新窗口浏览图片
图2 复位处理程序流程

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

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

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

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


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭