Пишу тут программку к одной железяке, обнаружил, что не удается прочитать за раз из EEPROM число типа float (пишу на Си, оболочка Keil). Подскажите пожалуйста, где проблема.
//===============================================================
include <reg8253.h>
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=<значение>, то естественно пишет это значение.
Кто, что думает по этому поводу, где косяки??
|