找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8066|回復(fù): 5
收起左側(cè)

測試鐵電存儲器FM24C128A 附單片機(jī)程序源碼

[復(fù)制鏈接]
ID:27770 發(fā)表于 2018-10-10 06:21 來自手機(jī) | 顯示全部樓層 |閱讀模式
    自從有了存儲器93C46,24C01,終于有了比較理想的不擔(dān)心失電丟數(shù)據(jù)的存儲器了!
單片機(jī)也有了內(nèi)部儲存用戶數(shù)據(jù)區(qū)域,通過IAP操作,可實現(xiàn)數(shù)據(jù)長久保存,不用外掛存儲器啦!
而市場上也有了號稱與單片機(jī)系統(tǒng)速度同步的鐵電存儲器!
百花齊放的時代,有了更多選擇!
單片機(jī)內(nèi)部的可改寫儲存區(qū),對一些大量的一次性寫入數(shù)據(jù)來說,的確很不錯!但是,寫入之前必須擦除,且一次擦除512字節(jié)!對一些經(jīng)常性需要改這改那的場合,就遇上一個小小的不方便,哪怕修改一個數(shù),也得擦除512字節(jié)!與鐵電存儲器比較一下,才發(fā)現(xiàn)24C之類的覆蓋改寫是多么的寶貴!它不需任何擦除就可任意改寫任一個數(shù)據(jù)!完全可以按照需要去選擇.
最近做項目時,就遇上了這個問題.儲存區(qū)域保存有幾個手機(jī)號碼,及一些語句,運行中隨時需要更改某一個號碼,或某一語句,處理起來不方便啦! --- 這時,覆蓋改寫是一大優(yōu)勢!
其次,存儲器與單片機(jī)可以分離,也就方便通過其它工具(例如電腦或者編程器)進(jìn)行批量操作與數(shù)據(jù)更新!
于是,也買來些FM24C128A鐵電存儲器,并且進(jìn)行實際測試.
盡管網(wǎng)上有許多文章以及器件手冊,可以參考學(xué)習(xí),但是,沒有實踐的知識就都是人家的!
在測試中,按照最快速度去寫入/讀出,結(jié)果,一開始就發(fā)現(xiàn)有錯誤出現(xiàn),(見圖).
過去做一些儀表項目,存儲器都是24C02便足夠,而24C128容量就大了許多,前者僅僅256字節(jié),后者是16000字節(jié)!并且,說是很快很快也心存疑惑,到底有多快?
經(jīng)過多次實驗,我使用的單片機(jī)一條指令執(zhí)行時間為0.25us,首先發(fā)現(xiàn)是讀出不用任何延時也沒有什么問題,足夠快!隨后發(fā)現(xiàn)是每一次寫完8位數(shù)據(jù)后,需要有一個延時! 于是.從小到大,逐步增加延時時間,當(dāng)時間到達(dá)近1ms時,就完全正常了!
實驗程序如下:
;==============================
;//FM24C128A讀寫測試程序 bjxs1508 2018-10-10 4:08
;-----------------------------------------------------------
P24DA        EQU        P12 ;引腳
P24CK        EQU        P13
P24DAM        EQU        P12M;工作模式寄存器
P24CKM        EQU        P13M
FC      EQU        C   ;系統(tǒng)C標(biāo)志
;--------------------------------
ARDSH        DS        1;地址H
ARDSL        DS        1;地址L
R        DS        1;延時
TEMP        DS        1;延時
RE24        DS        1;存放讀出數(shù)據(jù)
WR24        DS        1;存放待寫數(shù)據(jù)
;==============================
;******程序開始*******
.CODE
;;;;;; 初始化略;;;;;;;;;
;==============================
B_LOOP:
        @RST_WDT
        CALL        B_WR24C  ;寫入256個字節(jié):連續(xù)寫入成功!
        CALL        B_RED24C ;讀取256個字節(jié);連續(xù)讀出成功!
        JMP        B_LOOP
;================================
B_RED24C:
        ZMN        ARDSH,#3FH ;24C128最后1頁256字節(jié)!
        ZMN        ARDSL,#0   ;低8位地址00開始使用
        ZHLN        #1,#00H
        ZB0         FGIE;開中斷
@@:
        CALL        B_RED24Z
        MOV_        @HL,RE24
        ZM0        RE24
        INCMS        L
        INCMS        ARDSL
        JMP        @B
        RET
;===============================
B_WR24C:;寫入數(shù)據(jù)
        ZB0         FGIE;禁止中斷
        ZMN        ARDSH,#3FH;24C128最后1頁256字節(jié)!
        ZMN        ARDSL,#0
@@:
        MOV_        WR24,#3EH ;256字節(jié)連續(xù)寫入3EH
        CALL        B_WRE24C
        CALL        B_Delms ;960us延時僅此處調(diào)用!
        INCMS        ARDSL
        JMP        @B
        RET
;============================
;FM24C128A讀寫子程序
;============================
B_WRE24C:
        MOV_        R,#08H;防止出錯,重復(fù)次數(shù)
B_WR24START:
        CALL        B_START
        BS0        FC
        JMP        B_RETESWR;如果總線無效跳轉(zhuǎn)
        MOV        A,#0A0H ;0A0H 指定寫操作
        CALL        B_Send        ;發(fā)送器件地址
        BS0        FC
        JMP        B_WRTOP        ;沒有應(yīng)答跳轉(zhuǎn)
        MOV        A,ARDSH        ;發(fā)送地址高字節(jié)
        CALL        B_Send
        BS0        FC
        JMP        B_WRTOP        ;沒有應(yīng)答跳轉(zhuǎn)
        MOV        A,ARDSL        ;發(fā)送低字節(jié)地址
        CALL        B_Send
        BS0        FC
        JMP        B_WRTOP        ;沒有應(yīng)答跳轉(zhuǎn)
        MOV        A,WR24        ;得到數(shù)據(jù)
        CALL        B_Send        ;發(fā)送數(shù)據(jù)
        BS0        FC
        JMP        B_WRTOP        ;沒有應(yīng)答跳出
        ZB0        FC        ;清除錯誤標(biāo)志
B_WRTOP:
        CALL        B_STOP
        BS1        FC
        JMP        B_EXIT24B
B_RETESWR:
        DECMS        R
        JMP        B_WR24START
B_EXIT24B:
        RET
;===============================
B_RED24Z:
        MOV_        R,#08H ;重復(fù)次數(shù)
B_Reta:
        CALL        B_START
        BS0        FC
        JMP        B_RET255
        MOV        A,#0A0H ;指定寫操作
        CALL        B_Send
        BS0        FC
        JMP        B_RETOP
        MOV        A,ARDSH
        CALL        B_Send
        BS0        FC
        JMP        B_RETOP
        MOV        A,ARDSL
        CALL        B_Send
        BS0        FC
        JMP        B_RETOP
        JMP        B_CRERE
B_RETOP:
        CALL        B_STOP
        BS1        FC
        JMP        B_EXITB
B_RET255:
        DECMS        R
        JMP        B_Reta
B_EXITB:
        RET
;==============================
B_CRERE:
        MOV_        R,#08H ;防止出錯,重復(fù)次數(shù)
B_CRE24:
        CALL        B_START
        BS0        FC
        JMP        B_CRE250
        MOV        A,#0A1H;指定讀操作
        CALL        B_Send
        BS0        FC
        JMP        B_CTOP
        CALL        B_RE8B
        CALL        B_NAK
        ZB0        FC
B_CTOP:
        CALL        B_STOP
        BS1        FC
        JMP        B_EndRE
B_CRE250:
        DECMS        R
        JMP        B_CRE24
B_EndRE:
        RET
;===============================
B_Send:
        MOV        RE24,A
        MOV_        SSS,#8
        ZB1        P24DAM
B_Sen01:
        RLCM        RE24
        BS0        FC
        ZB1        P24DA
        BS1        FC
        ZB0        P24DA
        NOP
        ZB1        P24CK
        NOP
        ZB0        P24CK
        DECMS        SSS
        JMP        B_Sen01
        ZB0        P24DAM
        NOP
        ZB1        P24CK
        NOP
        ZB0        FC
        BS0        P24DA
        ZB1        FC
        ZB0        P24CK
        RET
;----------------------------------------------------------------
B_RE8B:
        ZB0        P24DAM
        MOV_        SSS,#8
B_RE8S:
        NOP
        ZB1        P24CK
        NOP
        ZB0        FC
        BS0        P24DA
        ZB1        FC
        RLCM        RE24
        ZB0        P24CK
        DECMS        SSS
        JMP        B_RE8S
        RET
;===============================
B_START:
        ZB1        P24DAM
        ZB1        P24CKM
        ZB1        P24DA
        ZB1        P24CK
        NOP
        BS1        P24DA
        JMP        B_ErrE
        ZB0        P24DA
        NOP
        ZB0        P24CK
        NOP
        ZB0        FC
        RET
B_ErrE:
        NOP
        ZB1        FC
        RET
;----------------------------------------------------------
B_STOP:
        ZB1        P24DAM
        ZB0        P24DA
        NOP
        ZB1        P24CK
        NOP
        ZB1        P24DA
        NOP
        RET
;=============================
B_NAK:
        ZB1        P24DAM
        ZB1        P24DA
        NOP
        ZB1        P24CK
        NOP
        ZB0        P24CK
        RET
;=============================
B_Delms:;時間太短會失敗!---僅僅一處調(diào)用!
        Z2MN        TEMP,R,#15,#0H ;這個才會成功! 2018-10-10 0:42
@@: ;15*256*0.25=960us
        DECMS        R
        JMP        @B
        DECMS        TEMP
        JMP        @B
        RET
;**********************************
        ENDP
;**********************************
IMG_20181009_083033.jpg
IMG_20181009_083950.jpg
IMG_20181009_083011.jpg
24128A_00.jpg
24128_3E.jpg
FM24C128A_2(1).jpg
24128_MS1.jpg
24128_3E.jpg
FM24C128A_1(1).jpg
24128A_02.jpg
24128A_03.jpg

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:433329 發(fā)表于 2018-11-26 12:14 | 顯示全部樓層
編好的程序可以共享一下嗎
回復(fù)

使用道具 舉報

ID:199427 發(fā)表于 2018-12-12 12:24 | 顯示全部樓層
請問總工:您有C語言的源碼可以分享嗎?匯編看不懂。
回復(fù)

使用道具 舉報

ID:478757 發(fā)表于 2019-2-21 10:07 | 顯示全部樓層
大師能給個代碼嗎,用用的芯片,線路圖,
回復(fù)

使用道具 舉報

ID:478757 發(fā)表于 2019-3-3 11:14 來自手機(jī) | 顯示全部樓層
1126401079@qq.com
回復(fù)

使用道具 舉報

ID:64765 發(fā)表于 2019-10-25 15:59 | 顯示全部樓層
好資料,正在學(xué)習(xí),謝謝分享。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表