Пишу тут программку к одной железяке, обнаружил, что не удается прочитать за раз из EEPROM число типа float (пишу на Си, оболочка Keil). Подскажите пожалуйста, где проблема.
//===============================================================
include xdata float Cfc_e _at_ 0x001; // Инициализация переменных EEPROM
xdata float temp _at_ 0x005;
float Cfc,Cfc1; // Переменные ОЗУ
//================================================================
void Eeprom_w (float *Var_w, float *Data_w);
void Eeprom_w (float *Var_w, float *Data_w)
{
EECON=EECON|EEMEN_; // Разрешаем работу с EEPROM
EECON=EECON|EEMWE_; // Разрешаем запись в EEPROM
EECON=EECON|EELD_; // Запись страничная по 4 байта
*Var_w=*Data_w;
while (!(EECON & RDY_))
{}
EECON=EECON&!EELD_; // Выключаем запись страницы
EECON=EECON&!EEMWE_; // Выключаем запись EEPROM
EECON=EECON&!EEMEN_; // Запрещаем работу с памятью
return;
}
//===================================================================
void main (void)
{
Cfc=2.94;
Eeprom_w(&Cfc_e,&Cfc); // Присвоение и запись константы
EECON=EECON|EEMEN_; // Разрешение работы с памятью
EECON=EECON|EELD_; // Разрешение чтения
Cfc1=Cfc_e; // Чтение
EECON=EECON&!EELD_; // Запрещение чтения
EECON=EECON&!EEMEN_; // Запрещение работы с памятью
Eeprom_w(&temp,&Cfc1); // Запись прочитанного в другое место
while(1)
{}
}
//===============================================================
Небольшие коментарии к программе:
- функция записи работает нормально (читал EEPROM программатором и видел 4 записанных байта)
- при записи второй раз (прочитанная переменная) - пишет мусор, если задаю явно Cfc1=<значение>, то естественно пишет это значение.
Кто, что думает по этому поводу, где косяки??