beautypg.com

Atmega4hvd/8hvd – Rainbow Electronics ATmega8HVD User Manual

Page 47

background image

47

8052B–AVR–09/08

ATmega4HVD/8HVD

Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or Black-out
condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not
set up to handle the Watchdog, this might lead to an eternal loop of timeout resets. To avoid
this situation, the application software should always clear the Watchdog System Reset Flag
(WDRF) and the WDE control bit in the initialisation routine, even if the Watchdog is not in use.

The following code example shows one assembly and one C function for changing the timeout
value of the Watchdog Timer.

Note:

1. See

”About Code Examples” on page 5

.

Note: The Watchdog Timer should be reset before any change of the WDP bits, since a
change in the WDP bits can result in a timeout when switching to a shorter timeout period.

Assembly Code Example

(1)

WDT_Prescaler_Change:

; Turn off global interrupt

cli

; Reset Watchdog Timer

wdr

; Start timed sequence

in

r16, WDTCSR

ori

r16, (1<

out

WDTCSR, r16

; -- Got four cycles to set the new values from here -

; Set new prescaler(timeout) value = 64K cycles (~0.5 s)

ldi

r16, (1<

out

WDTCSR, r16

; -- Finished setting new values, used 2 cycles -

; Turn on global interrupt

sei

ret

C Code Example

(1)

void WDT_Prescaler_Change(void)

{

__disable_interrupt();

__watchdog_reset();

/* Start timed equence */

WDTCSR |= (1<

/* Set new prescaler(timeout) value = 64K cycles (~0.5 s) */

WDTCSR = (1<

__enable_interrupt();

}