Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

AT89S8253 проблема чтения из внутренней EEPROM

Непрочитано 08.08.2007, 10:09  
thunder367
Прохожий
 
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
thunder367 на пути к лучшему
По умолчанию 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=‹значение›, то естественно пишет это значение.

Кто, что думает по этому поводу, где косяки??
Реклама:
thunder367 вне форума  
Непрочитано 08.08.2007, 12:16  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Посомтрите на сайте keil.com - там огромная база ответов. А в примерах КЕЛА этого нету ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 08.08.2007, 14:45  
thunder367
Прохожий
 
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
thunder367 на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Посомтрите на сайте keil.com - там огромная база ответов. А в примерах КЕЛА этого нету ?
Я не видел там описания подобной проблемы...
thunder367 вне форума  
Непрочитано 09.08.2007, 07:25  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

Может собака порылась в том, что Cfc и Cfc_e это флоат (4 байта), и компилятор неадекватно их воспринимает? Если сделать тип char, то тоже глючит? Дизасемблер не пробовали смотреть?

Я кстати тоже попарился с eeprom в 89s8253, правда с записью, и через тип FAR... чертовщина какая то с этой МС...
stri вне форума  
Непрочитано 09.08.2007, 07:43  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

Я имею в виду, что компилер как то не так воспринимает смесь 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
stri вне форума  
Непрочитано 09.08.2007, 13:08  
thunder367
Прохожий
 
Регистрация: 08.08.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
thunder367 на пути к лучшему
По умолчанию

Сообщение от 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
thunder367 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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 15:23


Часовой пояс GMT +4, время: 03:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.