EEPROM des AT89S8252 ansprechen

Gast #551405
Lesenswert?
• ▲
▼
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
Gast #551485
Lesenswert?
• ▲
▼
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 ;-))

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.