新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 24C02(EEPROM)以字節(jié)讀寫程序(ASM)

        24C02(EEPROM)以字節(jié)讀寫程序(ASM)

        作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
        24C02字節(jié)讀寫時(shí)序

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

        選擇性讀時(shí)序

        .................24c02字節(jié)讀寫程序(已調(diào)試過).......................


        ;////////////////////////////////////////////////////
        ;AT89C52與AT24C02的IIC通信
        ;控制數(shù)碼管顯示0-P
        ;AT24C02采用字節(jié)寫和選擇性讀
        ;////////////////////////////////////////////////////
        DAUN EQU 18 ;寫入字節(jié)數(shù),對(duì)24C02(256BK)最大為255
        ADDR EQU 41H ;24C02操作數(shù)據(jù)地址
        WRDA EQU 42H ;寫入數(shù)據(jù)暫存器
        RDDA EQU 43H ;讀出數(shù)據(jù)暫存器

        WP BIT P1.0
        SCL BIT P1.1
        SDA BIT P1.2

        ORG 0000H
        SJMP MAIN
        ORG 0030H
        MAIN: CLR WP;開寫保護(hù)
        MOV SP,70H
        MOV P2,#0F7H
        MOV P0,#0FFH
        LCALL WRIIC;寫24C02
        LCALL DE1S
        D1:LCALL RDIIC;讀24C02
        LJMP D1

        ;寫24C02子程序
        WRIIC:MOV DPTR,#TAB
        MOV R0,#DAUN
        MOV ADDR,#00H;地址賦初值
        D2:LCALL START
        MOV WRDA,#0AEH
        LCALL SEND
        LCALL SACK
        MOV A,ADDR
        MOV WRDA,A
        LCALL SEND
        LCALL SACK
        CLR A
        MOVC A,@A+DPTR
        MOV WRDA,A
        LCALL SEND
        LCALL SACK
        LCALL STOP
        INC DPTR;數(shù)據(jù)表指針加一
        INC ADDR;24C02寫入地址加一
        LCALL D50U;寫入數(shù)據(jù)延時(shí),這個(gè)時(shí)間很重要
        DJNZ R0,D2
        RET
        ;讀24C02子程序
        RDIIC:MOV R0,#DAUN
        MOV ADDR,#00H
        D5:LCALL START
        MOV WRDA,#0AEH
        LCALL SEND
        LCALL SACK
        MOV A,ADDR
        MOV WRDA,A
        LCALL SEND
        LCALL SACK

        LCALL START
        MOV WRDA,#0AFH
        LCALL SEND
        LCALL SACK
        LCALL READ
        LCALL STOP;不需要讀應(yīng)答案信號(hào)

        MOV A,RDDA
        MOV P0,A
        LCALL DE1S
        INC ADDR;讀24C02數(shù)據(jù)地址加一
        DJNZ R0,D5
        RET
        ;24C02開始子程序
        START:SETB SDA
        SETB SCL
        LCALL DE5U
        CLR SDA
        LCALL DE5U
        CLR SCL
        RET
        ;24C02寫一個(gè)字節(jié)子程序
        SEND: MOV R1,#08H
        MOV A,WRDA
        D3:RLC A
        MOV SDA,C
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        CLR SCL
        DJNZ R1,D3
        RET
        ;24C02讀一個(gè)字節(jié)子程序
        READ: MOV R1,#08H
        D6:SETB SDA
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        MOV C,SDA
        RLC A
        CLR SCL
        DJNZ R1,D6
        MOV RDDA,A
        RET
        ;24c03寫應(yīng)答子程序
        SACK: SETB SDA
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        D4:MOV C,SDA
        JC D4
        CLR SCL
        RET
        ;24C02通信結(jié)束子程序
        STOP: CLR SDA
        LCALL DE5U
        SETB SCL
        LCALL DE5U
        SETB SDA
        LCALL DE5U
        CLR SCL
        RET
        ;5US延時(shí)子程序
        DE5U: NOP
        NOP
        NOP
        NOP
        NOP
        RET
        ;1S延時(shí)子程序
        DE1S: MOV R3,#100
        E1:MOV R4,#20
        E2:MOV R5,#248
        DJNZ R5,$
        DJNZ R4,E2
        DJNZ R3,E1
        RET
        ;50US延時(shí),讓24C02寫入片內(nèi)ROM;
        D50U:MOV R6,250
        E3:NOP
        NOP
        NOP
        NOP
        DJNZ R6,E3
        RET
        ;顯示數(shù)據(jù)表
        TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H
        DB 0F8H,080H,090H,088H,083H,0C6H,0A1H
        DB 086H,08EH,089H,08CH

        END

        =====================================================================================

        /////////////////////////////
        ;此程序可歷遍整個(gè)EEPROM(256個(gè)字節(jié))
        ////////////////////////////
        wp equ p1.0
        scl equ p1.1
        sda equ p1.2

        wrda equ 40h
        rdda equ 41h

        org 0000h
        sjmp main
        org 0030h
        main:clr wp
        clr p2.0
        clr a
        mov r2,a
        mov r3,a
        mov p0,#020h
        mov sp,#70h
        mov 42H,#020h//要讀寫的字節(jié)數(shù)
        mov dptr,#tab
        n1:lcall wriic
        lcall d10m
        djnz 42,n1
        mov 43,#020h
        n2:lcall rdiic
        lcall d10m
        djnz 43,n2
        sjmp $

        wriic:lcall start
        mov wrda,#10101110b
        lcall send
        mov wrda,r2
        inc r2
        lcall send

        w1:clr a
        movc a,@a+dptr
        mov wrda,a
        lcall send
        inc dptr
        lcall stop
        ret

        rdiic:lcall start
        mov wrda,#10101110b
        lcall send
        mov wrda,r3
        inc r3
        lcall send
        lcall start
        mov wrda,#10101111b
        lcall send
        lcall read
        mov p0,rdda
        lcall d1s
        lcall stop
        ret

        read: mov r1,#08h
        d1:setb sda
        lcall d3u
        setb scl
        lcall d3u
        mov c,sda
        rlc a
        clr scl
        lcall d3u
        djnz r1,d1
        mov rdda,a
        lcall stop
        ret

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

        send: mov r0,#08h
        mov a,wrda
        s1:rlc a
        mov sda,c
        LCALL D3U
        setb scl
        lcall d3u
        clr scl
        lcall d3u
        djnz r0,s1

        setb sda
        lcall d3u
        setb scl
        lcall d3u
        s2:mov c,sda
        jc s2
        clr scl
        ret

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

        d3u: nop
        nop
        ret

        TAB: DB 0C0H,0F9H,0A4H,0B0H
        DB 99H,92H,82H,0F8H
        DB 80H,90H,88H,83H
        DB 0C6H,0A1H,86H,8EH
        DB 0C0H,0F9H,0A4H,0B0H
        DB 99H,92H,82H,0F8H
        DB 80H,90H,88H,83H
        DB 0C6H,0A1H,86H,8EH

        D10m: ;誤差 0us
        MOV R7,#01H
        DL1:
        MOV R6,#26H
        DL0:
        MOV R5,#82H
        DJNZ R5,$
        DJNZ R6,DL0
        DJNZ R7,DL1
        RET

        D1s: ;誤差 0us
        MOV R7,#0A7H
        DL4:
        MOV R6,#0ABH
        DL3:
        MOV R5,#01H
        DJNZ R5,$
        DJNZ R6,DL3
        DJNZ R7,DL4
        NOP
        RET

        END



        關(guān)鍵詞: 24C02EEPROM字節(jié)讀

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 三河市| 盐津县| 鄂托克旗| 凤山县| 当涂县| 岢岚县| 寿光市| 江口县| 察隅县| 广安市| 吴堡县| 静安区| 沽源县| 长白| 宜良县| 通道| 伊宁县| 谷城县| 涡阳县| 和顺县| 沅陵县| 朝阳市| 马关县| 内乡县| 称多县| 金门县| 浮山县| 开封县| 吉木萨尔县| 瑞安市| 鹤庆县| 大兴区| 宿松县| 深圳市| 台中县| 睢宁县| 平湖市| 梨树县| 隆化县| 林西县| 耿马|