微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 这就是AVR的看门狗watchdogtimeout

这就是AVR的看门狗watchdogtimeout

时间: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) (可选)
*/

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top