at89c5131A EEPROM

Gast #1050244
normalerweise geht das über den Befehl movx @dptr,a. Hast du allerdings 
ein serielles eeprom über iic oder spi dran, dann wird das ganze etwas 
schwieriger
Gast #1052755
ja ich will das interne eeprom programmieren
so wie du mir das aufgeschrieben hast kenn ich es auch hatt aber nicht 
funktioniert

weil wie gesagt es mus erst in das columnlarch geschrieben werden ist 
ein RAM und von da aus ins eeprom
Gast #1052778
habe das datenblatt jetzt nicht vorliegen, aber das klingt schon 
komisch.
normal wäre, wenn du das interne eeprom freischalten müsstest, über ein 
steuerbit im sfr
Gast #1052782
Also, in meinem Datenblatt steht drin, was zu tun ist:

10.2 Write Data in the Column Latches
Data is written by byte to the column latches as for an external RAM 
memory. Out of the 11
address bits of the data pointer, the 4 MSBs are used for page selection 
(row) and 7 are used for
byte selection. Between two EEPROM programming sessions, all the 
addresses in the column
latches must stay on the same page, meaning that the 4 MSB must not be 
changed.
The following procedure is used to write to the column latches:
• Set bit EEE of EECON register
• Load DPTR with the address to write
• Store A register with the data to be written
• Execute a MOVX @DPTR, A
• If needed, loop the three last instructions until the end of a 128 
bytes page

10.3 Programming
The EEPROM programming consists on the following actions:
• Writing one or more bytes of one page in the column latches. Normally, 
all bytes must belong
to the same page; if not, the first page address will be latched and the 
others discarded.
• Launching programming by writing the control sequence (52h followed by 
A2h) to the
EECON register.
• EEBUSY flag in EECON is then set by hardware to indicate that 
programming is in progress
and that the EEPROM segment is not available for reading.
• The end of programming is indicated by a hardware clear of the EEBUSY 
flag.

Ralf
Gast #1053089
Reicht Dir auch ne Routine in C? Hier mal ein Ausschnitt von meinen 
Projekten. Endlich jmd der sich auch noch an diesem sehr schönen 
Controller vergreift. Ich hab das übrigens nachher mit SDCC compiliert. 
Das ASM-Listing dazu kann ich Dir ggf. auch noch zukommen lassen wenn Du 
möchtest.

cu,
olly...

___________________________________________

Uchar EEPROM_rd(Uchar xdata *address)
{
  // Auf EEPROM umschalten, einzelnes Byte aus EEPROM lesen und im RAM 
(IDATA, nicht XDATA) lagern,
  // dann auf XDATA zurückschalten und von IDATA nach XDATA zurückgeben
  Uchar val;  // IDATA
  bit ea_save = EA;  // IDATA, Interrupts speichern
  EA = 0;  // Interrupts ausschalten
  EECON = 0x02;  // XDATA > EEPROM schalten
  val   = *address;  // EEPROM > IDATA lesen
  EECON = 0x00;  // EEPROM > XDATA schalten
  EA = ea_save;  // Interrupts wiederherstellen
  return (val);  // IDATA > XDATA zurückgeben
}

void EEPROM_wrt(Uchar xdata *address, Uchar val)
{
  int i;
  bit ea_save = EA;  // Interruptstatus zwischenspeichern
  EA = 0;  // und ausschalten
  WD_ACK();
  EECON = 0x02;  // auf EEPROM mappen
  *address = val;  // pointer auf EEPROM beschreiben
  EECON = 0x50;  // Schreibsequenz einleiten
  EECON = 0xA0;  // Schreibsequenz vollenden
  while (EECON & 0x01); // warten bis EEPROM zuende geschrieben wurde...
  for (i = 0; i < 500; i++);                      // Show-Effekt: 
Extra-Warteschleife um Schreibvorgang zu verlangsamen, nicht höher 
setzen weil HW-Watchdog sonst nicht bedient werden kann. Wenn das nicht 
drin ist, wird seltsamerweise auch nix gespeichert...
  EECON = 0x00;   // EEPROM > XDATA schalten
  EA = ea_save;   // Interruptstatus wiederherstellen
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.