AVR 看门狗定时器由独立的 1 Mhz 片内振荡器驱动。这是 VCC = 5V时的典型值。请参见特性 数据以了解其他VCC电平下的典型值。通过设置看门狗定时器的预分频器可以调节看门狗 复位的时间间隔,如 P40 Table 17 所示。看门狗复位指令 WDR 用来复位看门狗定时器。 此外,禁止看门狗定时器或发生复位时定时器也被复位。复位时间有 8 个选项。如果没有 及时复位定时器,一旦时间超过复位周期, ATmega32 就复位,并执行复位向量指向的 程序。具体的看门狗复位时序在 P38 有说明。
为了防止无意之间禁止看门狗定时器,在看门狗禁用后必须跟一个特定的修改序列。详见
看门狗定时器控制寄存器-WDTCR · Bits 7..5 – Res: 保留位 ATmega32 保留位,读操作返回值为零。 · Bit 4 – WDTOE: 看门狗修改使能 清零WDE 时必须置位WDTOE,否则不能禁止看门狗。一旦置位,硬件将在紧接的4 个时钟周期之后将其清零。请参考有关WDE 的说明来禁止看门狗。 · Bit 3 – WDE: 使能看门狗 WDE为"1"时,看门狗使能,否则看门狗将被禁止。只有在WDTOE为"1" 时WDE 才能清零。以下为关闭看门狗的步骤: 1. 在同一个指令内对WDTOE 和WDE 写"1",即使WDE 已经为"1" 2. 在紧接的4 个时钟周期之内对WDE 写"0" · Bits 2..0 – WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1 和 0 WDP2、WDP1 和WDP0 决定看门狗定时器的预分频器,如Table 17 所示。 下面的例子分别用汇编和C 语言实现了关闭WDT 的操作。在此假定中断处于用户控制之下 ( 比如禁止全局中断) ,因而在执行下面程序时中断不会发生。
汇编代码例程 WDT_off: ; 置位 WDTOE 和 WDE ldi r16, (1<<WDTOE)|(1<<WDE) out WDTCR, r16 ; 关闭WDT ldi r16, (0<<WDE) out WDTCR, r16 ret C 代码例程 void WDT_off(void) { /* WDT 复位*/ /* 置位 WDTOE 和 WDE*/ WDTCR = (1<<WDTOE) | (1<<WDE); /* 关闭WDT */ WDTCR = 0x00; } |