新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于AVR單片機的看門狗

        關于AVR單片機的看門狗

        作者: 時間:2016-11-28 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/201611/323038.htm

        理解它費了一點周折。

        使用它的復位MCU的功能實現LED的閃爍。

        準備工作是設定WDT的超時時間(如1s)

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

        (1)延時可以調用庫函數,還可以使用定時器;

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

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

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

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

        #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);//使能看門狗定時器,溢出時間設置為1秒
        wdt_reset(); //喂狗
        DelayMs(500); //延時500毫秒
        SET_LED;
        DelayMs(5000); //延時5秒,等待看門狗定時器溢出


        SET_LED;
        while(1)
        wdt_reset();
        }



        關鍵詞: AVR看門

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 会东县| 石棉县| 隆尧县| 灌阳县| 若尔盖县| 梁平县| 南阳市| 阳曲县| 金川县| 韶关市| 河西区| 茂名市| 米易县| 三明市| 横山县| 裕民县| 阳东县| 蓬溪县| 石河子市| 阳泉市| 新余市| 龙口市| 古田县| 龙岩市| 禹州市| 永新县| 江源县| 嘉义县| 和田市| 惠州市| 沐川县| 九江县| 武川县| 陇南市| 应城市| 东港市| 遵义市| 普兰店市| 肥东县| 亚东县| 灌云县|