#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void WDT_init(
void)
{
asm(
"wdr");
WDTCR =
0x0F;
}
void WDT_off(
void)
{
WDR();
WDTCR| = (
1<<WDTOE)|(
1<<WDE);
WDTCR =
0x00;
}
void main(
void)
{
uint i=
0;
DDRB =
0xff;
PORTB =
0xff;
WDT_init()
while(
1)
{
for(i=
0;i<
8;i++)
{
PORTB = ~BIT(i);
delay(
100);
}
WDT_off();
}
}
comments: 1、观察喂狗与不喂狗的区别,使用PB口的LED指示灯做状态指示。 2、养看门狗的用意,在于用它监控系统:在程序本该运行的地方喂狗, 如果程序卡死或跑飞,将不会运行到那,那样狗没有被喂到,饿死了, 控制器复位,得以重启从而进行控制。 3、本实验演示功能:养一只AVR内部看门狗,及时喂狗,狗不饿死, 单片机不复位;不及时喂狗,狗饿死了,单片机就复位。 4、本实验的程序设计较为简单,旨在给出养狗、喂狗,不让狗饿死的简单示例。 WDT看门狗说明: 看门狗定时器由独立的1Mhz片内振荡器驱动。这是 VCC = 5V 时的典型值.通过设置看 位看门狗定时器。此外,禁止看门狗定时器或发生复位时定时器也被复位。复位时间有 8 个选项。如果没有及时复位定时器,一旦时间超过复位周期,ATmega16就复位,并执行复位向量指向的程序。
转载请注明原文地址: https://ju.6miu.com/read-39375.html