;-------------------------------------
; 写/读EEPROM的程序
;-------------------------------------
include "m8c.inc"
include "memory.inc"
include "PSoCAPI.inc"
include "E2PROM.inc"
export _main
;------------------------------------------
; 定义RAM数据寄存器
;------------------------------------------
AREA Bss (RAM,REL)
draw_data: blk 1 ;写数据
read_data: blk 1 ;读数据
bit_count: blk 1 ;字节计数器
hand: blk 1 ;指针
AREA text (ROM,REL)
.LITERAL
number: DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
DB 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
DB 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
DB 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
DB 51, 52, 53, 54, 55, 56, 57, 58, 59, 50
DB 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
DB 61, 62, 63, 64
.ENDLITERAL
_main:
MOV [__r0],0
_0x05C0:
MOV A,0
MVI [__r0],A
MOV A,[__r0]
JNZ _0x05C0
;-------写数据到EEPROM初始化
mov [bit_count],1 ;需要写入字节的计时器值
mov [hand], 0 ;从RAM地址0开始装载数据
mov x, <number
mov a, >number
loop:
push a
romx
mvi [hand],a
pop a
inc x
dec [bit_count]
jnz loop
jmp draw_eeprom
;-----------------------------------------------
; 将指定数据从RAM缓存区写入到所定义的EEPROM内
;-----------------------------------------------
; 其中的<..>指任何寻址模式或将所引用的数据放入累加器的指令的数量.
; 参数:
; wByteCounter: 要写入至闪存的字节数量.
; pbData: 指向包含了要写入数据的RAM缓存区的指针.
; wAddr: EEPROM设备地址空间的地址偏移,RAM数据将写入此地址空间.
; 此值可以是0至N-1,其中的N为EEPROM设备的长度.
draw_eeprom:
;-------<wByteCounter>
mov A, 0
push A
;-------<wByteCounter+1>
mov A, 1 ;写EEPROM的0~64字节的数据
push A
;-------<pbData>
mov A, 0 ;从RAM地址0的数据开始写入
push A
;-------<pbData+1>
mov A, 0 ;RAM地址指针自动+1至64
push A
;-------<wAddr>
mov A, 0
push A
;-------<wAddr+1>
mov A, 0
push A
;-------开始调用写EEPROM函数
call E2PROM_bE2Write ;_EEPROM_Write
add SP,-E2_WR_ARG_STACK_FRAME_SIZE ;恢复调用堆栈
pop X
;-------if ( bError == NOERROR )
cmp A, 0
jnz draw_fall
mov [00h],1
write_1:
mov a,0
mvi [00h],a
mov a,[00h]
jnz write_1
jmp read_eeprom
;---------------------------------------------------------
; 从闪存内将指定的EEPROM设备数据读取到指定的RAM缓存区
;---------------------------------------------------------
; 其中的<..>指任何寻址模式或将所引用的数据放入累加器的指令的数量。
; 参数:
; wByteCounter: 从闪存要读取的字节数量
; pbDataDest: 指向要读入数据的RAM缓存区的指针.
; wAddr: EEPROM设备地址空间的地址偏移,闪存数据将从此地址空间读取.
; 此值可以是0至N-1,其中的N为EEPROM设备的长度.
read_eeprom:
;-------<wByteCounter>
mov A, 0 ;
push A
;-------<wByteCount+1>
mov A, 1 ;读EEPROM的0~64字节的数据
push A
;-------<pbDataDest>
mov A, 0 ;读至RAM地址0开始
push A
;-------<pbDataDest+1>
mov A, 0 ;此值修改可指定RAM的地址存放数据
push A ;RAM地址自动+1至64
;-------<wAddr>
mov A, 0 ;
push A
;-------<wAddr+1>
mov A, 0 ;此值修改指定开始读EEPROM的地址数据
push A
;-------开始调用读EEPROM函数
call _EEPROM_Read //E2PROM_E2Read
add SP,-E2_RD_ARG_STACK_FRAME_SIZE ;恢复调用堆栈
pop X
mov A,01h
mov X,05h
mov A,[read_data]
nop
nop
jmp <.-02
draw_fall:
;-------写EEPROM数据失败
nop
nop
jmp draw_fall