//觀察喂狗與不喂狗的區(qū)別,使用PB口的LED指示燈做狀態(tài)指示。
//將PB口的LED指示燈使能開關(guān)切換到"ON"狀態(tài)。
#include
#define DISP_DDR DDRB
#define DISP_PORT PORTB
//看門狗WDT初始化程序
void wdt_init(void)
{
asm("wdr"); //clr wdt
WDTCR=0x0F; //enable wdt,clk = 2048,2.1S
}
void main(void)
{
uint8 i;
DISP_DDR = 0XFF;
wdt_init();
while(1)
{
DISP_PORT++; //數(shù)據(jù)顯示向上加,作AVR正常運(yùn)行的指示
asm("wdr"); //喂狗,去除此句將導(dǎo)致狗餓死,AVR復(fù)位
delay50ms(20);
}
}
void WDT_off(void)
{
asm("cli");
asm("wdr"); //復(fù)位看門狗,即喂狗
/* Clear WDRF in MCUSR */
MCUSR &= ~(1< /* 置位 WDTOE 和 WDE*/ WDTCR |= (1< /* 關(guān)閉 WDT */ WDTCR = 0x00; } void WATCHDOG_Feed() { asm("wdr"); //復(fù)位看門狗,即喂狗 } //在AVR的運(yùn)行程序中設(shè)置讓PB顯示端口自加。若AVR正常工作, //及時(shí)喂狗,則單片機(jī)設(shè)置的顯示端口正常自加。 //去除語(yǔ)句:asm("wdr");單片機(jī)不斷復(fù)位,程序得不到允許,自加數(shù)據(jù)沒(méi)有顯示往上加。 初始化,然后喂狗,喂狗要在看門狗咬人之前,(復(fù)位之前喂狗)
注:清狗指令不能放定時(shí)器中斷里,因此不管程序飛跑到哪里,
執(zhí)行哪里,中斷產(chǎn)生后都會(huì)執(zhí)行中斷函數(shù),
所以在定時(shí)器里的清狗指令會(huì)使WDT起不到作用(失效)。