有的控制器的运行环境是很复杂的,比如可能突然来个电压,突然来个浪涌,周围存在的强电磁场也可能交替对控制器造成冲击,也有可能外部器件出现错误很久不响应,这样就有可能让单片机的程序跑飞,或者进入死循环出不来,那这就完蛋了。怎么办呢?
一个简单的办法就是使用单片机内部的看门狗。现实中的看门狗的话,你要是不定时喂狗,它就咬你,单片机里的看门狗的话,你要是不定时给看门狗计时器清零或者写入特定数据,它就让单片机复位。
看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。这是个很有用的功能,可以监测程序是否按照预订的顺序或者周期循环在运行,一旦出现异常就复位,可以防止单片机出现异常跑飞和死机等情况。另外,如果您需要开发定制,可联系网址:3w点yonko-tech点com 或者Q 2531二六三七26
1.看门狗有什么作用
用于防止程序跑飞,或者防止因为意外使程序进入死循环等。
2.看门狗怎么工作
当单片机看门狗运行时,假如在规定的溢出时间内给看门狗清零或者写入特殊指令(喂狗),那么程序正常按预设的逻辑和顺序运行,假如没有在规定时间给看门狗清零,那么单片机复位,程序从头开始运行。
3.怎么使用看门狗
以STC15单片机为例:
STC15单片机看门狗的使用重点就是操作看门狗寄存器WDT_CONTR。
看门狗的寄存器WDT_CONTR
寄存器WDT_CONTR是个8位的寄存器,各位的功能如下:
在使用看门狗时,EN_WDT、CLR_WDT、IDLE_WDT、PS2-PS0这几个二进制位是比较重要的,其中EN_WDT用于看门狗的启停控制,CLR_WDT用于看门狗计时器清零,IDLE_WDT用于设置单片机“空闲模式”时看门狗是否工作,PS2-PS0用于设置看门狗的溢出时间。
怎么计算看门狗的溢出时间
看门狗的溢出时间是个重要参数,因为你要在程序里小于这个时间喂狗,才不会导致单片机复位。
看门狗的溢出时间与系统晶振和分频系数有关系,部分晶振和分频值对应的溢出时间如下:
STC15单片机看门狗的使用步骤:
(1)根据程序循环周期、晶振,配置看门狗的分频系数(即设置WDT_CONTR的低3位B2、B1、B0),以确定看门狗的溢出时间(溢出时间见图 2),一般喂狗时间要远小于溢出时间最好。
(2)设置单片机在空闲模式时看门狗是否计数(即设置WDT_CONTR的B3位),这位0或者1其实没什么影响,毕竟在空闲模式很多功能都停了,看门狗再继续工作意义也不是很大。
(3)启动单片机的看门狗(即设置WDT_CONTR的B5位为1)。
(4)在程序里定时将单片机的看门狗计数值清零(喂狗)。假如超出溢出时间程序里没进行喂狗的话单片机将复位。
以上设置步骤,可用位运算指令对WDT_CONTR的某些位进行操作。
看门狗配置(第1-3步)也可以在STC下载软件里进行:
一个参考程序:
#include "STC15F2K60S2.h" //载入STC15单片机头文件
void main()//主程序
{
WDT_CONTR=0x36; //看门狗设置:0x36->二进制为0011 0110,表示打开看门狗,看门狗计时器清零,空闲模式不计数,分频系数128(在11.0592mhz下溢出时间约4.55s)
while(1)//循环程序
{
WDT_CONTR|=0x10;// 在主循环里喂狗(看门狗计时器清零),注意循环喂狗的周期不能超出看门狗溢出时间,否则复位
}
}
来解释一下以上程序的重点,程序中 “WDT_CONTR=0x36”的说明如下表:
程序中“WDT_CONTR|=0x10”表示对WDT_CONTR 的B4位与“1”或运算,即B4置1,表示看门狗计时器清零(喂狗),说明如下表:
“/”表示保持原来不变。
注意:
喂狗的方式有很多,可以主循环里喂狗,定时器里喂狗等,一般建议主循环里喂狗。要想看门狗正常工作,要正确估算程序运行时间,保证喂狗周期一般要远小于看门狗溢出时间,而且还得满足系统工作使用状况的要求。实在不行可以程序段里多处喂狗。
不同的单片机喂狗方式不一样,有的可能不是给看门狗定时器清零,有的是往指定寄存器写特殊数据,这需按其手册操作。
4.什么情况适合使用看门狗
(1)在现场环境干扰较大,容易导致单片机死机时;
(2)程序里使用了较多while, do……until等指令时等情况。
简单说,就是在单片机复位的情况下也对系统没什么影响的情况时,适合使用单片机看门狗。
5.什么情况使用看门狗要慎重
(1)重要的计时或计数情况。此时不太建议用看门狗,因为复位了,数据清零了,就没用了;
(2)使用了较多全局状态变量的时刻,如果复位会导致这些变量丢失会导致运行错误,则不建议随意使用看门狗。比如是一个加工工艺,需要一步一步按照流程来操作,此时就不能使用看门狗,因为一旦复位会导致工艺步骤丢失,会产生错误。
(3)其他不能随意复位的情况。
以上就是STC15单片机看门狗的使用要点,总之看门狗很有用,但是不能乱用,用好了可以增强系统的抗干扰能力,不至于导致系统失效,乱用的话,就嘿嘿了。