您的位置 首页 数字

AT24C512中数据文件的系统化办理

文件系统程序源代码如下:公用子程序:RD24C:把DPTR所指的AT24C512单元内容读出,放到(R1,R0)所指的RAM单元,R6为数据长度WR24C:把(R1

文件体系程序源代码如下:

. 共用子程序:
RD24C:把DPTR所指的AT24C512单元内容读出,放到(R1,R0)所指的RAM单元,R6为数据长度
WR24C:把(R1,R0)所指的RAM单元内容写入DPTR所指的AT24C512单元,R6为数据长度
WR_ONE:把DPTR所指的RAM单元内容写入DPTR所指的AT24C512单元
TZDPTR: MUL AB ;DPTR=DPTR+A*B
ADD A, DPL
MOV DPL, A
MOV A, DPH
ADDC A, B
MOV DPH, A
RET
AT24C512体系格式化:把目录区和页面分配区初始化为0EEEEH
AT_INIT: MOV DPTR, #AT24C
MOV R7, #80H
MOV A, #0EEH
ATINIT1:MOVX @DPTR, A
INC DPTR
DJNZ R7, ATINIT1
MOV R7, #54
ATINIT2:MOV DPTR, #AT24C
MOV R1, DPH
MOV R0, DPL
MOV R6, #80H
MOV A, R7
MOV B, #80H
MOV DPTR, #0
LCALL TZDPTR
PUSH 7
LCALL WR24C
POP 7
DJNZ R7, ATINIT2
RET
为便利操作,每次开机把目录区和页面分配区的内容读入到RAM的相同地址中,程序如下:
R_HEAD:CLR IE.7
MOV R5, #0
RHEAD1:MOV A, R5
MOV B, #80H
MOV DPTR, #0
LCALL TZDPTR
MOV R1, DPH
MOV R0, DPL
MOV R6, #80H
PUSH 5
LCALL RD24C
POP 5
INC R5
CJNE R5, #54, RHEAD1
SETB IE.7
RET
增加文件程序如下:
YB_SAVE: MOV PAGE_NO,#0 AGES=需求的页数
MOV DPTR, #AT_FAT AGE_NO为闲暇页数计数
YBSAVE1: MOVX A, @DPTR ; AT_FAT 为页面分配表开端地址
CJNE A, #0EEH, YBSAVE2
INC PAGE_NO
YBSAVE2: INC DPTR
INC DPTR
MOV A, PAGE_NO
CLR C
SUBB A, PAGES
JZ YBSAVE4
MOV A, DPH
CJNE A, #1BH, YBSAVE1 ;1B00H为页面分配表的完毕地址
YBSAVE3: LCALL ERRDSP ;显现错误信息
RET
YBSAVE4: MOV R7, #0
YBSAVE5: MOV DPTR, #YB_BEG ; YB_BEG为目录区开端地址
MOV A, R7
MOV B, #10
LCALL TZDPTR
MOVX A, @DPTR
CJNE A, #0EEH, YBSAVE16
SJMP YBSAVE6
YBSAVE16: INC R7
CJNE R7, #153, YBSAVE5 ;最多可存153个文件
SJMP YBSAVE3 ;现已存满
YBSAVE6: CLR IE.7
PUSH 7 ;保存找到的闲暇目录区序号
LCALL DO_DSP ;显现“正在存储”
MOV DPTR, #AT_FAT
YBSAVE7: MOVX A, @DPTR
CJNE A, #0EEH, YBSAVE8
SJMP YBSAVE9
YBSAVE8: INC DPTR
INC DPTR
SJMP YBSAVE7
YBSAVE9: PUSH DPH ;找到第一个闲暇页,把地址维护起来
PUSH DPL
MOV R1, DPH
MOV R0, DPL
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOVX @DPTR, A ;暂时把它看做是文件的最终一页
PUSH DPH
PUSH DPL
PUSH 0
PUSH 1
LCALL WR_ONE
POP 1
POP 0
POP DPL
POP DPH
INC DPTR
MOV R7, PAGES
DEC R7
MOV A, R7
JZ YBSAVE13 ;假如只需求一页,则页面分配表修正完毕
YBSAVE10: MOVX A, @DPTR
CJNE A, #0EEH, YBSAVE11
PUSH DPH
PUSH DPL
MOV DPH, R1 ;R1,R0为前一页的页面分配表地址
MOV DPL, R0
POP 0
POP 1
MOV A, R1
MOVX @DPTR, A
INC DPTR
MOV A, R0
MOVX @DPTR, A ;新地址写入前一页的地址单元
PUSH 0
PUSH 1
PUSH 7
LCALL WR_ONE ;把修正信息写入AT24C512
POP 7
POP 1
POP 0
MOV DPH, R1
MOV DPL, R0
INC DPTR
INC DPTR
SJMP YBSAVE12
YBSAVE11: INC DPTR
INC DPTR
YBSAVE12: DJNZ R7, YBSAVE10
MOV DPH, R1
MOV DPL, R0
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOVX @DPTR, A ;写入0FFFFH,表明文件分配完毕
LCALL WR_ONE
YBSAVE13: POP 0
POP 1
POP 0
POP 1 ;R1R0=DPTR=找到的第一个闲暇页
POP ACC ;ACC=R7=闲暇目录区序号
PUSH ACC
MOV DPTR, #YB_BEG+8
MOV B, #10
LCALL TZDPTR ;确认目录闲暇区地址
MOV A, R1

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/254545.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部