Code:
$regfile "m644pdef.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
$baud = 19200
Waitms 100
'kann nach Test entfernt werden ist nur für Prüfung ab wirklich hochgezählt wird
'muss dann auch aus [Temp_str] entfernt werden.
Dim Zeit As Byte
'### hier werden die Variablen für EEprom-Test festgelegt ##########
Dim Datum As String * 8
Dim Var1 As String * 5
Dim Var2 As String * 5
Dim Var3 As String * 5
Dim Var4 As String * 5
Dim Var5 As String * 5
'sind 33 Zeichen + 5x Simikolon = 38 (Test Zeit nochmals 2 Zeichen
'somit muss [Eram String * 41] sein. Immer um 1 größer.
'!!!! nur für Test !!!!!!!!!!!!!!!!!!!!!!!!
'wie du siehst müssen dein Variablen zum speichern in EEprom
'immer vom Typ String sein oder wie die Variable [Zeit]
'in [Temp_str] in ein str() eingebunden werden.
'Hinweis: Für Test einfach mal den Variablen-Inhalt ändern.
Datum = "07.11.13"
Var1 = "15:10"
Var2 = "1:20"
Var3 = "23:59"
Var4 = "1:10"
Var5 = "999.9"
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
‚in Echt kommen die „Var“ vom Empfänger(siehe Beschreibung Hardware)
Dim Tagz As Byte 'ist Tageszähler
Dim Tagzm As Byte
Dim C As Byte 'ist Zähler für EEprom-Speicherplatz schreiben
Dim Mess_eeprom_nr As Byte 'ist Start Adr. im Eeprom
'Abhängig vom verwendeten µC (Mess_eeprom_max = EEPROM / Eram String * 41)
'IC M644 wäre Mess_eeprom_max = 2000/41
'32 x alles speichern dann überschreiben. In Echt wären es die Tage
Const Mess_eeprom_max = 32 'wenn alles OK dann laut Formel ändern.
Tagzm = Mess_eeprom_max - 2 '2 Tage vor überschreiben dann LED-Anzeige
Dim Temp_str As String * 41
Dim Mess_eeprom(mess_eeprom_max) As Eram String * 41
'ist nach Spannungsausfall oder Reset der Zwischenspeicher
'und bleibt erhalten
Dim Temp_stralt As String * 41
'String x Max nach jedem Durchlauf erst 1 dann 2 usw.
'Erster Speicherbereich 1 bis 41 dann x2 somit 42 bis 83 bis Eeprom voll ca. bei 2000
'bei dein EEprom.
'+++++++++++++++++++++++++++++++++++++++++++++
'!!!!! ist nur für Test mit Taster also anpassen !!!!
Config Pinc.3 = Input 'Taster für EEprom schreiben
Portc.3 = 1 'Port auf H schalten
Taster_s Alias Pinc.3 'Taster ein Namen geben
Config Pinc.2 = Input 'Taster für EEprom lesen
Portc.2 = 1 'Port auf H schalten
Taster_l Alias Pinc.2 'Taster ein Namen geben
Config Portc.4 = Output
Eepvoll Alias Portc.4 'LED-Warnung für EEprom voll
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'wenn gewünscht alten Inhalt vom EEprom lesen nach Reset
'natürlich muss dann statt Print der String[Temp_str]
'wieder zerlegt werden wenn der letzte Wert in Variablen
'geschreiben werden soll.
For C = 1 To Mess_eeprom_max
Temp_stralt = Mess_eeprom(c)
Print "aus EEPROM lesen: " ; Temp_stralt
Next C
'muss nicht sein hat aber eine Kontrollfunktion(auslesen um Daten zu sichern)
'nach Reset LED-Ein wenn Neu gelesen dann Aus bis Speicher fast voll
Eepvoll = 1
Wait 1 'nur für Test
'**** hier in Echt in deiner Haupschleife einbinden
Do
Wait 1
Zeit = Zeit + 1 'nur für Test
'hier wird die Zeichenkette für EEprom in [Temp_str] geschrieben
'das [;] ist ein Trennzeichen für Excel. weiter Verarbeidungen
Temp_str = Str(zeit) + ";" + Datum + ";" + Var1 + ";" + Var2 + ";" + Var3 + ";" + Var4 + ";" + Var5
'speichert die Tagessumme in EEprom, wenn ????
' "Time$ >= "23:59:58" ' zum Beispiel eine paar Sekunden früher (Laufzeiten) ausprobieren
'oder [Date(dcf_day)] für Start nutzen wie schon hingewiesen. Alten Tag speichern
'[Date(dcf_day)] ist eine Bascom-Variable, somit muss du nicht erst Date$ zerlegen
' _day_alt <> _day Then in Eeprom schreiben.
'ist nach meiner Meinung besser da Laufzeit vernachlässigt werden kann.
If Taster_s = 0 Then 'dann ersetzen
Gosub Tagspeicher_schreiben
End If
'wenn Taste gedrückt lesen
If Taster_l = 0 Then
Gosub Tagspeicher_lesen
End If
Loop
End
'*****************************************************************
Tagspeicher_schreiben: ' Daten in EEprom schreiben
Incr Tagz 'Tagzähler hoch setzen
If Mess_eeprom_nr < Mess_eeprom_max Then
Incr Mess_eeprom_nr
End If
Mess_eeprom(mess_eeprom_nr) = Temp_str
Print "in EEPROM gespeichert " ; Temp_str 'für Test
'Warnung wenn Eeprom fast voll(wurde auf Max -2 eingestellt)
If Tagz >= Tagzm Then
Eepvoll = 1 'LED-Anzeige EIN Tageszähler
End If
'EEprom-Speicher voll?
'dann alte Werte verschieben damit neue Werte hinten angehängt werden können
If Mess_eeprom_nr >= Mess_eeprom_max Then
For C = 2 To Mess_eeprom_max
'Wert holen und einen Platz tiefer wieder speichern
Temp_str = Mess_eeprom(c)
Decr C
Mess_eeprom(c) = Temp_str
Incr C
Next C
End If
Return
'****************************************************************
Tagspeicher_lesen:
'***** EEprom Speicher printen wenn Taster= 0 ****
For C = 1 To Mess_eeprom_max
Temp_stralt = Mess_eeprom(c)
Print "aus EEPROM lesen: " ; Temp_stralt
Next C
'Speicherzähler im EEPROM zurücksetzen wir haben ja alles gelesen
Mess_eeprom_nr = 0
'Tageszähler zurücksetzen
Tagz = 0
Eepvoll = 0 'LED-Anzeige Aus
Zeit = 0 'nur für Test
Return
'==================================================================
Nur die kurzen Intervalle sind für mich nicht befriedigend.(Industriestandart sind 36 Tage) Knalle ich aber 8 ST24C128 am Bus kann ich mich ca. 112 Tage Zeit fürAuslesung lassen .
Lesezeichen