📄 at45d0xx.inc
字号:
pop DPH
pop DPL
ret
;+--------------------------------------------------------+
;| Rotina: BUFFER 1 e 2 WRITE |
;| Entradas: BUFFER_BYTE -> 0 a 255 |
;| Dado a ser gravado no ACC |
;| Funcao : Escreve diretamente no Buffer 1 de 256 bytes |
;| |
;+--------------------------------------------------------+
_WRITE_BUFFER1:
push ACC ; Salva dado
mov VARIAVEL,a
clr CS_ ; Habilita a Data-Flash
mov a,#84H ; Comando:
acall _AT45_MASTER_IO ; BUFFER 1 WRITE
mov a,#0
acall _AT45_MASTER_IO ; Byte irrelevante
mov a,#0
acall _AT45_MASTER_IO ; Byte irrelevante
mov a,BUFFER_BYTE ; Manda byte buffer
acall _AT45_MASTER_IO
pop acc ; Recupera dado
acall _AT45_MASTER_IO
setb CS_ ; Habilita Data-Flash
mov a,VARIAVEL
ret
;+-----------------------------------------------------------+
;| Esta rotina faz o mesmo que a acima, porem com o buffer 2 |
;+-----------------------------------------------------------+
_WRITE_BUFFER2:
push ACC ; Salva dado
clr CS_ ; Habilita a Data-Flash
mov a,#87H ; Comando:
acall _AT45_MASTER_IO ; BUFFER 2 WRITE
mov a,#0
acall _AT45_MASTER_IO ; Byte irrelevante
mov a,#0
acall _AT45_MASTER_IO ; Byte irrelevante
mov a,BUFFER_BYTE ; Manda byte buffer
acall _AT45_MASTER_IO
pop acc ; Recupera dado
acall _AT45_MASTER_IO
setb cs_ ; Habilita Data-Flash
ret
;+---------------------------------------------------------------------------+
;| Rotina: BUFFER 1 TO MAIN MEMORY PAGE PROGRAM WITH BUILT-IN ERASE |
;| Entradas: DPTR -> Numero da pagina (0 a 4095) |
;| |
;| Funcao : Transfere dados do buffer 1 para as paginas da memoria principal |
;| passando pelos buffers 1 ou 2 |
;+---------------------------------------------------------------------------+
_AT45_BUFFER1_TO_MAIN_MEMORY:
push DPL
push DPH
push acc
mov a,DPH ; Filtra dptr para ir somente ate 4095
anl a,#00001111B
mov DPH,a
clr C ; adequa o dptr da forma exigida pelo AT45cXX
mov a,DPL
rlc a
mov DPL,a
mov a,DPH
rlc a
mov DPH,a
;-
clr CS_ ; Habilita a Data-Flash
mov a,#83H ; Comando:
acall _AT45_MASTER_IO ; BUFFER 1 TO MAIN MEMORY PAGE PROGRAM WITH BUILT-IN ERASE
mov a,DPH
acall _AT45_MASTER_IO ; Manda parte alta da pagina
mov a,DPL
acall _AT45_MASTER_IO ; Manda parte baixa da pagina
mov a,#0 ; Manda byte irrelevante
acall _AT45_MASTER_IO
setb CS_ ; Desabilita Flash
acall _AT45_GET_STATUS ; Verifica se esta pronto
pop ACC
pop DPH
pop DPL
ret
;+-----------------------------------------------------------+
;| Esta rotina faz o mesmo que a acima, porem com o buffer 2 |
;+-----------------------------------------------------------+
_AT45_BUFFER2_TO_MAIN_MEMORY:
push DPL
push DPH
push ACC
mov a,DPH ; Filtra dptr para ir somente ate 4095
anl a,#00001111B
mov DPH,a
clr C ; adequa o dptr da forma exigida pelo AT45cXX
mov a,DPL
rlc a
mov DPL,a
mov a,DPH
rlc a
mov DPH,a
;-
clr CS_ ; Habilita a Data-Flash
mov a,#86H ; Comando:
acall _AT45_MASTER_IO ; BUFFER 2 TO MAIN MEMORY PAGE PROGRAM WITH BUILT-IN ERASE
mov a,DPH
acall _AT45_MASTER_IO ; Manda parte alta da pagina
mov a,DPL
acall _AT45_MASTER_IO ; Manda parte baixa da pagina
mov a,#0 ; Manda byte irrelevante
acall _AT45_MASTER_IO
setb CS_ ; Desabilita Flash
acall _AT45_GET_STATUS ; Verifica se esta pronto
pop ACC
pop DPH
pop DPL
ret
;+-------------------------------------------------------------------------------+
;| Rotina: MAIN MEMORY PAGE TO BUFFER1 TRANSFER |
;| Entradas: DPTR -> Numero da pagina (0 a 4095) |
;| Saida: Dado no ACC |
;| Funcao : Permite a leitura diretamente das 4096 paginas na memoria principal |
;| sem precisar usar os buffers e deixando os dados dos buffers intactos|
;+-------------------------------------------------------------------------------+
_AT45_MAIN_PAGE_TO_BUFFER1_TRANSF:
push DPL
push DPH
mov a,DPH ; Filtra dptr para ir somente ate 4095
anl a,#00001111B
mov DPH,a
clr C ; adequa o dptr da forma exigida pelo AT45cXX
mov a,DPL
rlc a
mov DPL,a
mov a,DPH
rlc a
mov DPH,a
;-
clr CS_ ; Habilita a Data-Flash
mov a,#53H ; Comando MAIN MEMORY PAGE TO BUFFER 1 TRANFER
acall _AT45_MASTER_IO
mov a,DPH
acall _AT45_MASTER_IO
mov a,DPL
acall _AT45_MASTER_IO
acall _AT45_MASTER_IO ; Byte irrelevante
setb CS_ ; Desabilita a Data-Flash
acall _AT45_GET_STATUS ; Verifica se esta pronto
pop DPH
pop DPL
ret
;+-----------------------------------------------------------+
;| Esta rotina faz o mesmo que a acima, porem com o buffer 2 |
;+-----------------------------------------------------------+
_AT45_MAIN_PAGE_TO_BUFFER2_TRANSF:
push DPL
push DPH
mov a,DPH ; Filtra dptr para ir somente ate 4095
anl a,#00001111B
mov DPH,a
clr C ; adequa o dptr da forma exigida pelo AT45cXX
mov a,DPL
rlc a
mov DPL,a
mov a,DPH
rlc a
mov DPH,a
;-
clr CS_ ; Habilita a Data-Flash
mov a,#55H ; Comando MAIN MEMORY PAGE TO BUFFER 2 TRANFER
acall _AT45_MASTER_IO
mov a,DPH
acall _AT45_MASTER_IO
mov a,DPL
acall _AT45_MASTER_IO
acall _AT45_MASTER_IO ; Byte irrelevante
setb CS_ ; Desabilita a Data-Flash
acall _AT45_GET_STATUS ; Verifica se esta pronto
pop DPH
pop DPL
ret
;+-----------------------------------+
;| Rotina: CLEAR ALL |
;| Funcao : Apaga a memoria inteira |
;+-----------------------------------+
_AT45_CLEAR_ALL:
push acc ; Salva acumulador, r5,r6,r6 e B
push 05h
push 06h
push 07h
push B
mov R5,#0
mov R6,#0
mov R7,#4
AT45_CLEAR_TRATA_BYTE: ; Esta rotina faz um RLC de 16 bits
mov B,R5 ; 4 vezes
clr C
mov a,B
rlc a
mov B,a
mov a,R6
rlc a
djnz R7,AT45_CLEAR_TRATA_BYTE
clr CS_ ; Habilita a Data-Flash
mov a,#50H ; Comando:
acall _AT45_MASTER_IO ; Block erase
mov a,R6
acall _AT45_MASTER_IO
mov a,B
acall _AT45_MASTER_IO
setb CS_
acall _AT45_GET_STATUS ; Verifica se esta pronto
mov R6,#0
mov R7,#4
inc R5
mov a,R5
cjne a,#0FFH,AT45_CLEAR_TRATA_BYTE
pop B ; recupera acumulador, r5,r6,r6 e B
pop 07h
pop 06h
pop 05h
pop ACC
RET
;+-----------------------------------+
;| Rotina: INCREMENTA ENDERECO |
;| Funcao : ENDERECO = ENDERECO +1 |
;+-----------------------------------+
_INCREMENTA_ENDERECO:
push ACC
push PSW
clr C
mov a,BUFFER_BYTE ; Incrementa endereco
add a,#1
mov BUFFER_BYTE,a
jnc INCREMENTA_FIM
inc DPTR
INCREMENTA_FIM:
pop PSW
pop ACC
RET
;-----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -