新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT24C512中數據文件的系統化管理

        AT24C512中數據文件的系統化管理

        作者: 時間:2016-12-02 來源:網絡 收藏
        文件系統程序源代碼如下:
        . 公用子程序:
        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


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 桂阳县| 新野县| 竹北市| 永年县| 桂阳县| 临沂市| 密山市| 女性| 黄石市| 方山县| 阜平县| 志丹县| 盖州市| 西充县| 石泉县| 丰镇市| 辽中县| 寿宁县| 鄄城县| 济南市| 百色市| 兰考县| 开封县| 灵石县| 福清市| 内乡县| 长海县| 大关县| 永州市| 逊克县| 工布江达县| 南通市| 蓝田县| 莲花县| 阿合奇县| 会同县| 永清县| 肥东县| 博客| 旌德县| 宜宾市|