×
单片机 > 单片机程序设计 > 详情

这就是AVR的看门狗watchdogtimeout

发布时间:2020-06-22 发布时间:
|
AVRATMEGA16的复位检测和控制看门狗

   系统控制和复位
   复位来源的检测
    JTAG复位指示
    看门狗复位指示
    BOD复位指示
    RESET引脚复位指示
    上电复位指示
   看门狗的控制

出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器。
熔丝位设置
1 使能BOD功能 BODEN=0
2 选择BOD电平 BODLEVEL=1 2.7V(VCC=3V) (可选)
    BODLEVEL=0 4.0V(VCC=5V) (可选)
*/

#include
#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为低电平时,复位看门狗(喂狗)
    }
}

关键字:AVR  看门狗  watchdogtimeout 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式