? Bits 2..0 – WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1, 和0

WDP2、WDP1 和WDP0 决定看门狗定时器的预分频器,如Table 22 所示。

如何复位ATmega128单片机的看门狗定时器

下面的例子分别用汇编和C 实现了关闭WDT 的操作。在此假定中断处于用户控制之下 (比如禁止全局中断) ,因而在执行下面程序时中断不会发生。

汇编代码例程WDT_off:

; 置位 WDCE 和 WDE

ldir16, (1《outWDTCR, r16

; 关闭WDT

ldir16, (0《outWDTCR, r16

ret

C 代码例程

voidWDT_off(void)

{

WDTCR = (1《

WDTCR = 0x00;

}

看门狗初始化程序

C 代码例程

voidWDT_Init(void)

{

_WDR();//reset watchdog timer

WDTCR |= (1《WDTCR = 0x0F;//enable watchdog timer andset timeout value 1.9 sencond

}

改变看门狗定时器配置的时间序列

改变配置的序列根据不同的安全级别略有不同。下面将逐一说明。

安全级别0

这个模式与ATmega103 的看门狗操作相兼容。看门狗的初始状态是禁止的,可以没有限制地通过置位WDE 来使能它,以及改变定时器溢出周期。禁止看门狗定时器时则需要遵 守有关WDE 的说明。

安全级别1

在这个模式下,看门狗定时器的初始状态是禁止的,可以没有限制地通过置位WDE 来使能它(例如:WDTCR|= (1《1. 在同一个指令内对WDCE 和WDE 写”1“,即使WDE 已经为“1“。

2. 在紧接的4 个时钟周期之内同时对WDE 写”0”,以及为WDP 写入合适的数据,而WDCE 则写“0”。

安全级别2

在这个模式下,看门狗定时器总是使能的, WDE 的读返回值为”1”。 改变定时器溢出周期需要执行一个特定的时间序列:

1. 在同一个指令内对WDCE和WDE写“1“。虽然WDE总是为置位状态,也必须写”1“以启动时序。

2. 在紧接的4 个时钟周期之内同时对WDCE 写“0”,以及为WDP 写入合适的数据。WDE 的数值可以任意。

二、看门狗AVR-GCC例程

头文件:#include ,包含看门狗复位命令 _WDR();

avr-libc 提供三个API 支持对器件内部Watchdog 的操作,它们分别是:

wdt_reset() // Watchdog 复位

wdt_enable(timeout) // Watchdog 使能

wdt_disable() // Watchdog 禁止

调用上述函数前要包含头文件 wdt.h ,wdt.h 中还定义Watchdog 定时器超时符号常量,它们用于为wdt_enable 函数提供timeout 值。符号常量分别如下:

符号常量值含意

WDTO_15MS Watchdog定时器15 毫秒超时