⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at45d0xx.inc

📁 AT45dbxx data-flash memory routines in asm51
💻 INC
📖 第 1 页 / 共 2 页
字号:
           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 + -