Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.08.2007, 10:09
|
|
Прохожий
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
AT89S8253 проблема чтения из внутренней EEPROM
Пишу тут программку к одной железяке, обнаружил, что не удается прочитать за раз из 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=‹значение›, то естественно пишет это значение.
Кто, что думает по этому поводу, где косяки??
|
|
|
|
08.08.2007, 12:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Посомтрите на сайте keil.com - там огромная база ответов. А в примерах КЕЛА этого нету ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
08.08.2007, 14:45
|
|
Прохожий
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Посомтрите на сайте keil.com - там огромная база ответов. А в примерах КЕЛА этого нету ?
|
Я не видел там описания подобной проблемы...
|
|
|
|
09.08.2007, 07:25
|
|
Прописка
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Может собака порылась в том, что Cfc и Cfc_e это флоат (4 байта), и компилятор неадекватно их воспринимает? Если сделать тип char, то тоже глючит? Дизасемблер не пробовали смотреть?
Я кстати тоже попарился с eeprom в 89s8253, правда с записью, и через тип FAR... чертовщина какая то с этой МС...
|
|
|
|
09.08.2007, 07:43
|
|
Прописка
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Я имею в виду, что компилер как то не так воспринимает смесь ASM-a (EECON=EECON&!EELD_ и С (Cfc1=Cfc_e .
У них кстати это вот так сделано через FAR:
Код:
|
; Enable EEPROM
ORL WMCON,#EEMEN_
MOV DPL,R1
MOV DPH,R2
; LLDXPTR: Load DWORD in R4/R5/R6/R7 via Address given in R1/R2/R3
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
ANL WMCON,#NOT EEMEN_
RET |
|
|
|
|
09.08.2007, 13:08
|
|
Прохожий
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от stri
|
Может собака порылась в том, что Cfc и Cfc_e это флоат (4 байта), и компилятор неадекватно их воспринимает? Если сделать тип char, то тоже глючит? Дизасемблер не пробовали смотреть?
Я кстати тоже попарился с eeprom в 89s8253, правда с записью, и через тип FAR... чертовщина какая то с этой МС...
|
Если делаю тип char, то естественно обрезает дробную часть переменной Cfc;
Вот кусок листинга ответственного за чтение переменной из памяти, честно говоря слабо представляю что здесь написано...
38: Cfc1=Cfc_e;
C:0x00B9 900001 MOV DPTR,#Cfc_e(0x0001)
C:0x00BC E0 MOVX A,@DPTR
C:0x00BD FC MOV R4,A
C:0x00BE A3 INC DPTR
C:0x00BF E0 MOVX A,@DPTR
C:0x00C0 FD MOV R5,A
C:0x00C1 A3 INC DPTR
C:0x00C2 E0 MOVX A,@DPTR
C:0x00C3 FE MOV R6,A
C:0x00C4 A3 INC DPTR
C:0x00C5 E0 MOVX A,@DPTR
C:0x00C6 F50F MOV 0x0F,A
C:0x00C8 8E0E MOV 0x0E,R6
C:0x00CA 8D0D MOV 0x0D,R5
C:0x00CC 8C0C MOV Cfc1(0x0C),R4
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
FT232BM проблема с прошивкой EEPROM
|
zms2003 |
Микроконтроллеры, АЦП, память и т.д |
3 |
27.06.2008 07:18 |
Проблема с записью в EEPROM 24С16А по адресам свыше 255
|
Zemlyanov |
Микроконтроллеры, АЦП, память и т.д |
15 |
10.09.2007 18:20 |
Проблема с записью в EEPROM PIC
|
Tujman |
Микроконтроллеры, АЦП, память и т.д |
4 |
02.05.2007 22:32 |
Проблема с EEPROM в atmega32
|
tosha81k |
Микроконтроллеры, АЦП, память и т.д |
16 |
28.04.2007 07:04 |
проблема с записью в EEPROM
|
Zero |
Микроконтроллеры, АЦП, память и т.д |
0 |
26.04.2004 14:23 |
Часовой пояс GMT +4, время: 01:37.
|
|