Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Я ж говорил проыеряйте что в адресном регистре при вызове П/П записи (+) (да, и еще интересно зачем адрес паркуете (причем в ту же ячейку где лежат данные "0")??)

Отправлено Assm 04 июля 2007 г. 14:16
В ответ на: косяк в записи, епром чиста ...в FF вся отправлено Aleksey75 04 июля 2007 г. 14:05

Зачем адрес через метку и ДВ передаете, гораздо проще на мой взгляд так:
1) #define имя_переменной_в_ЕЕПРОМ 0x00 ; это где нибудь в деф-файле проекта
2) LDX имя_переменной_в_ЕЕПРОМ
ldi TMP,DATA ; ну или запихать данные из ОЗУ
call UpdateEEPROM ; это у меня так процедура записи
обзывается (она еще предварительно проверяет данные в адресуемой ячейке - вдруг они такиеже )

Ну и подобным образом далее.
моя процедура записи ниже:

WR_EEPROM:

#message "----------------------------------------------------------------------------------------------------"
#warning "This procedure must be verify FLASH self-programming complete flag, and so on.. It is uncompletely!"
#message "----------------------------------------------------------------------------------------------------"

rcall Wait_If_EEPROM_BUSY;Ждем, если EEPROM занят (заодно и сбросим WDT).
;
out EEARL,XL ;Установим адрес
out EEARH,XH ;--//--
;
in XL,SREG
cli ;Теперь запретим прерывания на время записи.
; ф.I восстановится при восстановлении SREG.
mov XH,TMP ;Запомним записываемые данные.
out EEDR,TMP ;Помещаем данные в EEDR
ldi TMP,0b00000100 ;приготовимся к записи
out EECR,TMP
ldi TMP,0b00000110 ;Начинаем запись
out EECR,TMP
;
mov TMP,XH ;Вспомним записываемые данные.
out SREG,XL ;Восстановим статус прерываний.
;
in XL,EEARL ;Восстановим адрес
in XH,EEARH ;--//--
;
ret
;============================================================================
;-- Проверка: не занят ли блок EEPROM предыдущей операцией чтения/записи
Wait_If_EEPROM_BUSY:
wdr ;Сброс "собаки" в паузе ожидания (на всякий случай).
sbic EECR,EERE ;Ждем, если EEPROM, занят на чтение.
rjmp Wait_If_EEPROM_BUSY
sbic EECR,EEWE ;Ждем, если EEPROM, занят на запись.
rjmp Wait_If_EEPROM_BUSY
ret
;============================================================================

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
прибавьте тройку к двум:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru