[an error occurred while processing this directive]
|
Файл wrrom.a51:
?PR?WrRom?rdd SEGMENT CODE
EXTRN DATA (addr)
EXTRN DATA (var)
EXTRN CODE (?C_STARTUP)
PUBLIC WrRom
RSEG ?PR?WrRom?rdd
USING 0
;Запись данных (беззнаковое целое длиной 4 байта) в EEPROM микроконтроллера AT89S8252
;
;addr - адрес в EEPROM (всегда кратен четырем)
;var - переменная (беззнаковое целое), которая помещается в EEPROM
WMCON EQU 96h ;объявление SFR
WrRom: mov WMCON, #18h ;разрешить работу с EEPROM
mov DPH, #00h ;инициализировать указатель DPTR на начало переменной в EEPROM
mov r0, #addr
mov a, @r0
mov DPL, a
mov r0, #var ;инициализировать указатель (R0) на начало переменной в ОЗУ AT89S8252
wait0: mov b, WMCON ;ждать готовности EEPROM к записи
jnb b.1, wait0
mov a, @r0 ;взять первый байт перемнной VAR
movx @dptr, a ;записать первый байт в EEPROM
wait1: mov b, WMCON ;ждать готовности EEPROM к записи
jnb b.1, wait1
inc dptr
inc r0
mov a, @r0 ;взять второй байт перемнной VAR
movx @dptr, a ;записать второй байт в EEPROM
wait2: mov b, WMCON ;ждать готовности EEPROM к записи
jnb b.1, wait2
inc dptr
inc r0
mov a, @r0 ;взять третий байт перемнной VAR
movx @dptr, a ;записать третий байт в EEPROM
wait3: mov b, WMCON ;ждать готовности EEPROM к записи
jnb b.1, wait3
inc dptr
inc r0
mov a, @r0 ;взять четвертый байт перемнной VAR
movx @dptr, a ;записать четвертый байт в EEPROM
wait4: mov b, WMCON ;ждать окончания записи в EEPROM
jnb b.1, wait4
mov WMCON, #00h ;запретить работу с EEPROM
ret ;выход из подпрограммы
end
Файл rdrom.a51:
?PR?RdRom?rdd SEGMENT CODE
EXTRN DATA (addr)
EXTRN DATA (var)
EXTRN CODE (?C_STARTUP)
PUBLIC RdRom
RSEG ?PR?RdRom?rdd
USING 0
;Чтение данных (беззнаковое целое длиной 4 байта) из EEPROM микроконтроллера AT89S8252
;
;addr - адрес в EEPROM (всегда кратен четырем)
;var - переменная (беззнаковое целое), в которую помещается прочитанное значение
WMCON EQU 96h ;объявление SFR
RdRom: mov WMCON, #08h ;разрешить работу с EEPROM
mov DPH, #00h ;инициализировать указатель DPTR на начало переменной в EEPROM
mov r0, #addr
mov a, @r0
mov DPL, a
mov r0, #var ;инициализировать указатель (R0) на начало переменной в ОЗУ AT89S8252
movx a, @dptr ;прочитать первый байт из EEPROM
mov @r0, a ;сохранить его в VAR
inc dptr
inc r0
movx a, @dptr ;прочитать второй байт из EEPROM
mov @r0, a ;сохранить его в VAR + 1
inc dptr
inc r0
movx a, @dptr ;прочитать третий байт из EEPROM
mov @r0, a ;сохранить его в VAR + 2
inc dptr
inc r0
movx a, @dptr ;прочитать четвертый байт из EEPROM
mov @r0, a ;сохранить его в VAR + 3
mov WMCON, #00h ;запретить работу с EEPROM
ret ;выход из подпрограммы
end
В кейле в проекте присоедините два файла wrrom.a51 и rdrom.a51...
В файле main.c нужно сделать объявления
// Переменные для работы с EEPROM:
//
// addr - адрес, по которому будет записана переменная var (всегда кратен 4 )
// var - собственно переменная типа беззнакового длинного
unsigned int data addr;
unsigned long data var;