80c51复位标志位的设置与应用分析_第1页
80c51复位标志位的设置与应用分析_第2页
80c51复位标志位的设置与应用分析_第3页
80c51复位标志位的设置与应用分析_第4页
80c51复位标志位的设置与应用分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0c51复位标志位的设置与应用分析引言设査复位标志位便于区分不同原因引发的复位,作为一种新技术被越來越多的新型单片 机所采纳。例如philips公司的p87lpc700和p89lpc900系列、freescale公司(原motorola 半导体部)的mc68hc05系列和mc68hc08系列、sunplus公司的spmc65系列、 microchip公司的pic系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。mc68hc08系列冇一个复位状态寄存器,负责记录6种复位标志位:上电复位、弓i脚 复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。spmc65系列有一个系统 控制寄存器

2、,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地址复 位和欠压复位。51兼容的p89lpc900系列有一个复位源寄存器,负责记录6种复位标志 位:欠压复位、上电复位、外部复位、看门狗复位、软件复位和uart收到间隔字符复位 (主要作为进入isp监控程序的途径z)。就连初学者很常用的at89s51/52和 p89c52x2,也在其电源控制寄存器pcon中增设了一个上电标志位pof。1复位标志位的设置方法传统的80c51单片机没冇设计复位标志位的记录功能,这应该说是一种遗憾,那么能 否通过一定的技术手段来弥补这个缺憾呢?这里给广大80c51单片机用户提供一种启示和 引导。实现复位标

3、志位的记录肯定需耍一定的硕件电路支持,而这种电路的设计不存在固定模 式。笔者利用一片max813l设计了一种支撑电路,如图1所示,仅供读者参考。未稳定宜流电底7805+5 v稳定直流电压+lc2输出复位信号hloopfpfimax813lwdopfogndgi |r?- j resetmrwd1swifrst vgp1.0p1.1into 80c51psenwdr(p12)lvr(b1.3) mrst(pl4)gnd图1 80c51设置复位标志的支撑电路在图1中,应用了一个4输入端“与非”门g1和一个按钮开关sw1,还占用了 80c51的5条i/o引脚p1.0p1.4以及一个外部中断源into

4、,并且预先通过初始化软件设置into为唯一的高级屮断源,卜降沿触发方式有效,开放总屮断使能位ea。平时g1因各输入端部维持在高电平上,因而其输出端也保持高电平。电路屮利用了一个海虽电容器c1作为储 存能虽的器件,扮演着备用电池的角色。由于二极管d1的存在,在主电源断电期间,c1 仅为单片机供电,应该让这吋的80c51进入耗能最低的停机状态(pd模式)。在图1电路的基础上配合必要的用户软件,就可以在7种不同复位源引起复位z后保 存6个标志位来记录7种复位标志,以下分别进行讲解。对以事先在ram的位寻址区间分 配一个字节,例如20h单元,用于记录6个复位标志位,如表1所列。表1用户定义的系统复位标

5、志寄存器(srfr)世乍bit7bil6bil5bit4bii3bit2billbito位名00mrstlvrwdriarsurswr位地址27h2611251124112311221121 ii2011假设该寄存器定名为srfr (system reset flag register),字节地址为20h, 8位 当中仅利用了 6位,bit5bit0分别记录人工复位、欠压复位、看门狗复位、非法地址复位、 软硬件复位和软件复位。 mrst:人工复位。当复位按钮sw1被按下时引发into中断;在中断服务程序 中检测输入引脚p1.4的状态。如果p1.4=0,贝ij置位mrst,记录下曾经发生了一次人

6、工 复位操作。然后进行一次主动的复位操作,方法是从输出脚p1.0输出一个低电平给 max813l的输入引脚mr,经max813l延时后从输出端reset送出髙电平复位信号给 80c51,令其进行一次硬件复位操作。 lvr:欠压复位。当上游电源电压开始跌落并且下降到max813l的pfi检测门 限以下,输出端pfo送出低电平,引发into中断;在中断服务程序中检测输入引脚p1.3 的状态。如果p1.3=0,则置位lvr,记录下曾经发生了一次欠压复位操作;然后进行一次 主动的复位操作(方法同上),或者令单片机进入停机状态,以便节省能耗和保持数据,以 及等待主电源的恢复。 wdr:看门狗复位。当发生

7、看门狗溢出时,max813l的输出端wdo送岀低电 平,引发into中断;在中断服务程序中检测输入引脚p1.2的状态。如果p1.2=0,则置位 wdr,记录下曾经发生了一次看门狗复位操作;然示进行一次主动的复位操作(方法同上)。 喂狗操作利用了一个i/o引脚p1.1o iar:非法地址复位。当发生非法地址时,80c51的输出端psen送出低电平瞬 时脉冲,也会引发一次into中断;在中断服务程序中检测输入引脚p1.4-p1.2的状态。如 «p1.4-p1.2=111,则置位iar,表示发生了一次非法地址复位操作;然后进行一次主动 的复位操作(方法同上)。shr:软换件复位。当发牛了软

8、件陷阱的捕捉事件,或者软件看门狗的溢出事件 时,可以肓接置位shr,代表发生了一次软硬件复位操作;然后进行一次主动的复位操作(方法同上)。如果利用to作软件wdt,则应该同时设置into和to中断源为高级中断。swr:软件复位。当发生了软件陷阱的捕捉事件,或者软件看门狗的溢出事件时, 也可以直接置位swr,代表发生了一次软件复位操作;然后调用软件复位程序swrst即 可。软件复位程序的编写方法如下:swrst:;定义软件复位程序的实际入口地址clrea;首先关闭中断源总使能位setbfo;设置一个软件复位标志位movpo, #offh;设定通用端口 p0为高阻输入状态movp1, #offh;

9、设定通丿i端口 p1为高阻输入状态movp2, #offh;设定通用端口 p2为高阻输入状态movp3, #offh;设定通用端口 p3为髙阻输入状态movpsw, #00h;设定程序状态字寄存器为原始值:(根据需要还可初始化其他sfr)movdptr, #swr0;为reti准备弹出地址,而又不改变;执行顺序pushdpl;压栈低字节,在先pushdph;压栈高字节,在后reti:中断返回指令,清除高级中断激活触:发器swr0:clra;准备复位地址pushacc;压栈低字节00hpushacc;压栈高字节00hreti;清除低级中断激活触发器,并跳到;0000hpor:电源上电复位。虽然在

10、用户定义的系统复位标志寄存器(srfr)中,没 有直接设置一个por标志位,但是如果检测以上6个标,忐位同吋为0,则表明此前进行的 是一次上电复位。理由是,经过实验验证(实验所用的单片机型号为sst89c58),在每 次初次加电时,包含ram的20h单元在内的80c51内部ram区间(00h-7fh),具内 容全部口动清零;在每次rst引脚复位(或者软件复位)时,其內容维持不变。而各个sfr 无论是上电复位还是rst引脚复位时,均被还原为原始值(乂称复位值),如表2所列。表2片内可改写存储器空间复位情况表2片内可改写存储器空间复位情况存储佛空f»j类型上电父位rst引脚父位辕杵复位r

11、/m维持不交维持不芟ser维持不竇对于那些仅增设了一个复位标志位(技术手册中记作pof)的较新型单片机(如 at89s51/52> at89s8252、at89c53、at89c55wd、at89c51rc 和p89c51x2/52x2/54x2/58x2等型号),也恰好不再需要这里所设置的por标志位了。対于没有配备备用电源的单片机应用系统,还可以考虑利用e2prom在断电之前的瞬 间來转存复位标志位,以便在断电z后也不会彻底消失。该情况下既可选用外挂e2prom 数据存储器(如8脚串行的24c01、93c46或25c040等)的电路方案,也可选用内部本 身带有e2prom数据存储器的

12、单片机型号,如at89s8252等。这样在断电之前的瞬间, 利用电源滤波电容c2上的少量残留能量,即可完成对于e2prom的烧写操作。2复位标志位的应用方法一般的初始化程序段落的编写方法很简单,不过它仅适用于那些耍求不高、功能也很简 单的单片机项目。这类项目(如一些小家电之类的单片机应用)儿乎不存在很强的“过程性” 或“不间断性”,对于随时可能发生的复位操作以及重新从头运行的用户程序,不会带來太大 的影响或破坏性后果。而対于“过程性”或“不间断性”要求很强的单片机项目,一旦发牛偶然性复位操作,并且 重新从头运行用户程序,那么将会带來极大的负面影响或破坏性后果。例如,单片机控制的 而包机,在一次

13、加工面包的过程中,会经历搅拌、加热等工序;假若其间发生意外复位并且 重新从头执行程序,则会导致成为废晶或者烧焦。电脑控制的于术机器人,在一次手术过程 小如果发住意外复位并且返工,将会帶來难以想象的严重后果。电脑控制的导弹,在对准目 标发射之后的飞行过程屮,如果发生意外复位并且重新从头执行程序,那么将会产生难以预 料的结果。综上所述,单片机在工作过程屮,受到意外干扰而进行复位操作,如果说是不可避免的, 那么复位z后从何处或在何种背景下开始运行程序,则是可以人为安排的。因此,复位标志 位的应用方法实质上就是复位处理程序的编写方法。复位处理程序的处理流程如图2所示。从000011开蛤执行稈序检测系统

14、复位标志荒存器srtr主程序的主循环图2复位处理程序流程类似于编写uart串口通信中断服务程序的思路,在进入中断程序之后首先要检测中 断标志位,看是一次接收中断(rit)还是一次发送中断(sl=1),然后再进入不同程序 分支进行针对性服务。从图2中可以看出,在从复位矢最0000h开始执行用户程序时,首 先应该检测复位标志寄存器,判断是电源初始加电还是英他复位源引起的复位或程序计数器 pc清零。 如果是电源初始加电,则进行原始状态的初始化。这种情况最简单。 如果属于程序跑飞引起的软件复位、软硬件复位、非法地址复位,或者人工强行复 位,则应该依据具体情况尽量恢复数据或修正参数,以便尽最大可能不影响或少影响程序的 正常运行(恢复和修正数据的具体算法这里不再深入探讨)。 如果是欠压复位,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论