[an error occurred while processing this directive]
(+)... для 8252, правда... Это универсальный пример работы с асмовскими вещами в Си кейла...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено zlogic 10 октября 2006 г. 12:24
В ответ на: AT89S8253. Sorry отправлено <font color=gray>papa</font> 10 октября 2006 г. 11:55

Файл 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;


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание