Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: AT89S8252 vs EEPROM  (Прочитано 8622 раз)
0 Пользователей и 1 Гость смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 28-11-2003 13:04 » 

есть процессор Atmel AT89S8252 с 51-й архитектурой со внутренним EEPROM на 2Кб, вопрос - как правильно с этим EEPROM-ом общаться?

По документации надо выставлять флаги EEMEN и EEMWE в регистре WMCON (0x96) для чтения/записи соответственно. Тогда операции movx a,@dptr и movx @dptr,a работают не с внешней памятью, а со встроенным eeprom. Но тут я натолкнулся на такую неприятность - стоит во время записи сделать что-нибудь лишенее (по идее, никак не могущее влиять на запись) и результаты записи  в eeprom-е получаются просто непредсказуемые. Вот пример кода:
Код:
orl WMCON,#EEMEN
orl WMCON,#EEMWE
mov dptr,#0
movx a,@dptr
cjne a,#0aah,initEpromI
; дальше пропустим

;------------------------------------------
initEpromI{
mov a,#0aah
call wrEpromI
mov r3,#)mDStep-xEStep:
mov r0,#xEStep
wrkf{
clr a
mov @r0,a
call wrEpromI
inc r0
djnz r3,wrkf

; здесь опять пропустим

xrl WMCON,#EEMWE
xrl WMCON,#EEMEN
jmp   start

wrEpromI{
push b
mov b,a
nextWr{ movx @dptr,a
loop{ mov a,WMCON
anl a,#WDTRST
jz loop
movx a,@dptr
cjne a,b,wrErr
inc dptr
pop b
ret
wrErr{ mov a,b
jmp nextWr

start{

задачей этого отрывка является инициализация епром-а нового процессора. в результате в епром с адреса 0x0000 прошиваются следующие значения: 0xaa и 8 раз 0x00

приведенный выше кусок работает нормально, но (!) раньше вслед за меткой initEpromI: стояла команда orl WMCON,#EEMWE (т.е. просто излишняя команда, которая ни на что влиять не должна), а врезультате в епром-е оказывалось 0xaa 0xff и только после этого нули.

В чем тут загвоздка?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #1 : 28-11-2003 15:15 » 

little, по идее проблема не в EEPROM, а в твоих алгоритмах. т.к. первый байт, на который мог влиять дополнительный orl это 0xaa, который у тебя пишется.
Записан

Megabyte be with you!
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #2 : 29-11-2003 07:21 » new

Вообще-то да, но факт остается фактом - стоило мне убрать этот orl - и все заработало, как и ожидалось.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines