fl
"РЛ" - НАЧИНАЮЩИМ
и
С точки зрения программы эта область памяти “выгля-
дит” как внешнее ОЗУ, т.е. обращение к ней происходит
при помощи команд МОУХ. Снова получается, что одна и
та же команда выполняет обращения в два разных места,
поэтому используется специальный флаг-переключатель
ЕЕМЕЫ в регистре \Л/МСОЫ, который мы рассматривали
ранее. Если ЕЕМЕЫ=
1
, то команда МОУХ работает с об-
ластью ЕЕРЯОМ, а при ЕЕМЕЫ=0 происходит обращение
к внешнему ОЗУ. Таким образом, перед любым обраще-
нием к ЕЕРЯОМ надо установить флаг ЕЕМЕЫ.
Чтение данных из ЕЕРЯОМ осуществляется точно так
же, как и из любой другой ячейки ОЗУ. При записи же
ситуация иная. Во-первых, предварительно необходимо
разрешить запись в ЕЕРЯОМ установкой флага ЕЕМ\№Е
(который надо снова сбросить после успешной записи).
А во-вторых, при записи во Р1азИ-ячейку памяти снача-
ла производится цикл ее стирания, а затем уже цикл за-
писи, причем оба этих процесса длятся по микроконт-
роллерным меркам ужасно долго - в сумме не менее
2,5 миллисекунд! Поэтому при исполнении команды МОУХ,
осуществляющей запись в ЕЕРЯОМ, данные фактически
быстро копируются в промежуточный “невидимый” регистр,
откуда затем медленно копируются во. Flash.
Пока цикл
записи не завершился, обращение для записи к ЕЕРЯОМ
недопустимо!
Узнать об окончании цикла записи можно
двумя способами: считать значение бита RDY/BSY ре-
гистра WMCON (помните, тот самый бит, запись которое
го сбрасывает WDT?) или произвести
считывание байта
по только что записанному адресу.
Пока RDY/BSY=0 -
длится цикл записи и работа с ЕЕРЯОМ невозможна. А
при втором способе в течение всего цикла записи в счи-
танном значении байта младший бит будет инверсным
по отношению к тому, что должен быть на самом деле.
Вот примеры подпрограмм, осуществляющих запись
байта в ЕЕРЯОМ из аккумулятора по адресу в DPTR. Пер-
вый вариант сначала дожидается завершения возмож-
ной предыдущей записи, затем записывает байт и немед-
ленно завершает свою работу, а вторая - наоборот, сра-
зу же записывает байт, а затем ждет завершения цикла
записи, после чего завершает работу.
WrEEPROM_l:
; способ проверки флага RDY/BSY
RDY
EQU
00000010
b
MOV
B, A
WaitReady:
MOV
A, WMCON
ANL
A, #RDY
JZ
WaitReady
ORL
WMCON, #000ii000b
MOV
A, В
MOVX
0DPTR, A
ANL
WMCON, # iii0 0 U lb
RET
WriteEEPROM_2:
; способ проверки младшего бита
ORL
WMCON, #00011000b
MOVX
0DPTR, A
MOV
B, A
ANL
WMCON, # i i i 0 m i b
WaitReady:
MOVX
A, 0DPTR
XRL
A, В
JNZ
WaitReady
ANL
WMCON, # i l l i 0 m b
RET
; маска флага ШЛГ/ВЭТ
; временно сохраним байт
; получим значение ШСОЫ
; проверим состояние флага по маске
; ждем, пока флаг установится
; установим флаги ЕЕМИЕ и ЕЕМЕЫ
;
восстановим нужный байт
; выполняем запись
; сбросим флаги ЕЕЫМЕ и ЕЕМГО
; конец
; установим флаги ЕЕШБ и ЕЕМЕЫ
; выполняем запись
;
запоминаем "правильное" значение
; сбросим флаг ЕЕЫМЕ
; считываем только что записанное
; проверяем на равенство значений
; если не равны - ждем
; сбросим флаг ЕЕМЕЫ
; конец
Лично мне более по душе первый вариант, т.к. он
создает задержку выполнения программы только в том
случае, если это действительно необходимо, а второй
- всякий раз при записи в ЕЕРЯОМ. Например, если
мы всегр-навсего один раз в начале своей программы
что-то записываем в ЕЕРЯОМ, то в первом случае про-
грамма продолжит выполнение без задержки на ожи-
дание конца записи, в то время как во втором случае
будет совершенно ничем не обоснованная пауза в 2,5
миллисекунды.
Последнее, что следует помнить при работе с
ЕЕРЯОМ, так это гарантированное количество циклов за-
писи, Фирма Айпе! гарантирует, чтр ЕЕРЯОМ выдержит не
менее 100000 циклов перезаписи. Это, с одной стороны,
большое число, но, тем не менее, для хранения счетчика
отработанных устройством секунд не подойдет: легко
посчитать, что гарантируемый ресурс ЕЕРЯОМ будет вы-
работан полностью чуть более чем за сутки непрерывной
работы.
Продолжение в №2/2008
Радиолюбитель - 0 ! /2 0 0 8 [J
27
предыдущая страница 27 Радиолюбитель 2008-01 читать онлайн следующая страница 29 Радиолюбитель 2008-01 читать онлайн Домой Выключить/включить текст