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.