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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 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 14:23


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot