新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 關(guān)于AVR單片機(jī)的看門狗

關(guān)于AVR單片機(jī)的看門狗

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

看門狗這個東西以前沒接觸過……

本文引用地址:http://butianyuan.cn/article/201611/323038.htm

理解它費(fèi)了一點(diǎn)周折。

使用它的復(fù)位MCU的功能實(shí)現(xiàn)LED的閃爍。

準(zhǔn)備工作是設(shè)定WDT的超時時間(如1s)

首先使能看門狗(wdt_enable),然后喂狗(wdt_reset),再延時燈的閃爍時間(delay=0.5s),使燈亮(SET_LED);再用一個恰當(dāng)?shù)谋容^長的延時(delay>0.5s)餓死狗。之后MCU重啟,如此往復(fù)。

(1)延時可以調(diào)用庫函數(shù),還可以使用定時器;

(2)SET_LED; while(1) wdt_reset(); 表示 不斷喂狗,從而不讓MCU重啟,使燈一直亮著。程序中使用這些代碼的用途待考證,可以給作者發(fā)email 嘿嘿~

(3)軟件看門狗和硬件看門狗。軟件看門狗可以用wdt_disable來禁掉。而硬件看門狗不能。AVR可以通過修改熔絲位來分別實(shí)現(xiàn)軟硬看門狗。

(4)wdt_enable(timeout)的參數(shù)timeout表示看門狗的超時時間,即timeout時間內(nèi)不喂狗,狗就會叫,mcu就會復(fù)位。

=================================================================================================

#include
#include
#include

#define uchar unsigned char
#define uint unsigned int
#define SET_LED PORTA&=0XFE //PA0輸出低電平,黃燈亮
#define CLR_LED PORTA|=0X01 //PA0輸出高電平,黃燈滅

void DelayMs(uint ms)
{
uint i;
for(i=0;i
_delay_loop_2(2000); // 8MHz / 1000Hz=8000
//8000 / 4 = 2000
}

int main(void)
{
DDRA=_BV(PA0);
PORTA=_BV(PA0);

wdt_enable(WDTO_1S);//使能看門狗定時器,溢出時間設(shè)置為1秒
wdt_reset(); //喂狗
DelayMs(500); //延時500毫秒
SET_LED;
DelayMs(5000); //延時5秒,等待看門狗定時器溢出


SET_LED;
while(1)
wdt_reset();
}



關(guān)鍵詞: AVR看門

評論


技術(shù)專區(qū)

關(guān)閉