×
嵌入式 > 嵌入式开发 > 详情

这就是AVR的看门狗watchdogtimeout

发布时间:2020-07-31 发布时间:
|
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为低电平时,复位看门狗(喂狗)
}
}



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

热门文章 更多
艾默生CT变频器鞍钢集团应用案例集锦