Я тестирую некоторый ассемблерный код с atmega16 в Proteus 8 с компилятором AVRASM, и кажется, что инструкция 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
Но в приведенном выше коде кажется, что послевыполнив WDR, предоставив PIND5 значение 0, сторожевой таймер больше никогда не сработает, и в результате я не получаю сброс сторожевого таймера в течение 2 секунд.Я также проверяю регистр WDTCR, и он не меняется после выполнения WDR.