nun würd ich gern den speicher auslesen und übers UART senden.
da ich die werte in dieser form speichere
1) kann ich die werte auch wieder in dieser form auslesen
datum,zeit,var1,var2:
tt.mm.jj;hh:mm;1byte;1byte;
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
Lesezeichen