nun würd ich gern den speicher auslesen und übers UART senden.

da ich die werte in dieser form speichere

datum,zeit,var1,var2:

tt.mm.jj;hh:mm;1byte;1byte;
1) kann ich die werte auch wieder in dieser form auslesen

2) Angenommen ich habe 10 solcher datensätze auf dem eeprom gespeichert. nun unterbreche ich die stromzufuhr meiner schaltung, dann würde er doch wieder bei speicherstelle 0 beginnen und alles überschreiben. kann man das irgendwie verhindern?

Code:
 $regfile "m16def.dat"                                      ' use the byte lib since we do not need longs
$crystal = 20000000
$baud = 19200





 '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'config
'I²C
Config I2cdelay = 5                                         '
Config Sda = Portc.1
Config Scl = Portc.0

'Display Setup
Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Porta.7 , Rs = Porta.2       ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
Config Lcd = 20 * 4
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -





' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Subs
'Uhr
Declare Sub Gettime
Declare Sub Settime


'Speicher
Declare Sub Speichern
Declare Sub Lesen
Declare Sub Lösche
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -




' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Variablen und Konstanten
'Uhr
Dim S as byte, m as byte, h as byte ,d as byte
Dim Wm As Byte , Yd As Byte , Month As Byte

'Speicher
Const Ff = &H0D                                             'Steuerzeichen Formfeed
Const Lf = &H0A                                             'Steuerzeichen Linefeed
Const Pu = &H2E 'Punkt
Const Dp = &H3A 'Doppelpunkt
Const Le = &H20 'Leerzeichen
Const Ko = &H2C 'Komma
Const Adr = 162                                             'Adresse Eeprom
Dim Adrcount As Word                                        'Zähler Speicherplatz Eeprom
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dim Hi As Byte
Dim L As Byte

Adrcount = 0

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Uhr Variablen setzen
 S = 0
 m = 0
 h = 0
 d = 1
 Month = 1
 Wm = 1
 Yd = 1
 ddrd = &B00010000
 Cls
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

' Program start
Call Settime





Do
If Pind.2 = 1 Then
   Call Speichern
End If

If Pind.4 = 1 Then
   Call Lesen
End If
End


' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'subs
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sub Settime
 S = Makebcd(s)                                             'Sek
 M = Makebcd(m)                                             'Min
 H = Makebcd(h)                                             'Std
 D = Makebcd(d)                                             'Tag
 Month = Makebcd(month)                                     'Monat

 'Setzen der vorgebenen Werte

 I2cstart
 I2cwbyte &HA0                                              'Schreibmodus
 I2cwbyte 0                                                 'select control register
 I2cwbyte 8                                                 'set year and day bit for masking
 i2cstart
 I2cwbyte &HA0                                              'Schreibmodus
 I2cwbyte 2                                                 'Sekundenregister auswählen
 I2cwbyte S                                                 'Sek schreiben
 I2cwbyte M                                                 'min schreiben
 I2cwbyte H                                                 'std schreiben
 I2cwbyte D                                                 'tag schreiben
 I2cwbyte Month                                             'monat schreiben
 i2cstop
End Sub Settime

Sub Gettime
 'Aktuelle Werte auslesen

'---------------------- sekunden --------------------
 i2cstart
 I2cwbyte &HA0
 i2cwbyte 2  'Sek register auswählen
 i2cstart
 I2cwbyte &HA1
 i2crbyte s,nack  'lese sek
'---------------------- minuten --------------------
 i2cstart
 I2cwbyte &HA0
 i2cwbyte 3  'min register auswählen
 i2cstart
 I2cwbyte &HA1
 i2crbyte m,nack  'lese min
'---------------------- stunden --------------------
 i2cstart
 I2cwbyte &HA0
 i2cwbyte 4  'Std register auswählen
 i2cstart
 I2cwbyte &HA1
 i2crbyte h,nack  'lese std
'---------------------- tag --------------------
 i2cstart
 I2cwbyte &HA0
 i2cwbyte 5  'tag register auswählen
 i2cstart
 I2cwbyte &HA1
 i2crbyte yd,nack 'lese jahr und tag
'---------------------- wotag --------------------
 i2cstart
 I2cwbyte &HA0
 i2cwbyte 6  'mon register auswählen
 i2cstart
 I2cwbyte &HA1
 i2crbyte wm,nack 'lese wochentag und monat

 i2cstop
End Sub Gettime



Sub Speichern
Hi = High(adrcount)
L=AdrCount
I2cstart
I2cwbyte Adr
I2cwbyte H 'Speicherstelle im Eeprom
I2cwbyte L
I2cwbyte D
I2cwbyte Pu
I2cwbyte Month
I2cwbyte Le
I2cwbyte S
I2cwbyte Dp
I2cwbyte M
I2cwbyte Le
I2cwbyte FF
I2cwbyte LF 'damit ist die Formatierung auch im Eeprom
I2cstop

If Adrcount < &H07FF Then Adrcount = Adrcount + 10 Else Adrcount = 0
End Sub Speichern