Hallo zusammen!

Der Zähler zählt zwar in Abhängigkeit des Einganges. d.h. wenn Eingang da wird gezählt, wenn Eingang weg wird gestoppt usw.
Die Anzeige geht auch so einigermaßen.
Die Betriebsstunden werden im folgenden Format angezeigt:
h=0000:00 bis h=9999:59

Das Problem ist:
Wenn ich die Betriebsspannung kurz wegnehme oder einen Reset mache
ist alles wieder weg und er fängt mit den Betriebsstunden von vorne an.
Mit dem Fusebit habe ich rumgespielt und dachte jetzt gehts, aber das war nicht.
Das Fusebits steht so: "0:Preserve EEPROM when chip erase"

Immer bei Reset, Spannung Aus/Ein oder beim auslesen "EEPROM in Buffer" mit dem Bascomcompiler löscht er alles und fängt wieder von vorne an.
Was mach ich da falsch?

So hab ichs gemacht:

Code:
'///////////////////////////////////////////////////////////////////////////////
'// Stand: 22.02.2008
'// Name: "Betriebsstunden"
'///////////////////////////////////////////////////////////////////////////////
'// ATMEGA8- SelbstBauModul
' Funktion:
' Zählt die Betriebsstunden im Format: h=0000:00 bis 9999:59
'
'
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 14745600           'Externes Quarz   14,7456 Mhz
$baud = 9600

'-------------------------------------------------------------------------------
'/// Definitionen //////////////////////////////////////////////////////////////
'-------------------------------------------------------------------------------
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4
Config Lcdpin = Pin , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
Cursor Off Noblink
Cls

'/// UHRZEIT ///////////////////////////////////////////////////////////////////
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word

'/// Betriebstundenzähler //////////////////////////////////////////////////////
Dim M As Word
Dim H As Word
Dim S As Word

Dim M_eprom As Eram Word      'Zum abspeichern der Min ins Eprom
Dim H_eprom As Eram Word      'Zum Abspeichern der h ins Eprom

'/// Eingänge //////////////////////////////////////////////////////////////////
Config Pinb.0 = Input         ' Pin B.0 Switch 0
Config Pinb.1 = Input         ' Pin B.1 Switch 1

'/// Ausgänge //////////////////////////////////////////////////////////////////
Config Pinb.2 = Output        ' Pin B.2 als OUTPUT => da hängt das Relais+LED


'/// TIMER 1 vorbesetzen ///////////////////////////////////////////////////////
Config Timer1 = Timer , Prescale = 256
Const Startwert = 7936
On Timer1 Ontimer1            'Interrupt-Routine für Timer1-Overflow
Enable Timer1                 'Timer1-Overflow-Interrupt einschalten
Enable Interrupts             'Interrupts global zulassen

'Zum Test Betriebsstunden setzen
'S = 57
'H = 9998

'-------------------------------------------------------------------------------
'////////////////////////// HAUPTPROGRAMM //////////////////////////////////////
'-------------------------------------------------------------------------------
Main:
Do
 If Pinb.0 = 0 Then           'Motor= Ein => d.h. Zähler läuft
    Gosub Betr_h_motor        'Betriebs h Motor zählen
 End If

Loop
End

'-------------------------------------------------------------------------------
'/// Timer1 aufruf für Sekundentakt ////////////////////////////////////////////
'-------------------------------------------------------------------------------
Ontimer1:                     'Interrupt-Routine
 Timer1 = Startwert
  'Toggle Portb.2              'Relais und LED am Ausg D.2 im SekTakt
  Incr Sekunde
  Incr S
 If Sekunde = 60 Then
     Sekunde = 0
   Incr Minute                'Eine Minute ist um
   Incr M                     'Für Betriebsstunden min
 End If
 If Minute = 60 Then
     Minute = 0
   Incr Stunde
   Incr H                     'Für Betriebsstunden h
 End If
 If Stunde = 24 Then
     Stunde = 0
 End If
Return

'-------------------------------------------------------------------------------
'/// LCD Anzeige der Betriebsstunden und Minuten in Form "h=9999:59" ///////////
'-------------------------------------------------------------------------------
Betr_h_motor:
'Anzeige des "h="
 Locate 4 , 1
 Lcd "h="
 Waitms 100

'TRENNZEICHEN zwischen Stunden und Minuten
 Locate 4 , 7
 Lcd ":"
 Waitms 100

'M I N U T E N A N Z E I G E
'Bei 0...9 eine Null davorstellen 09
If S <= 9 Then
 Locate 4 , 8
 Lcd "0"
 Waitms 100
 Locate 4 , 9
 Lcd S
 Waitms 100
End If

If S > 9 Then
 Locate 4 , 8
 Lcd S
 Waitms 100
End If

'Stunden hochzählen wenn Sekunden >59 auf Null setzen
If S >= 59 Then
  S = 0
  H = H + 1
End If

'Stunden bei >9999h auf Null sezen
If H > 9999 Then
  H = 0
End If

' S T U N D E N A N Z E I G E
'Zwischen 0...9 drei Nullen davorstellen 0009
If H =< 9 Then
 Locate 4 , 3
 Lcd "000"
 Waitms 100
 Locate 4 , 6
 Lcd H
 Waitms 100
End If

'Zwischen 10...99 zwei Nullen davorstellen 0099
If H >= 10 And H <= 99 Then
 Locate 4 , 3
 Lcd "00"
 Waitms 100
 Locate 4 , 5
 Lcd H
 Waitms 100
End If

'Zwischen 100... 999 eine Null davorstellen 0999
If H >= 100 And H <= 999 Then
 Locate 4 , 3
 Lcd "0"
 Waitms 100
 Locate 4 , 4
 Lcd H
 Waitms 100
End If

'Zwischen 1000 ... 9999 direkt anzeigen
If H >= 1000 And H <= 9999 Then
 Locate 4 , 3
 Lcd H
 Waitms 100
End If

'Aktuellen Wert ins EEPROM speichern
Writeeeprom S , &H00          'Variable S auf Adresse 00 im EEPROM speichern
Writeeeprom H , &H10          'Variable H auf Adresse 00 im EEPROM speichern

Return