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); }
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
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.