Суть проблемы:
устройство на контроллере AT89S8253, программа на СИ пишется в Keil`e
во внутренней EEPROM необходимо хранить информацию - при размещении в EEPROM (xdata) переменных типа char или int все ОК! а вот при попытке разместить переменную типа float полная засада

обявления
Код
sfr WMCON = 0x96; /* Watchdog and Memory Control Register */
#define EEMEN 0x08 /* Internal EEPROM Access Enable: 1=Enabled */
#define EEMWE 0x10 /* Internal EEPROM Write Enable: 1=Enabled */
#define EEMds 0xE7 /* 11100111b Internal EEPROM Access&Write Disable */
float xdata Test;
#define EEMEN 0x08 /* Internal EEPROM Access Enable: 1=Enabled */
#define EEMWE 0x10 /* Internal EEPROM Write Enable: 1=Enabled */
#define EEMds 0xE7 /* 11100111b Internal EEPROM Access&Write Disable */
float xdata Test;
запись (тупо, для примера)
Код
void WriteTest(void)
{
WMCON=WMCON|EEMEN;
WMCON=WMCON|EEMWE;
Test=1.1; //0.028941;
WMCON=WMCON&EEMds;
while (1) { if ((WMCON&0x2)==0x2) break; }
}
{
WMCON=WMCON|EEMEN;
WMCON=WMCON|EEMWE;
Test=1.1; //0.028941;
WMCON=WMCON&EEMds;
while (1) { if ((WMCON&0x2)==0x2) break; }
}
чтение
Код
float ReadTest(void)
{
float TempVariable;
WMCON=WMCON|EEMEN;
WMCON=WMCON|EEMWE;
TempVariable=Test;
WMCON=WMCON&EEMds;
while (1) { if ((WMCON&0x2)==0x2) break; }
return TempVariable;
}
{
float TempVariable;
WMCON=WMCON|EEMEN;
WMCON=WMCON|EEMWE;
TempVariable=Test;
WMCON=WMCON&EEMds;
while (1) { if ((WMCON&0x2)==0x2) break; }
return TempVariable;
}
в результате читаеся что угодно но только не то что записывалось