[资料分享] 51单片机写入24C02一个字节数据的汇编代码。有详细注释,搭电路测试通过

tonytong   2010-3-25 16:50 楼主
;读写24C02   P1.3时钟信号    P1.4 数据信号  器件地址三个引脚全部接  地
        clr p1.3 ;时钟信号初始化
        setb p1.4;初始化scl低,sda高
        setb p1.3 ;第一个时钟
        nop
        clr p1.4 ;数据信号相低跳变,表示起始信号
        nop
        clr p1.3;第一个脉冲结束,起始信号发送完毕
        mov a,#0a0h ;器件地址10100000 表示写入前四位是固定的,接下来三位就是123引脚,全接地,所以都是0 。最后一个0表示写入
        acall cadd  ;发送器件地址,cadd是发送8位数据的子程序,相当于一个脉冲,往出移一位数据
        setb p1.4  ;准备接收应答信号
        nop
        setb p1.3  ;给时钟信号,检测Ack回执信号
        jb p1.4,$  ;等待ACK
        nop
        clr p1.3 ;读到应答信号,时钟结束
        mov a,#33h;写入编程地址,数据要写到24C02的哪个单元,我写入了33h单元
        acall cadd  发送地址
        setb p1.4
        nop
        setb p1.3  ;给时钟,接收ACK。其实和上面发送是一样的
        jb p1.4,$
        nop
        clr p1.3  ;读到ACK信号后时钟结束
        mov a,33h  ;写入数据
        acall cadd
        nop
        setb p1.4  ;相当于再发送8位数据
        nop
        setb p1.3
        jb p1.4,$
        nop
        clr p1.3 ;写入数据后接收到ACK
        
        clr p1.4 ;以下是发送停止信号,以便24C02把接收到的数据正真写到芯片中
        nop
        setb p1.3 ;时钟高电平
        nop
        setb p1.4 ;数据上升跳变表示停止位
        nop
        clr p1.3 ;时钟结束,停止位发送完毕。同样写操作完成。
        
cadd:        MOV R7,#08H
Nda:        MOV C,ACC.7
               MOV p1.4,C;给数据
               RL A
               SETB P1.3 ;给时钟
               nop
               clr p1.3 ;时钟结束
             DJNZ R7,Nda
RET

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复