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 > <basic> > ' Fertiges Program - einfach kopieren und Starten: > ' interner Watchdog von Jo nun in Basic verwenden: > ' die $Asm.... am Anfang definieren > ' dann im Programm ....WatchDog_Reset( )... einfügen > ' im unteren Programm wird nur bis 800ms angezeigt, dann erfolgt Reset > ' (USB Kabel abstecken sonst kein Neustart) > > '// Valid values for WatchDog_On > $Asm("tag_WDT_on") WatchDog_On(prescalar As Byte) > > '// Needs to be called before time which is defined > 'by WatchDog_On( prescalar) has run off. > 'void WatchDog_Reset > $Asm("tag_WDT_reset")WatchDog_Reset() > > '// Turn Watch Dog off > 'void WatchDog_Off > $Asm("tag_WDT_off")WatchDog_Off() > > Dim Laufvari As Integer > Dim Text(20) As Char > > Sub main() > LCD_Init() > LCD_Locate(1,1 ) > LCD_WriteText("Reset Start ") > AbsDelay(2000) > > WatchDog_On(6) 'Aktivieren ... > '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 > WatchDog_Reset( ) > > Do While (1) 'EndlosSchleife Start > WatchDog_Reset( ) > AbsDelay(400) > LCD_Locate(1,1 ) > LCD_WriteText("Vz 400ms ") > > > WatchDog_Reset( ) > AbsDelay(800) > LCD_Locate(1,1 ) > LCD_WriteText("Vz 800ms ") > > > WatchDog_Reset( ) > AbsDelay(1800) > LCD_Locate(1,1 ) > LCD_WriteText("Vz 1,8s " ) > > WatchDog_Reset( ) > AbsDelay(2200) > LCD_Locate(1,1 ) > LCD_WriteText("Vz 2,2s " ) > > End While 'Rücksprung zur Hauptprogrammschleife > End Sub > > /* unteres File als Watchdog.asm speichern und im Projekt hinzufügen > ; Achtung das Hochkomma bei "<<" entfernen (8x) > ;******************************************************************************* > ;* 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 > ;* Rev.1.1 29.12.2010 Joachim Kühnapfel (Jo) > ;* - WTD_off: rettrn und wiederherstellen von R16 und R17 wie im > ;* wie im Forum diskutiert / beschrieben > ;* - .ifdef tag_xxx / .endif hinzugefügt gemäß Vorgaben aus > ;* Beispiel der C-Control Hilfe > ;* - rename > ;* WDT_on -> WatchDog_On > ;* WDT_off -> WatchDog_Off > ;* WDT_reset -> WatchDog_Reset > ;* Rev.1.2 1-1-2011 Ernst H. bei ldi ... "<<" sonst falsche Darstellung.." entfernen! > ;* > ;************************************************************************ > > ;**** 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 > > .ifdef tag_WDT_reset > WatchDog_Reset: ; Reset Watchdog Timer > wdr > ret > .endif > > > .ifdef tag_WDT_on > WatchDog_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 ... das Hochkomma entfernen! > 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 > .endif > > > .ifdef tag_WDT_off > WatchDog_Off: > push R16 > push R17 > ; Disable Watchdog Timer > in r16, WDTCR ; get WDT control register > ori r16, (1"<<"WDCE)|(1"<<"WDE) ; enable write to WDT control register > out WDTCR, r16 ; write WDT control register > ldi r16, (0"<<"WDE) ; turn off WDE bit > out WDTCR, r16 ; write WDT control register > pop R17 > pop R16 > ret > .endif > > ;* End of Watchdog.asm -- Watchdog Timer Functions für ATmega128 > ;************************************************************************** > */ 'Ende Basic > </basic>