Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Hier die Routinen für den Watchdog: > zuerst das File Watchdog.h welches im C-Program mit #include eingefügt wird: > > /******************************************************************************* > * File: Watchdog.h > * Author : M. Benninger > * Ident : Rev 1 30-DEC-2008 > * Function: Definitionen for Watchdog System for ATmega128 > * History : Rev 1 30-DEC-2008 M. Benninger > * - first implementation > ******************************************************************************/ > #ifndef _WATCHDOG_H_ > #define _WATCHDOG_H_ > > /****************************************************************************** > * Prescalar Values > */ > > #define WDT_15MS 0 > #define WDT_30MS 1 > #define WDT_60MS 2 > #define WDT_120MS 3 > #define WDT_240MS 4 > #define WDT_500MS 5 > #define WDT_1SEC 6 > #define WDT_2SEC 7 > > /****************************************************************************** > * Function Prototypes > */ > > void WDT_reset $asm("WDT_reset")(void); > void WDT_off $asm("WDT_off")(void); > void WDT_on $asm("WDT_on")(byte prescalar); > > #endif // _DCF_H_ > > /* End of Watchdog.h -- Definitionen for Watchdog System for ATmega128 > ******************************************************************************/ > > und nun das File Watchdog.asm > ;******************************************************************************* > ;* File: Watchdog.asm > ;* Author : M. Benninger > ;* Ident : Rev 1 30-DEC-2008 > ;* Function: Watchdog Timer Functions > ;* This module implements three functions: > ;* WDT_on (prescalar), WDT_off () and WDT_reset () > ;* The parameter prescalar determine the Watchdog Timer prescaling > ;* when the Watchdog Timer is enabled. The different prescaling values > ;* and their corresponding Timeout Periods are shown below: > ;* Prescalar Typical Timeout Value > ;* 0 15 ms > ;* 1 30 ms > ;* 2 60 ms > ;* 3 120 ms > ;* 4 240 ms > ;* 5 0.5 sec > ;* 6 1.0 sec > ;* 7 2.0 sec > ;* > ;* Library: none > ;* > ;* History : Rev 1 30-DEC-2008 M. Benninger > ;* - first implementation > ;******************************************************************************* > > ;**** Watchdog Timer Definitions **** > > .equ WDTCR = $21 ; Watchdog Timer Control Register > .equ WDCE = 4 ; WDT Change Enable bit > .equ WDE = 3 ; WDT Enable bit > .equ WDPM = 7 ; WDT Prescalar mask > > WDT_reset: ; Reset Watchdog Timer > wdr > ret > > WDT_on: ; Enable Watchdog Timer > movw r26, r6 ; r7:r6 points to ret_addr > adiw r26, 4 ; X now points to prescalar parameter > ld r16, x ; get prescalar parameter > andi r16, WDPM ; and mask lower 3 bits > ori r16, (1<<WDE) ; turn on WDE bit > ldi r17, (1<<WDCE)|(1<<WDE) ; Write logical one to WDCE and WDE > out WDTCR, r17 ; enable write to WDT control register > out WDTCR, r16 ; write WDT control register > ret > > WDT_off: ; Disable Watchdog Timer > in r16, WDTCR ; get WDT control register > ori r16, (1<<WDCE)|(1<<WDE) ; Write logical one to WDCE and WDE > out WDTCR, r16 ; enable write to WDT control register > ldi r16, (0<<WDE) ; turn off WDE bit > out WDTCR, r16 ; write WDT control register > ret > > ;* End of Watchdog.asm -- Watchdog Timer Functions für ATmega128 > ;******************************************************************************/ > > Ich wünsche allen eine gutes, erfolgreiches neues Jahr. > > Martin Benninger