新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 鐵電存儲器FM24C16原理及其在多MCU系統中應用

        鐵電存儲器FM24C16原理及其在多MCU系統中應用

        作者: 時間:2016-12-02 來源:網絡 收藏


        3、應用接口及程序

        FM24C16與單片機接口電路非常簡單,下面以碳控儀系統中的應用為例給予說明,并給出部分子程序。應用接口圖如圖2所示,系統中采用2片AT89C55單片機,用其P2.0和P2.1口與SDA,SCL相連接,在SDA和SCL引腳接1.8kΩ的上拉電阻到+5V,工作電源也為+5V,WP引腳接電源地以保證可以任意寫入數據。2片AT89C55用P1.0,P1.1作為通訊口,來確定誰操作FM24C16:片1操作前,檢測P1.0口,如果為高,則置低P1.1口,向片2發出占用FM24C16信號,然后再檢測P1.0口,還為高,則進入操作,若為低,則退出操作并把P1.1口置高;如果P1.0口為低,則說明片2占用FM24C16,片1就放棄操作,等待下次查詢和操作。片2的操作相對應于片1。這樣,FM24C16不僅作為了公共數據區,而且也成為了2片MCU的一個模擬的通訊口,而且理論上來說,1片FM24C16上可以掛很多MCU,而可以省去不必要的MCU間的通訊。這就需要FM24C16承受快速、頻繁讀寫,這是其他E2PROM望塵莫及的。

        本文引用地址:http://www.104case.com/article/201612/324825.htm

        下面給出FM24C16的頁面寫和任意字節讀匯編子程序。程序經過應用驗證,效果良好(為保證穩定性,可以在相應地方加入空語句以延時)。

        頁面寫子程序:

        PAGE-WR: ACALL START_BIT
        MOV A,#10100000B
        MOV R7,#4
        ACALL SHFTO
        ;SHFTO為送位子程序,以上3行送
        1010到FM24C16
        MOV A,#20H
        MOV R7,#3
        ACALL SHFTO
        ;以上3行確定寫FM24C16的00l頁
        MOV A,#00H
        MOV R7,#1
        ACALL SHFTO ;以上3行送寫控制位0
        ACALL SlAVE_ACK
        ;SLAVE-ACK為從應答子程序,在此檢測
        從應答位
        MOV A,#00H
        MOV R7,#8
        ACALL SHFTO
        ;以上3行確定寫入數據首地址為00H
        ACALLSLAVE-ACK ;檢測從應答位
        MOV R0,#00H ;R0中為被寫人數據
        所在單元首地址
        MOV R4,#7FH ;R4中為寫入字節數
        (現為256B)
        NEXT-DATA:MOV A,@R0 ;調入第1個寫入數據
        INC R0 ;R0指向第2個數據所在單元地址
        MOV R7,#8
        ACALL SHFTO;寫入數據
        ACALL SLAVE-ACK ;檢測從應答位
        DJNZ R4,NEXT-DATA
        ;循環寫入下一個字節數據
        ACALL STOP-BIT
        ;STOP-BIT為停止位,結束寫操作(此處沒有寫延時等待)
        RET ;返回,程序結束

        讀任意地址子程序:
        SELECT-RD:ACALL START-BIT
        ACALL START-BIT
        MOV A,#10100000B
        MOV R7,#4
        ACALL SHFTO
        MOV A,#20H
        MOV R7,#3
        ACALL SHFTO
        MOV A,#0FOH
        MOV R7,#1
        ACALL SHFTO
        ACALL SlAVE-ACK
        MOV R5,#00H
        MOV R7,#8
        ACALL SHFTO
        ACALL SlAVE-ACK
        ;以上為偽寫,確定讀FM24C16的001
        00H單元數據
        ACALL START-BIT
        MOV A,#10100000B
        MOV R7,#4
        ACALL SHFTO
        MOV A,#20H
        MOV R7,#3
        ACALL SHFTO
        MOV A,#0FOH
        MOV R7,#1
        ACALL SHFTO ;上面3行送讀控制位1
        ACALL SlAVE-ACK
        MOV R5,#00H ;清R5,以存儲讀出數據
        MOV R7,#8 ;R7作讀出位記數器
        CLOCK8: SETB SCL
        MOV C,SDA
        CLR SCL
        MOV A,R5
        RLC A
        MOV R5,A
        ;以上6行讀出FM24C16送來的1位
        DJNZ R7,CLOCK8 ;循環讀出1B數據
        ACALL NO_ACK
        ;NO_ACK為無需應答位子程序
        ACLL STOP_BIT ;停止
        RET ;程序結束

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌恰县| 哈尔滨市| 乐山市| 秦皇岛市| 万盛区| 张掖市| 中牟县| 大竹县| 黄陵县| 天水市| 沂水县| 巴东县| 吉首市| 清丰县| 都昌县| 金门县| 孙吴县| 西盟| 普兰店市| 秦安县| 连城县| 高台县| 崇州市| 长治县| 永仁县| 永新县| 崇文区| 汉川市| 会宁县| 光山县| 曲麻莱县| 晋江市| 什邡市| 娱乐| 上思县| 大英县| 玉溪市| 井研县| 墨江| 玉屏| 敦煌市|