首页天道酬勤看门狗定时器实验程序,看门狗定时器的特性

看门狗定时器实验程序,看门狗定时器的特性

张世龙 05-13 12:20 37次浏览

看门狗计时器(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(),并且不要喂狗。 
这样就实现了看门狗超时后,执行唤醒函数,而不是重启单片机。

void wdt_setup(int ii) { // ii为看门狗超时时间,支持以下数值: // 0=16毫秒, 1=32毫秒,2=64毫秒,3=128毫秒,4=250毫秒,5=500毫秒 // 6=1秒 ,7=2秒, 8=4秒, 9=8秒 byte bb; if (ii > 9 ) ii = 9; bb = ii & 7; if (ii > 7) bb |= (1 << 5); bb |= (1 << WDCE); //开始设置看门狗中断 MCUSR &= ~(1<<WDRF); //清除复位标志 WDTCSR |= (1<<WDCE) | (1<<WDE); //设置新的看门狗超时时间 WDTCSR = bb; //设置为定时中断而不是复位 WDTCSR |= _BV(WDIE); //别忘了设置【看门狗唤醒执行函数】} 123456789101112131415161718 123456789101112131415161718

看门狗唤醒执行函数:

ISR(WDT_vect){ //唤醒后执行的代码}
看门狗定时器程序,定时器定时时间怎么算 看门狗定时器的作用及原理,看门狗定时器的特性