新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 24C02(EEPROM)記憶開機次數程序

        24C02(EEPROM)記憶開機次數程序

        作者: 時間:2016-11-10 來源:網絡 收藏
        24C02記憶開機次數,開機次數存放地址為00H,做此實驗時,先用地址清0程序將00H清0,再去做記憶開機次數實驗!!!

        計數地址清0程序如下:

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

        ;/////////////////////////////////////////////////////
        ;將AT24C02(EEPROM)的00H單元的地址清0
        ;AT24C02存儲開機次數(準備程序)
        ;////////////////////////////////////////////////////
        WP BIT P1.0
        SCL BIT P1.1
        SDA BIT P1.2

        WRDA EQU 41H

        ORG 0000H
        SJMP MAIN
        ORG 0030H
        MAIN:CLR WP
        MOV SP,70H
        LCALL START
        MOV WRDA,#0AEH
        LCALL SEND
        LCALL SACK
        MOV WRDA,#00H
        LCALL SEND
        LCALL SACK
        MOV WRDA,#00H
        LCALL SEND
        LCALL SACK
        LCALL STOP
        CLR P1.7
        SJMP $

        ;24C02開始數據傳送信號
        START:SETB SDA
        SETB SCL
        LCALL D5U
        CLR SDA
        LCALL D5U
        CLR SCL
        RET
        ;寫一個字節子程序
        SEND: MOV R0,#08H
        MOV A,WRDA
        D1:RLC A
        MOV SDA,C
        LCALL D5U
        SETB SCL
        LCALL D5U
        CLR SCL
        DJNZ R0,D1
        RET
        ;24c02應答信號子程序
        SACK: SETB SDA
        LCALL D5U
        SETB SCL
        LCALL D5U
        D2:MOV C,SDA
        JC D2
        CLR SCL
        RET
        ;STOP子程序
        STOP: CLR SDA
        LCALL D5U
        SETB SCL
        LCALL D5U
        SETB SDA
        LCALL D5U
        CLR SCL
        RET
        ;延時子程序
        D5U: NOP
        NOP
        NOP
        NOP
        NOP
        RET

        END

        ................................記憶開機次數程序(已調試過).....................................

        ;/////////////////////////////////////////////////
        ;AT24C02(EEPROM)存儲開機次數
        ;開機次數存儲地址為00H,在記憶前以清0
        ;////////////////////////////////////////////////
        WP BIT P1.0
        SCL BIT P1.1
        SDA BIT P1.2

        WRDA EQU 40H;寫入數據暫存器
        RDDA EQU 41H;讀出數據暫存器
        OPUN EQU 42H;開機次數暫存器

        ORG 0000H
        SJMP MAIN
        ORG 0030H
        MAIN:CLR WP;開寫保護
        MOV SP,70H
        LCALL READ
        MOV A,RDDA
        MOV DPTR,#TAB
        INC A
        MOV R1,A
        CJNE R1,#16,D4
        CLR A
        D4:MOV OPUN,A;將開機次數存入暫存器
        MOVC A,@A+DPTR
        CLR P2.0
        MOV P0,A;顯示開機次數
        LCALL WIRT
        SJMP $
        ;讀24C02子程序
        READ:LCALL START
        MOV WRDA,#0AEH
        LCALL SEND
        LCALL SACK
        MOV WRDA,#00H
        LCALL SEND
        LCALL SACK

        LCALL START
        MOV WRDA,#0AFH
        LCALL SEND
        LCALL SACK
        LCALL REBY
        LCALL STOP
        RET
        ;寫C2402子程序
        WIRT:LCALL START
        MOV WRDA,#0AEH
        LCALL SEND
        LCALL SACK
        MOV WRDA,#00H
        LCALL SEND
        LCALL SACK
        MOV A,OPUN
        MOV WRDA,A
        LCALL SEND
        LCALL SACK
        LCALL STOP
        RET

        ;24C02開始子程序
        START:SETB SDA
        SETB SCL
        LCALL DE5U
        CLR SDA
        LCALL DE5U
        CLR SCL
        RET
        ;讀一個字節子程序
        REBY: MOV R0,#08H
        SETB SDA
        D3:LCALL DE5U
        SETB SCL
        LCALL DE5U
        MOV C,SDA
        RLC A
        CLR SCL
        SETB SDA
        DJNZ R0,D3
        MOV RDDA,A
        RET

        ;傳送一個字節子程序
        SEND: MOV R0,#08H
        MOV A,WRDA
        D1:RLC A
        MOV SDA,C
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        CLR SCL
        DJNZ R0,D1
        RET
        ;24C02應答信號檢測子程序
        SACK: SETB SDA
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        D2:MOV C,SDA
        JC D2
        CLR SCL
        RET
        ;24C02停止通信子程序
        STOP: CLR SDA
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        SETB SDA
        LCALL DE5U
        CLR SCL
        RET
        ;5U延時子程序
        DE5U: NOP
        NOP
        NOP
        NOP
        NOP
        RET
        ;顯示數據表
        TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H
        DB 0F8H,080H,090H,088H,083H,0C6H,0A1H
        DB 086H,08EH

        END

        ................................帶復位的記憶開機次數程序(已調試過).....................................

        wp bit p1.0
        scl bit p1.1
        sda bit p1.2

        count equ 30h;開機次數計數器
        date equ 31h;IIC數據緩沖器

        org 0000h
        sjmp main
        org 0003h
        ljmp inx0
        org 000bh
        ljmp itx0
        org 0030h
        main:clr wp
        clr ea
        mov sp,#40h
        mov dptr,#tab
        lcall init
        lcall reiic
        mov count,date
        inc count
        mov r1,count
        lcall wriic
        setb ea
        sjmp $

        /*=============INT0,TO中斷初始化程序===================*/

        init:mov tmod,#00000001b
        mov th0,#0d8h
        mov tl0,#00h
        setb et0
        setb it0
        setb ex0
        setb tr0
        ret

        /*=============LED動態顯示程序===================*/

        itx0:mov th0,#0d8h
        mov tl0,#00h
        mov a,count
        mov b,#100
        div ab
        mov r0,a
        movc a,@a+dptr
        mov p0,a
        cjne r0,#0,n1
        sjmp n2
        n1:clr p2.2
        lcall d2ms
        setb p2.2
        n2:mov a,b
        mov b,#10
        div ab
        mov r0,a
        movc a,@a+dptr
        mov p0,a
        cjne r0,#0,n3
        sjmp n4
        n3:clr p2.1
        lcall d2ms
        setb p2.1
        n4:mov a,b
        movc a,@a+dptr
        mov p0,a
        clr p2.0
        lcall d2ms
        setb p2.0
        reti

        /*=============復位程序===================*/

        inx0:clr tr0
        mov r1,#00h
        lcall wriic
        lcall d10ms
        lcall reiic
        mov count,date
        setb tr0
        reti

        /*=============AT24C02讀寫程序===================*/
        wriic:lcall start
        mov date,#10101110b
        lcall write
        lcall wack
        mov date,#00h
        lcall write
        lcall wack
        mov date,r1
        lcall write
        lcall wack
        lcall stop
        ret

        reiic:lcall start
        mov date,#10101110b
        lcall write
        lcall wack
        mov date,#00h
        lcall write
        lcall wack
        lcall start
        mov date,#10101111b
        lcall write
        lcall wack
        lcall read
        lcall stop
        ret

        read: mov r3,#08h
        e1:setb sda
        setb scl
        lcall d5u
        mov c,sda
        rlc a
        clr scl
        lcall d5u
        djnz r3,e1
        mov date,a
        ret

        start:setb sda
        setb scl
        lcall d5u
        clr sda
        lcall d5u
        clr scl
        ret

        write:mov a,date
        mov r4,#08h
        w1:rlc a
        mov sda,c
        lcall d5u
        setb scl
        lcall d5u
        clr scl
        lcall d5u
        djnz r4,w1
        ret

        wack: setb sda
        setb scl
        lcall d5u
        w2:mov c,sda
        jc w2
        clr scl
        ret

        stop: clr sda
        setb scl
        lcall d5u
        setb sda
        lcall d5u
        clr scl
        ret

        tab:DB 0C0H,0F9H,0A4H,0B0H,99H
        DB 92H,82H,0F8H,80H,90H

        d5u: nop
        nop
        nop
        nop
        nop
        ret

        D10ms: ;誤差 -0.000000000002us
        MOV R6,#0F9H
        DL0:
        MOV R5,#22H
        DJNZ R5,$
        DJNZ R6,DL0
        RET

        d2ms: ;誤差 -0.217013888889us
        MOV R6,#0b0H
        DL1:
        MOV R5,#0AH
        DJNZ R5,$
        DJNZ R6,DL1
        RET

        end



        關鍵詞: 24C02EEPROM開機次

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 婺源县| 西宁市| 沅陵县| 宁夏| 孝昌县| 绥棱县| 台湾省| 惠东县| 喀喇| 濉溪县| 宜州市| 青川县| 子长县| 玉树县| 安庆市| 海门市| 屏山县| 资源县| 淮阳县| 明光市| 津南区| 富平县| 许昌市| 杭州市| 页游| 大关县| 鄢陵县| 苏尼特左旗| 方正县| 依安县| 阿克苏市| 佛教| 甘孜县| 新巴尔虎左旗| 新营市| 章丘市| 申扎县| 陵水| 凤城市| 无锡市| 海门市|