当前位置:首页 > 单片机 > 单片机
[导读]随着MCS-51系列单片机的发展,其芯片价格在不断下降,但同时也带来了单片机芯片的抗干扰问题,该问题可能导致一些智能型仪器仪表单片机工业控制系统发生“死机”。笔者通过近几年的设计实践及不断试验,总

随着MCS-51系列单片机的发展,其芯片价格在不断下降,但同时也带来了单片机芯片的抗干扰问题,该问题可能导致一些智能型仪器仪表单片机工业控制系统发生“死机”。笔者通过近几年的设计实践及不断试验,总结了一套可靠的“看门狗”硬件电路软件设计方法。由于一些专业期刊曾经刊登过许多关于“看门狗” 硬件电路构成的文章,同时也详细的关于“看门狗”电路非正常失效故障原因的分析及针对性软件设计技巧[1],本文给出了一个采用MAX706和89C52 构成的“看门狗”硬件电路,并且从新的角度说明了如何确保“看门狗”电路的正常工作,同时给出了它的软件设计方法。

1 “看门狗”硬件电路简述

现以MAX706监控电路为例(见图1)来说明“看门狗”硬件电路的工作过程,我们知道,MAX706是一种性能优良的低功耗CMOS监控电路芯片,其内部电路由上电复位、可重触发“看门狗”定时器及电压比较器等组成[2]。MAX706只要在1.6秒时间内检测到WCI引脚有高低电平跳变信号,则“看门狗”定时器清零并重新开始计时;若超出1.6秒后,WCI引脚仍无高低电平跳变信号,则“看门狗”定时器溢出,WDO引脚输出低电平,进而触发MR手动复位引脚,使MAC706复位,从而使“看门狗”定时器清零并重新开始计时,WDO引脚输出高电平,MAX706的RST复位输出引脚输出大约200毫秒宽度的低电平脉冲,使单片机控制系统可靠复位,重新投入正常运行。

2 “看门狗”电路软件设计方法

以往的“看门狗”电路复位指令(即“喂狗”)一般总是插入在主程序中,而且“喂狗”指令一般是脉冲式,可以连续用两条取反指令(如CPL P1.0)。这是因为一般情况下,程序跑飞或者陷入“死循环”时,中断功能可能不受影响,CPU仍能象正常运行时一样响应和执行中断子程序。这时如果中断子程序中插有“喂狗”指令,则“看门狗”定时器始终处于正常无溢出状态,无法对已经混乱的微机系统重新启动以投入正常运转状态。

在主程序中适当插入“喂狗”指令,大多数场合的单片机系统都能够比较可靠地工作。但是有一种特殊情况,即中断响应功能已经失效,而主程序仍然能够正常运行,这时“看门狗”电路对恢复单片机系统正常工作时无能为力的。例如:当程序正在执行中断子程序时,系统突然受到强烈干扰,程序跑飞,而且PC指针刚好落在主程序的指令字节上,堆栈也不溢出,使主程序能够继续正常运行。这时“看门狗”的“喂狗”动作正常,而中断再也不法响应了。这时因为在MCS-51的中断系统中有两个不可寻址的优先级状态触发器,分别指标两级中断响应状态。当CPU响应中断时,首先置位相应的优先级状态触发器(该触发器能指出CPU正在处理的中断优先级别),这时会屏蔽掉同级别的所有中断申请,直到执行RETI指令时,才由CPU硬件清零该优先级状态触发器,从而使以后的中断请求能被正常地响应[3]。如果响应中断后而不执行RETI指令,那么同级别中断申请就不会被响应了。

当然,象上述这种情况是比较少见的。大多数情况下,程序跑飞后都会使PC指针越出有效程序区,造成“死机”。这时“看门狗”就起作用了。在大多数系统中,中断子程序执行的时间占总运行时间的百分比都非常小,而在执行中断程序时,PC指针跑飞越过RETI指令,而主程序又能正常运行的机会就更少。但是如果中断子程序处理数据比较复杂或带有一些函数运算的功能时,则出现这种系统失常的情况就有可能发生了。以前,在笔者设计的智能流量计中就曾经出现过这种现象:键盘显示操作都正常,看起来不象“死机”,但是在设定参数时,数据位该内烁的不闪烁,总流量不会累计上去,显然是T0定时中断系统失效,而主程序仍然在运行,因为“喂狗”指令插在主程序中。那么,针对这种情形,有没有彻底解决的方法呢?“喂狗”指令直接插在中断子程序中是不合适的,而单独插在主程序中又显然是不够的。笔者通过仔细推敲后,将“喂狗”指令分解开来,取反指令变成置位和清零两种指令(即SETB P1.0和CLR P1.0),将置位指令插在主程序中,而将清零指令插在T0中断子程序中,这样将两者联系起来,缺一不可,无论主程序运行失效,还是T0中断请求失效,都不能完成完整的“喂狗”指令,造成“看门狗”动作,从而确保了系统安全可靠地工作。
    具体做法如下:
    ORG 0000H
    LJMP START
    ORG 000BH
    LJMP INTT0
    ……
    ORG 0030H
    START:MOV SP,#30H
    ……
    MAIN:NOP
    NOP
    SETB P1.0
   NOP
    NOP
    SETB EA
    NOP
    SETB ET0
    ……
    LJMP MAIN
    ……
    INTT0:NOP
    NOP
    CLR P1.0
    NOP
    NOP
    ……
    RETI

这样,在整个用户程序中只唯一的一对指令(SETB P1.0及CLR P1.0)能使“看门狗”定时器复位。也就是说不会有任何“非法”的指令能使“看门狗”定时器误复位,致使系统已经“死机”而“看门狗”失效。当然,对对没有中断的用户系统,只需将清零指令(CLR P1.0)也插在主程序中就可以了;对于有多种中断的用户系统,如果没有中断嵌套,则清零指令(CLR P1.0)可以插在任一个中断子程序中,而在主程序中适当加入一些有关中断的冗余指令(如SETB ET0等),以免因有关中断的特殊功能寄存器数据受到干扰时导致中断功能失效;对于有二级中断嵌套的用户系统,清零指令(CLR P1.0)可以插在中断种数比较多的那一级中的任一个中断子程序中,插有“喂狗”指令的那一级中断系统将会受到“看门狗”的保护,而另一级中断系统如果失效,“看门狗”是“无动于衷”的,这时只能尽量减少这种中断子程序的执行时间以减少受到干扰的可能性。如果二级中断嵌套系统者受到“看门狗”的保护,就必需设计一个非常复杂的“看门狗电路,其“喂狗”指令要由三部分来保证各个部分都能正常工作,需要说明的是,如果主程序运行一次的时间(包括可能被中断的时间)超过1.6秒,则要适当再插入一条SETB P1.0指令,而T0中断时间间隔是不能超过1.6秒的。

另外,为了消除可能的“喂狗”误动作,建议对所应用的用户程序进行彻底仔细的检查,以防程序错乱时生成多余的SETB P1.0(指令码 D290H)或者CLR P1.0(指令码 C290H)指令。利用通用编程软件(如EDIT)的查找功能可搜索用户程序在LST文件中的“90”字符串,就能方便地找到所有可能的非法“SETB P1.0或CLR P1.0”指令,然后用NOP指令将其分离开来就可以了。如
    ROM地址 指令码 源程序
    ……
    0306 C2 MOV A,#0C2H
    0308 901000 MOV DPTR,#1000H
    ……
    B4D290 CJNE A,#0D2H,STEP1
    ……
    0401 B4D290 CJNE A,#0D2H,STEP1
    0494 00 STEP1:NOP
    ……

可以修改为
    ……
    0306 74C2 MOV A,#0C2H
    0308 00 NOP
    0309 901000 MOV DPTR,#1000H
    ……
    0402 B4D291 CJNE A,#0D2H,STEP1
    0405 00 NOP
    ……
    0496 00 STEP1:NOP
    ……

其它情况下可以灵活处理,以使其消除以上两种可以出错的组合即可。

通过采取以上几种措施,对于没有二级中断嵌套的用户系统,能够绝对安全地受到监控而不会“死机”;对于有二级中断嵌套的用户系统,也可大大提高其可靠性。当然,一个单片机系统能够准确可靠地运行,除了不“死机”,还需保护数据免受干扰,这属于软件容错、数据冗余、系统重入等范畴,这里不作介绍。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

在现代电气和电子工程领域,分流器作为一种重要的电气元件,广泛应用于各种电路中。它不仅能够有效地将电流分配到不同的支路,还能实现电路的保护和测量功能。本文将详细介绍分流器的使用方法、应用场景以及实用技巧,帮助读者更好地理解...

关键字: 分流器 电气元件 电路

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机
关闭
关闭