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

发布者:BlossomSunrise最新更新时间:2015-04-13 来源: eechina关键字:AT24C512  数据文件  系统化管理 手机看文章 扫描二维码
随时随地手机看文章
文件系统程序源代码如下:
. 公用子程序:
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
关键字:AT24C512  数据文件  系统化管理 引用地址:AT24C512中数据文件的系统化管理

上一篇:NAND FLASH扇区管理
下一篇:利用基于闪存的MCU实现用户数据存储

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved