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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren