昆明网站seo,手机网址是什么,上海第五届进博会,烟台软件优化网站建设Arduino - 看门狗定时器#xff08;WDT#xff1a;Watch Dog Timer#xff09;
参考 看门狗定时器#xff08;WDT#xff1a;Watch Dog Timer#xff09;实际上是一个计数器。 一般给看门狗一个大数#xff0c;程序开始运行后看门狗开始倒计数。 如果程序运行正常…Arduino - 看门狗定时器WDTWatch Dog Timer
参考 看门狗定时器WDTWatch Dog Timer实际上是一个计数器。 一般给看门狗一个大数程序开始运行后看门狗开始倒计数。 如果程序运行正常过一段时间CPU应该发出指令让看门狗复位令其重新开始倒计数。 如果看门狗计数减到0就认为程序没有正常工作因为没有及时复位就强制整个系统复位单片机重启。所以当你开启看门狗后需要在看门狗超时计数减到0前对其进行 喂狗复位操作否则看门狗会强制你的单片机重启从头运行程序。如果看门狗在休眠或空闲模式下超时器件将唤醒并从PWRSAV指令执行处继续执行代码同时“休眠”状态位RCON3或“空闲”状态位RCON2会置1表示器件之前处于省电模式。功能作用看门狗可以在你的程序陷入死循环的时候让单片机复位而不用整个系统断电从而保护你的硬件电路。使用看门狗需要引用头文件 【 avr/wdt.h 】在wdt.h中提供了3个看门狗API wdt_enable(timeout) //看门狗启动并设置超时时间 wdt_disable() //看门狗停止 wdt_reset() //看门狗复位喂狗wdt_enable(timeout) 中timeout为超时时间当超过这个时间后没有喂狗则单片机重启。 这个时间可使用如下常量 // 015(16)ms, 130(32)ms,260(64)ms,3120(128)ms,4250ms,5500ms // 61 sec,72 sec, 84 sec, 9 8sec 0、WDTO_15MS 看门狗定时器15ms超时 1、WDTO_30MS 看门狗定时器30ms超时 2、WDTO_60MS看门狗定时器60ms超时 3、WDTO_120MS 看门狗定时器120ms超时 4、WDTO_250MS 看门狗定时器250ms超时 5、WDTO_500MS 看门狗定时器500ms超时 6、WDTO_1S 看门狗定时器1S超时 7、WDTO_2S 看门狗定时器2S超时 8、WDTO_4S 看门狗定时器4S超时 9、WDTO_8S 看门狗定时器8S超时使用看门狗很简单只需要做下面三步即可 1、引用头文件 #include avr/wdt.h2、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();
} 其它应用 【利用看门狗进行休眠唤醒】 用下面的代码代替wdt_enable()并且不要喂狗。 这样就实现了看门狗超时后执行唤醒函数而不是重启单片机。void wdt_setup(int ii) {// ii为看门狗超时时间支持以下数值// 016毫秒, 132毫秒,264毫秒,3128毫秒,4250毫秒,5500毫秒// 61秒 ,72秒, 84秒, 98秒byte bb;if (ii 9 ) ii 9;bb ii 7;if (ii 7) bb | (1 5);bb | (1 WDCE);//开始设置看门狗中断 MCUSR ~(1WDRF); //清除复位标志WDTCSR | (1WDCE) | (1WDE);//设置新的看门狗超时时间WDTCSR bb;//设置为定时中断而不是复位WDTCSR | _BV(WDIE); //别忘了设置【看门狗唤醒执行函数】
}看门狗唤醒执行函数
ISR(WDT_vect){ //唤醒后执行的代码 }