我正在使用AVRASM编译器在Proteus 8中使用atmega16测试一些汇编代码,似乎WDR指令无法正常工作。
从数据表来看,WDR 必须重置看门狗计数器。所以如果我设置看门狗定时器在两秒重置MCU并执行WDR指令,那么看门狗定时器应该再给我两秒。
main:
cbi DDRD, 5
sbi PORTD, 5
ldi r17, 0b00001111
out WDTCR, r17
loop:
in r16, PIND
sbrs r16, 5
wdr
rjmp loop
但是在上面的代码中,似乎在通过向 PIND5 提供 0 来执行 WDR 后,看门狗定时器将永远不会再工作,因此我不会在 2 秒的 inetravls 处重置看门狗。 我还检查了 WDTCR 寄存器,执行 WDR 后它没有改变。