新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 這就是AVR的看門狗watchdogtimeout

        這就是AVR的看門狗watchdogtimeout

        作者: 時間:2016-11-25 來源:網絡 收藏
        AVRATMEGA16的復位檢測和控制看門狗

        系統控制和復位
        復位來源的檢測
        JTAG復位指示
        看門狗復位指示
        BOD復位指示
        RESET引腳復位指示
        上電復位指示
        看門狗的控制

        出于簡化程序考慮,各種數據沒有對外輸出,學習時建議使用JTAG ICE硬件仿真器。
        熔絲位設置
        1 使能BOD功能 BODEN=0
        2 選擇BOD電平 BODLEVEL=1 2.7V(VCC=3V) (可選)
        BODLEVEL=0 4.0V(VCC=5V) (可選)
        */

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

        #include <avr/io.h>
        #include
        //時鐘定為內部RC 1MHz,F_CPU=1000000 也可以采用其他時鐘
        #include

        //管腳定義

        #define WDT_EN 7 //PA7 看門狗的喂狗控制引腳
        // 高電平,不喂狗
        // 低電平,喂狗

        #define LED_JT 4 //PA4 JTAG復位指示
        #define LED_WD 3 //PA3 看門狗復位指示
        #define LED_BO 2 //PA2 BOD復位指示
        #define LED_EXT 1 //PA1 RESET引腳復位指示
        #define LED_PO 0 //PA0 上電復位指示
        //以上信號皆為低電平有效


        int main(void)
        {
        unsigned char CPU_STATUS;
        unsigned char i;
        //上電默認DDRx=0x00,PORTx=0x00 輸入,無上拉電阻
        PORTB =0xFF; //不用的管腳使能內部上拉電阻。
        PORTC =0xFF;
        PORTD =0xFF;
        PORTA =0xFF;
        DDRA =(1<

        CPU_STATUS =MCUCSR; //讀取MCU控制和狀態寄存器
        //可以在JTAG調試時直接觀察 MCUCSR的狀態。
        CPU_STATUS&=0x1F;
        switch (CPU_STATUS)
        {
        case (1< //JTAG引起的復位?
        PORTA&=~(1< break;
        case (1< //看門狗引起的復位?
        PORTA&=~(1< break;
        case (1< //BOD引起的復位?
        PORTA&=~(1< break;
        case (1< //RESET引腳引起的復位?
        PORTA&=~(1< break;
        case (1< //上電引起的復位?
        PORTA&=~(1< break;
        default: //多種復位同時發生?
        PORTA=~CPU_STATUS;
        break;
        }
        MCUCSR=0x00; //清除標志位

        for(i=0;i<200;i++)
        _delay_ms(10); //延時2秒
        wdt_enable(WDTO_2S); //使能看門狗,溢出時間為2秒左右
        while(1)
        {
        if (!(PINA&(1< wdt_reset(); //如果PA7為低電平時,復位看門狗(喂狗)
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 紫云| 娄底市| 乌恰县| 大庆市| 桑植县| 东乡县| 贵阳市| 浦江县| 武鸣县| 丰宁| 六安市| 台中市| 榆社县| 襄垣县| 辽阳县| 调兵山市| 桦甸市| 江华| 延川县| 江津市| 石首市| 东阳市| 木里| 马尔康县| 连城县| 陇南市| 常宁市| 罗山县| 阿鲁科尔沁旗| 湖北省| 米泉市| 长顺县| 乐清市| 大名县| 唐河县| 通海县| 南宫市| 林口县| 长乐市| 十堰市| 冷水江市|