您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页AVR 看门狗使用

AVR 看门狗使用

来源:步遥情感网
    //观察喂狗与不喂狗的区别,使用PB口的LED指示灯做状态指示。
    //将PB口的LED指示灯使能开关切换到"ON"状态。
    #include <iom16v.h>

    #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++;    //数据显示向上加,作AVR正常运行的指示
            asm("wdr");    //喂狗,去除此句将导致狗饿死,AVR复位
            delay50ms(20);
        }
    }
    void WDT_off(void)
    {
        asm("cli");
        asm("wdr");   //复位看门狗,即喂狗
        /* Clear WDRF in MCUSR */
        MCUSR &= ~(1<<WDRF);
        /* 置位 WDTOE  和 WDE*/
        WDTCR |= (1<<WDTOE) | (1<<WDE);
        /* 关闭 WDT */
        WDTCR = 0x00;
    }
     void WATCHDOG_Feed()
     {
         asm("wdr");   //复位看门狗,即喂狗
     }
//在AVR的运行程序中设置让PB显示端口自加。若AVR正常工作,
//及时喂狗,则单片机设置的显示端口正常自加。
//去除语句:asm("wdr");单片机不断复位,程序得不到允许,自加数据没有显示往上加。

初始化,然后喂狗,喂狗要在看门狗咬人之前,(复位之前喂狗)
注:清狗指令不能放定时器中断里,因此不管程序飞跑到哪里,
执行哪里,中断产生后都会执行中断函数,
所以在定时器里的清狗指令会使WDT起不到作用(失效)。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务