看门狗定时器实验程序,看门狗定时器的特性
看门狗计时器(wdt )实际上是计数器。 一般来说,看门狗被赋予很大的数量,当程序运行时,看门狗开始倒计时。 如果程序正常运行,则CPU必须在一段时间内重置看门狗,并发出指示重新开始倒计时。 看门狗计数减少到0后,认为程序不正常运行(因为不会立即重置),强制重置整个系统(单片机重新启动)。
所以,明亮的白猫戴上看门狗后,看门狗需要在超时(计数减少到0 )之前,将其喂狗)操作。 否则,看门狗会强制单片机重新启动,从头开始运行程序。
如果看门狗在休眠或空闲模式下超时,设备将唤醒并在执行PWRSAV指令后继续执行代码。 另一方面,“休眠”状态位“RCON3”或“空闲”状态位“RCON2”设置为1,表示设备以前处于省电模式。
功能:看门狗在你的程序陷入死循环的时候,可以在不关闭整个系统电源的情况下重置单片机,保护你的硬件电路。
使用看门狗需要参考头文件【avr/wdt.h】,wdt.h提供了三个看门狗API:wdt _ enable (time out ) /看门狗启动
在wdt_enable(timeout )中,timeout是超时时间,过了这个时间也不喂狗的话,单片机会重新启动。 该时间为:///0=15(16 ) ms、1=30 ) 32 ) ms、2=60 ) 64 ) ms、3=120 ) 128 ) ms、4=250ms、5=500ms //6=1 sec WDTO_30MS :看门狗计时器30ms超时2,WDTO_60MS :看门狗计时器60ms超时3,WDTO_120MS :看门狗计时器120ms超时4,wdto WDTO_1S :看门狗计时器1S超时7、WDTO_2S :看门狗计时器2S超时8、WDTO_4S :看门狗计时器4S超时9、WDTO_8S :看门狗计时器
使用
看门狗很简单,只需要做下面三步即可:1、引用头文件 #include avr/wdt.h
2、Setup函数中启动看门狗,并设置超时时间为两秒:wdt_enable(WDTO_2S);
3、Loop函数中喂狗,防止饿死(重启): wdt_reset();
代码如下:
#include <avr/wdt.h> int ledPin = 13;void setup() { pinMode(ledPin, OUTPUT); //启动看门狗,设置喂狗时间不能超过2秒 wdt_enable(WDTO_2S); } void loop() { digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); //喂狗。如果超过2S没有喂狗,则单片机重启。 //也就是说,如果本循环执行时间超过2S的话,单片机就会自动重启。 wdt_reset(); } 12345678910111213141516171819 12345678910111213141516171819 其它应用:
【利用看门狗进行休眠唤醒】
用下面的代码,代替wdt_enable(),并且不要喂狗。
这样就实现了看门狗超时后,执行唤醒函数,而不是重启单片机。
看门狗唤醒执行函数:
ISR(WDT_vect){ //唤醒后执行的代码}