[an error occurred while processing this directive] [an error occurred while processing this directive]
Копирование во внешнее озу и из внешнего озу 255 байт...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Programmer 17 декабря 2001 г. 08:20
В ответ на: Поделитесь, плз, фрагментом проги для работы с on-chip EEPROM для ATS89S252 отправлено Незнайка 16 декабря 2001 г. 13:32

PUBLIC Read_S_REG_EEPROM;
PUBLIC WRITE_EEPROM_SREG;
PUBLIC _WrtEEPROM;

WMCON EQU 96h ; watchdog and memory control register
EEMEN EQU 00001000b ; EEPROM access enable bit
EEMWE EQU 00010000b ; EEPROM write enable bit
WDTRST EQU 00000010b ; EEPROM RDY/BSY bit
DPS EQU 00000100b ; data pointer select bit

EXTRN CODE (DELAY_10ms);
EXTRN XDATA (SRegistri);
RW_EEPROM SEGMENT CODE

RSEG RW_EEPROM
Read_S_REG_EEPROM:
CLR EA
mov dptr, #0 ; address to read
xrl WMCON,#DPS ; switch data pointers
mov dptr,#SRegistri ; address to read
xrl WMCON,#DPS ; switch data pointers
mov r1,#0FFh
read_s_1:
orl WMCON,#EEMEN ; enable EEPROM accesses
movx a,@dptr ; read EEPROM
xrl WMCON,#EEMEN ; disable EEPROM accesses
inc DPTR
xrl WMCON,#DPS ; switch data pointers
movx @dptr,a ; запись в ОЗУ
inc DPTR
xrl WMCON,#DPS ; switch data pointers
DJNZ r1,read_s_1
SETB EA
RET
;***************************************************
_WrtEEPROM:
CLR EA
MOV DPH,R6
MOV DPL,R7
MOV A,R5
ORL WMCON, #EEMEN ; enable EEPROM accesses
ORL WMCON, #EEMWE ; enable EEPROM writes
MOVX @DPTR,A ; write EEPROM
CALL DELAY_10ms
MOV a,WMCON ; get EEPROM write status
ANL a,#WDTRST ; check RDY/BSY
; jz loop ;jump if busy
XRL WMCON,#EEMWE ; disable EEPROM writes
XRL WMCON,#EEMEN ; disable EEPROM accesses
SETB EA
nop
RET

WRITE_EEPROM_SREG:
CLR EA
PUSH DPH
PUSH DPL
PUSH ACC
PUSH 1

mov DPTR,#0 ; address to write
xrl WMCON,#DPS ; switch data pointers
mov dptr,#SRegistri ; address to read
mov r1,#0FFh ; write data length
labl_123:
movx a,@DPTR
inc DPTR
xrl WMCON,#DPS ; switch data pointers
orl WMCON, #EEMEN ; enable EEPROM accesses
orl WMCON, #EEMWE ; enable EEPROM writes
movx @dptr,a ; write EEPROM
loop:
call DELAY_10ms
mov a,WMCON ; get EEPROM write status
anl a,#WDTRST ; check RDY/BSY
; jz loop ;jump if busy
xrl WMCON,#EEMWE ; disable EEPROM writes
xrl WMCON,#EEMEN ; disable EEPROM accesses
inc dptr
xrl WMCON,#DPS ; switch data pointers
DJNZ r1,labl_123
xrl WMCON,#DPS ; switch data pointers
POP 1
POP ACC
POP DPL
POP DPH
SETB EA
RET
;*********************************************
END

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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru