STC单片机应用在看门狗程序中的解析是什么
扫描二维码
随时随地手机看文章
STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX232和一些廉价的元件就能写程序,可擦写10万次。因此是一款很好用的单片机。
在这里,简单说明一下其看门狗的使用。STC单片机的看门狗一旦启动,就不能停止,其看门狗溢出时间可以利用STC单片机用户手册计算,其简单举例如下:
#i nclude //STC单片机头文件
#define uint unsigned int
#define uchar unsigned char
sbit led=P1^0;
//=================================================================
// 函数名称 :void delay (uint us)
// 函数功能 :延时
// 入口参数 :us 延时时间的长短
// 出口参数 :无
//=================================================================
void delay (uint us)
{
while(us--);
}
main()
{
WDT_CONTR=0x3c; //启动看门狗
led=1; //点亮LED
delay(100);
led=0;
delay(100); //熄灭LED
while(1)
{
WDT_CONTR=0x3c; //喂狗,若屏蔽掉该位,则看门狗溢出后复位,LED灯不停闪烁
}
}
在工业控制/汽车电子/航空航天等需要高可靠行的系统中,为了防止“系统在异常情况下,受到干扰,MCU/CPU程序跑飞,导致系统长时间异常工作”,通常是引进看门狗,如果MCU/CPU不在规定的时间内按要求访问看门狗,就认为MCU/CPU处于异常状态,看门狗就会强迫MCU/CPU复位,使系统重新从头开始按规律执行用户程序。看门狗复位状态结束后,不影响特殊功能寄存器IAP_ONTR中SWBS/IAP_ONTR.6位的值,单片机根据复位前SWBS/IAP_ONTR.6的值选择是从用户应用程序区启动,还是从系统ISP监控程序区启动。如果看门狗复位前SWBS/IAP_ONTR.6的值为0,则看门口复位状态结束后单片机从系统ISP监控程序区启动。看门狗复位是热启动复位中的软复位之一。
工作原理:看门狗实际上是一个定时器或计数器,简称WDT。单片机运行工作中,看门狗会对单片机机器周期脉冲不停计数,当单片机程序陷入死循环时,单片机程序如果不能及时对看门狗的定时器复位,看门狗就会在其定时器计满溢出时产生一个复位信号,从而使系统重启。
看门狗应用时,首先确定看门狗计数器的位数,然后参考计数脉冲周期计算出看门狗计数溢出所需的时间T,喂狗程序 喂狗时间要小于T,这样隔一段时间喂一次狗,只要程序正常运行,看门狗定时器就不会溢出。一旦出现程序死循环故障,喂狗程序失败,不能对看门狗定时器及时清零,就会导致计时器溢出,重启系统。
对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的余量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。
(1)程序开始后,点亮发光二极管后延时一段时间熄灭,延时不能过长,若两次喂狗时间间程序运行时间大于看门狗溢出时间,看门狗将复位单片机,可调节这个时间,让看门狗是否复位。
(2)喂狗时使用和设定看门狗寄存器同样的语句,只要看门狗寄存器中CLR—WDT位置“1”,看门狗定时器重新计数,由硬件自动将其清零。
(3)演示为发光二极管亮后熄灭不会再亮,这说明程序没被复位,while循环中看门狗被正常喂狗,若将WDT_CONTR= 0x35;去掉程序将会不停复位,因为看门狗定时器溢出复位。
软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。