Hallo, bin Anfänger und versuche gerade mittels dem Flashboard von Elektor mir C mit Mikrocontrollern beizubringen. LEDs blinken und serielle Kommunikation funktionieren soweit. Jetzt möchte ich eine Variable im EEPROM speichern, die ich nach dem Einschalten wieder auslesen kann. z.B: Lies Variable z.B. 5 -> Blinke 5x -> schreibe 6 ins EEPROM Ich verwende den SDCC. Eine eeprom.h gibt es nicht. Habe in einem Forum gelesen, das Assembler-Code entsprechend angepasst werden muss. Dies überfordert meinen momentan noch geringe Kenntnisse. Gibt es hier nicht eine einfache Lösung? Danke Rüdiger
Rüdiger, das ist eigentlich im Datenblatt beschrieben. Wenn die entsprechenden BIT's gesetzt sind dann ist es wie ein Speicherzugriff im XRAM. An die folgende Funktion übergibst du die Adresse (wo soll gespeichert werden) sowie das entsprechende Datenwort (das was du Speichern willst).
1 | void SaveEeprom (unsigned int address, unsigned char Data) { |
2 | xdata unsigned char *XEEPData; |
3 | XEEPData = (xdata *) address; |
4 | WMCON |= WMCON_EEMEN; // Enable EEPROM |
5 | WMCON |= WMCON_EEMWE; // Enable Write EEPROM |
6 | *XEEPData = Data; // save Data |
7 | while (!(WMCON & WMCON_WDTRST)); // check busy Flag |
8 | WMCON &= 0x77; // disable EEPROM |
9 | }
|
Beim lesen siehts dann folgendermaßen aus:
1 | unsigned char ReadEeprom (unsigned int address) { |
2 | xdata unsigned char *XEEPData; |
3 | unsigned char Data; |
4 | XEEPData = (xdata *) address; |
5 | WMCON |= WMCON_EEMEN; // EEPROM Enable |
6 | Data = *XEEPData; // read Data |
7 | WMCON &= 0xF7; // disable MOVX EEPROM |
8 | return Data; |
9 | }
|
Also Adresse die Gelesen werden soll und du erhälts den Inhalt der Speicherzelle zurück. Das Ganze ist mit SDCC getestet, liegt also nicht am Compiler ;-))
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.