www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schreiben in EEPROM eines AT89C51ED2


Autor: Marko Wagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
was mach ich falsch? Ich versuche zwei Bytes ins EEPROM eines AT89C51ED2 
zu schreiben. Ich benutze Keil µVision 3 und schreibe meinen Quellcode 
in C.
Laut Datenblatt muss ich zum Schreiben warten bis EEBusy cleared. Dann 
disable ich alle Intterupts und setze EECON=02h. Dann kommt der 
ineressante Teil. In Assembler: DPTR=Adresse;ACC=Data;MOVX@DPTR,A;
Danach dann EECON=00h und Enable all Interrupts. Hab ich den 
Assembler-Code richtig in C übersetzt?
Hier mein C-Code:


// eeprom-variables at memory-addresses
unsigned char xdata *xdata p_eeprom_coldsite_adjust_lowbyte at 0x0000;
unsigned char xdata *xdata p_eeprom_coldsite_adjust_highbyte _ at 
0x0002;


/* write coldsite temperature adjust value to eeprom */
void v_eeprom_write_cold_site_adjust(unsigned short adjust_temp_write){
  xdata unsigned char dummy1,dummy2=0;

  dummy1=(adjust_temp_write & 0x00FF);
    dummy2=((adjust_temp_write>>8)&0x00FF);

   //write data to eeprom
    while((EECON & 0x01)==1); // wait while EEBUSY
   EA = 0;        // disable all interrupts
    EECON = 0x02;      // Set EE bit of EECON
    *p_eeprom_coldsite_adjust_lowbyte = dummy1;
    EECON = 0x00;
   EA = 1;        // enable all interrupts

  for(i=0;i<100;i++);

  while((EECON & 0x01)==1); //wait while EEBUSY
   EA = 0;        // disable all interrupts
    EECON = 0x02;      // Set EE bit of EECON
    *p_eeprom_coldsite_adjust_highbyte = dummy2;
    EECON = 0x00;
    EA = 1;
}

Das Lesen scheint zu funktionieren, da ich immer 0xFF und 0xFF in dummy3 
und dummy4 bekomme, welches ja der Default-Wert eines EEPROMs ist.

/* load coldsite temperature adjust value from eeprom */
unsigned short us_eeprom_load_cold_site_adjust(void){
  xdata unsigned short adjust_temp_load=0;
  xdata unsigned char dummy3,dummy4=0;

   //load data from eeprom
  while((EECON & 0x01)==1); //wait while EEBUSY
   EA = 0;
    EECON = 0x02; //EEE
  dummy3 = *p_eeprom_coldsite_adjust_lowbyte;
  dummy4 = *p_eeprom_coldsite_adjust_highbyte;
    EECON = 0x00;
  EA = 1;

    adjust_temp_load = ((dummy4<<8) & 0xFF00);
    adjust_temp_load = (adjust_temp_load|dummy3);
    return(adjust_temp_load);
}

Autor: Marko Wagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau ist casten?

Autor: Ralf (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Casten bedeutet, einen Datentyp zwingend in einen anderen zu wandeln, 
selbst wenn der Wert eigentlich nicht in den neuen Datentyp reinpasst.

Bzgl. deines EEPROM Problems - guckst du in den Anhang.

Ralf

Autor: Marko Wagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt - Super - Danke vielmals

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.