80c51的三种非常规的复位技术_第1页
80c51的三种非常规的复位技术_第2页
80c51的三种非常规的复位技术_第3页
80c51的三种非常规的复位技术_第4页
80c51的三种非常规的复位技术_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、标准80c51片内现有的复位逻辑比较简单,只冇通过一条复位引脚rst进行外部扩展。技术手册屮给出了 上电复位(por, power on reset)和人工复位(mrst, manual reset)电路的接线方法;借助于一只专用外 围芯片,女iimax813l或ds1323等,來扩充欠压复位(lvr, low voltage resei)和看门狗复位(wdr, watch dog timer reset)也有文章介绍。本文将介绍三种非常规扩展复位方式:软件复位(swr, software reset) 软便件复位(shr, software and hardware reset)和非法地址复

2、位(iar, illegal address reset)。软件陷阱技术及其改良方法软件陷阱(software trap)是-种捕捉程序“跑飞”的编程方法。通常可以在程序中设置软件陷阱,引导程序 失控的单片机跳转到一个指定的地址去执行,最终i川复到正常轨道上来。软件陷阱可以设置在用户程序的 空隙处或者转移指令之后,还可以利用一系列的陷阱指令來填充程序存储器的空口区。实现软件陷阱功能 的指令是一个“5字节指令串”,通常包含2条单字节nop指令和1条3字节跳转指令。nop :利用空操作指令nop ;来增加捕捉有效性ljmp swrst;无条件跳转到指定地址去其屮“swrst”可以是一段“软件复位程

3、序”的入口地址标号,也可以是复位矢量“0000h”,即主程序入口地 址。如果swrst等于复位矢® 0000h,则会把捕捉到的跑e程序引导到初始化程序入口地址去执行,从而达 到冋复到正常轨道的h的。这种处理方法只适合中断功能没有被启用的场合。可以设想,假如是在(低级 或高级)小断服务程序屮跑飞的,这时即使把程序拉回到起点,而小断激活触发器不能够被清除,会影响 以后的屮断请求无法被cpu响应。如果swrst等于“软件复位程序”的入口地址,则会引发一次“软件复位"。关于软件复位程序的设计方法, 随后介绍。总乙这种方法的指导思想是指,把未使川的rom空间用跳转引导指令填满,作为软

4、件“陷阱”,以捕获“飞 抻”的程序,并强行将捕获到的跑飞程序引向一个特定的地址,在那里由一段专门处理错谋的程序进行处理, 以恢复系统的止常运行。为提高跑0程序的捕获率,通帘述要在引导指令之前放趕上儿条空操作指令nop。 理山是,8()51的指令编码采用的是不等长方式,长度分别为13字节,而程序跑e又是通过非法随机改 变pc值形成的。假若跑飞后的pc值落到3字节指令ljmp的中间,就会把操作数当作操作码来执行,将 会产生不可预知的结果。为了提高捕捉的有效性,就在ljmp指令之前至少填充2条单字节的nop指令。如果把“5字节抬令串”改换成如下作者新设计的“4字节指令串”,陷阱指令将会更加有效。理由

5、是,该指令 对应的h标码为“00 2()0()2()h",这段码无论匝复多少次都是等同的。另外,应该在程序存储器0020h开始 的3字节中再放置一条跳转到“软件复位程序”真正入口的小转指令ljmp swrst。经过核查,0020h 0022h字节恰好位于定时器t1中断矢量区尾部和串口中断矢量之前。swrsto equ 0020h;定义“软件复位程序”的间接入口地址为“0020h”nop ;填充一条单字节的空操作指令,机器码是“00h”ljmp swrsto ;无条件跳转到指定地址去。对应的机器码是“20 00 20h”软件复位技术软件复位是一种新技术,h前有越來越多的新型单片机配备了

6、该功能。例如philips公司的p87lpc700利 p89lpc9oo系列、ti- bb公司的msc12oo系列和sunplus公司的spmc65系列等,内部都设计了专门用 于实现软件复位的控制寄存器或者控制位。软件复位是在利用软件陷阱技术或软件看门狗技术时,必霸配套实施的一项后续处理工作。所谓“软件复位” 是一种由用户软件控制的复位活动,就是利用一系列指令來模拟硬件复位所实现的各种操作内容,并且重 新从头开始执行用户程序。其中的操作内容应该包含:(1)对于标准8oc51的21个特殊功能寄存器sfr的复位操作,利用mov指 令很容易实现。全部复位可能不是必需的,只管那些在用户程序中川到的sf

7、r即可,可以由用户口己定制。2)对于无统一编址的程序计时器pc的复位,利用一条跳转指令即可。(3)中断激活触发器的复位既容 易被人们忽略,也不容易实现。理由是它们对于用户程序是不可见的,无法直接读写其内容。冇的编程人 员采用ljmp o(x)()h (机器码为20 ()0 00h)作为软件陷阱,认为直接跳转到复位欠量就完成了软件复位, 就是这类失谋案例的典型代衣。淸除中断激活触发器有何必耍呢?程序的跑飞是随机发牛的,其起飞点完全可能发牛在低级或高级中断服 务了程序中,这时的中断激活触发器已经被宣位。如果在程序冋复z后没冇及时清除它们,将阻止以后出 现的所冇的同级或低级屮断请求。标准80c51片

8、内现冇的复位逻辑比较简单,只冇通过一条复位引脚rst进行外部扩展。技术手册小给出了 上电复位(por, power on reset)和人匸复位(mrst, manual reset)电路的接线方法;借助于只专用夕卜 围芯片,如max813l或ds1323等,來扩充欠压复位(lvr, low voltage reset)和看门狗复位(wdr, watch dog timer reset)也有文章介绍。木文将介绍三种非常规扩展复位方式:软件复位(swr, software reset) 软便件复位(shr, software and hardware reset)和菲法地址复位(iar, ill

9、egal address reset)。软件陷阱技术及其改艮方法软件陷阱(software trap)是一种捕捉程序“跑飞”的编程方法。通常可以在程序中设置软件陷阱,引导程序 失控的单片机跳转到一个指定的地址去执行,最终回复到正常轨道上来。软件陷俳可以设置在川户程序的 空隙处或者转移指令z后,还可以利用一系列的陷阱指令來填充程序存储器的空白区。实现软件陷阱功能 的指令是一个“5字节指令串”,通常包含2条单字节nop指令和1条3字节跳转指令。nop ;利用空操作指令nop :來增加捕捉有效性ljmp swrst;无条件跳转到指定地址去其中“swrst”可以是一段“软件复位程序”的入口地址标号,也

10、可以是复位欠量“0000h”,即主程序入口地 址。如果swrst等丁复位矢虽:0000h,则会把捕捉到的跑飞程序引导到初始化程序入口地址去执行,从而达 到回复到正常轨道的目的。这种处理方法只适合屮断功能没冇被启用的场合。可以设想,假如是在(低级 或高级)中断服务程序中跑e的,这时即使把程序拉冋到起点,而中断激活触发器不能够被清除,会影响 以后的屮断请求无法被cpu响应。如果swrst等丁“软件复位程序”的入口地址,则会引发一次歌件复位”。关丁软件复位程序的设计方法, 随后介绍。 总z,这种方法的指导思想是指,把未使用的rom空间用跳转引导指令填满,作为软件“陷阱”,以捕获“飞 掉”的程序,并强

11、行将捕获到的跑飞程序引向一个特定的地址,在那里由一段专门处理错谋的程序进行处理, 以恢复系统的正常运行。为提高跑飞程序的捕获率,通常述要在引导指令z前放置上几条空操作指令nop。 理止i是,8051的指令编码采用的是不等长方式,长度分别为13字节,而程序跑e乂是通过非法随机改 变pc值形成的。假若跑飞后的pc值落到3字节指令ljmp的中间,就会把操作数当作操作码來执行,将 会产生不可预知的结果。为了提高捕提的有效性,就在ljmp指令z前至少填充2条单字节的nop指令。如果把“5字节指令串”改换成如下作者新设计的“4字节指令串”,陷阱指令将会更加有效。理山是,该指令 对应的ii标码为“00 20

12、0020h”,这段码无论巫复多少次都是等同的。另外,应该在程序存储器0020h开始 的3字节中再放置一条跳转到“软件复位程序”真正入口的屮转指令ljmp swrsto经过核査,0020h 0022h字节恰好位于定时器t1中断矢量区尾部和串口中断矢量z前。swrsto equ 0020h;定义漱件复位程序”的间接入口地址为“0020h”nop :填充一条单字节的空操作指令,机器码是“00h”ljmp swrsto ;无条件跳转到指定地址去。对应的机器码是“20 00 20h"软件复位技术软件复位是一种新技术,目前冇越來越多的新型单片机配备了该功能。例如philips公司的p87lpc7

13、00和 p89lpc900系列、ti- bb公司的msc1200系列和sunplus公司的spmc65系列等,内部都设计了专门用 于实现软件复位的控制寄存器或者控制位。软件复位是在利用软件陷阱技术或软件看门狗技术时,必需配套实施的一项后续处理工作。所谓“软件复位” 是一种由用户软件控制的复位活动,就是利用一系列指令來模拟硬件复位所实现的各种操作内容,并且重 新从头开始执行用户程序。其中的操作内容应该包含:(1)对于标准80c51的21个特殊功能寄存器sfr的复位操作,利用mov指 令很容易实现。全部复位可能不是必需的,只管那些在用户程序中用到的sfr即可,可以由用户自己定制。2)对于无统-编址

14、的程序计时器pc的复位,利用一条跳转指令即可。(3)中断激活触发器的复位既容 易被人们忽略,也不容易实现。理山是它们对于用户程序是不可见的,无法直接读写其内容。有的编程人 员采川ump0000h (机器码为20 00 00h)作为软件陷阱,认为直接跳转到复位矢量就完成了软件复位,就是这类失误案例的典烈代表。 淸除中断激活触发器冇何必要呢?程序的跑飞是随机发生的,其起飞点完全可能发生在低级或鬲级中断服 务子程序中,这时的中断激活他发器已经被置位。如果在程序回复之后没有及时清除它们,将阻上以后出 现的所冇的同级或低级11 断请求。图1中断激活触发器示意图中断激活触发器包含筒权组和低权组两个触发器,

15、电路组成如图1所示,该图是根抓作者的理解和经验绘 制的。电路中包括1个逻辑或门g1、两个s-r触发器ff1和ff2。当cpu响应低级中断请求之后,ff1 被置位,其q = 0,封锁“低权组”不再受理新的低级中断请求;当cpu响应高级中断请求z后,因为g1 的作用而使ff1和ff2同时被置位,ff1的q = 0封锁“低权组”,ff2的q = 0封锁“高权组”,不再受理新 的高级和低级中断请求。如何设计“软件复位程序”呢?其编写方法如下。swrst:;定义软件复位程序的实际入口地址clr ea ;首先关闭中断源总使能位setb f0 ;设置一个软件复位标志位mov po, #0ffh ;设定通用端

16、口 p0为高阻输入状态mov pl, #0ffh :设定通用端口 p1为髙阻输入状态mov p2, #0ffh ;设定通用端口 p2为高阻输入状态mov p3, #()ffh ;设定通用端口 p3为高阻输入状态mov psw, #00h ;设定程序状态字寄存器为原始值;(据实际需要还可初始化其他sfr)mov dptr, #swr0 :为reti准备弹出地址,而乂不想改变执行顺序push dpl ;压栈低字节,在先push dph ;压栈高字节,在后reti ;中断返回指令,清除高级中断激活触发器swro: clr a ;准备复位地址push acc ;压栈低字节()()hpush acc ;

17、压栈高字节oohreti ;淸除低级中断激活触发器,并跳到0000h以下几点需要说明:(1)首先关闭总的中断使能位,以确保软件复位过程顺利完成;(2)其中的核心指 令是中断返i川指令reti, w为在整个指令集中只有该指令能够淸除中断激活触发器;(3)末尾ret1指 令的作用还代替了一条3字节的“ljmp 0000h-指令;(4)山软件陷阱捕获的跑飞程序并不一定同时置位 了所冇两个中断激活触发器,但是该程序仍然适用,并且也没有任何负浙彩响;(5)软件复位标志这里利 用了 psw屮的一个通用位f0,也可以利用fl、gfo、gf1以及ram字节单元或位单元等;(6)软件复 位是-种不外扩任何硬件电

18、路、不导致单片机发生状态迁移、纯软件的复位方法。软硬件复位技术软硬件复位是软件复位功能的一种延伸,也是单片机的一种自主复位方式,既具有软件复位的特点(可以 由编程人员按需要來启用),乂具冇硕件复位的特点(能够实现硕件复位的全部操作内容)。这种复位方 式是木文作者自行规划、设计和命名的。(a)分立件电路方式(b) 1c电路方式在上述软件复位的基础上很容易实现这里所说的软硬件复位方式,不过需要外扩一定的硬件电路的支持。 图2是两种配合软硬件复位的外扩电路。其中,图2 (a)电路是在普通复位电路的基础上,添加1只三 极管q1和3只阻容元件而成的,并且其导通与截止由一条并口引脚控制,如p1.0。平时p

19、1.0维持高电平, q1截止;当内部软件需要实施该复位时,从p1.0脚输出低电平,q1导通把rst脚拉高,强行复位单片机。这里r3、r4和c2起着延时和限流的双重作用。图2 (b)电路是在max812m对接80c51电路基础上添 加一条连线而成的,其工作原理与上类似。该连线把max812m的人工复位输入脚mr和一条通用i/o脚(如p1.0)连接起來即町。如何设计“软硬件复位程序”呢?其编写方法如下。shrst:;定义软硕件复位程序的入口地址setf1 ;设置一个软件复位标志位clrp1.0 :从p1.0输出低电平,开始实施软硬件复位orl pcon, #02h;置位pd,令单片机进入停机状态,

20、即pd模式;经过延时后rst被拉高,迫使单片机进入复位状态;在复位操作完成并且唤醒单片机z后,将重新从0000h开始执行用户程序以下儿点需要说明:(1)如果利用这里的“软硕件复位程序'代替前面的“软件复位程序”,可以简化用户程 序并且复位进行得彻底,但是需要增加一些硬件,并且也把可以定制的复位操作给转化成了固定的复位操 作。(2)在图2所示的软硬件复位的支撑电路,除了可以提供复位信号给单片机,还冇一个很大的好处, 就是可以为其他外围电路捉供复位信号,这弥补了传统80c51的一个欠缺。标准8oc51的复位引脚rst是只能输入的单向结构,不能山单片机主动地为外围芯片提供同步的复位信号; 而

21、mc68hc05和mc68hc08系列、st公司的st7系列,以及许多新款51兼容单片机都把rst引脚设计 为可输入/输出的双向结构,在内部看门狗溢出复位的同时,也从rst输出一个高电平脉冲,控制其他外用 芯片与单片机进行同步复位操作。例如,atmel公司的at89s51/52、t89c51rd2、at89c51rc等型号 和philips公司的p89c51rc、p89c51ra2/rb2/rd2等型号,它们都带冇内部看门狗。非法地址复位技术一般来说,非法地址复位是指由于意外原因导致程序计时器pc内容被破坏,而迫使cpu试图到一个非法 地址去抓取指令代码來执行,就强迫单片机进行复位操作。由于5

22、1系列单片机的硕件结构采用的是“哈佛架构”,其程序区和数据区截然分开、独立编址,不存在cpu 到ram区抓取指令的可能性,因此这极大地降低了非法寻址的概率。但是这并不能彻底杜绝菲法寻址的 可能性,尤其是对于哪些实际配备rom容屋远小于64kb的情况。这时就可以狭义地定义非法地址是pc 值超出rom实际容鼠的地址编码。(a) ic电路直接复位方式(b)先中断后复位方式图3是两种实现非法地址复位的支撑电路。其屮,图3(a)电路是在图2(b)的基础上改变一条连线而成的。 该连线一端连接psen信号引脚,该引脚专门用來捉供选通外扩程序存储器rom的片选信号;另一端连 接max812m的人丁复位输入脚mro平时psen引脚一直维持在窩电平上;只有当cpu试图非法到外部 rom抓取指令时,psen引脚才会送出低电平脉冲,就是巧妙地利用该脉冲作为复位信号源,来强迫单片 机进行复位操作。图3 (b)电路可以看作是在图2 (b)基础上改变添加一条连线而成的。该连线把psen 信号引脚和一条外部中断源引脚into连接起來,并设定into为下降沿触发和高级中断源。当出现菲法 地址时,psen引脚上的低电平脉冲经过into向cpu请求中断;在cpu响应该中断之后可以设置标志, 然后实施软件复位或者软硬件复位。

温馨提示

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

评论

0/150

提交评论