您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页AT24C02的读写

AT24C02的读写

来源:华佗养生网
AT24C02的读写 作者: 来源: 阅读次数:372 AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。 ;这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序 ORG 0000H SCL BIT P3.4;定义24C02的串行时钟线 SDA BIT P3.5;定义24C02的串行数据线 LJMP START START:LCALL STAR;调用 MOV R2,#08H;一个数据有8位 MOV DPTR,#0600H;定义源数据的位置 LOOP:MOV A,#00H MOVC A,@A+DPTR LCALL SDATA LCALL ACK JC LOOP INC DPTR DJNZ R2,LOOP LCALL STOP;调用停止子程序 STAR:SETB SDA SETB SCL NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP CLR SCL RET SDATA:MOV R0,#08H LOOP0:RLC A MOV SDA,C NOP NOP SETB SCL NOP NOP NOP NOP CLR SCL DJNZ R0,LOOP0 RET ACK:SETB SDA NOP NOP SETB SCL NOP NOP NOP NOP MOV C,SDA CLR SCL RET STOP:CLR SDA NOP NOP NOP NOP SETB SCL NOP NOP NOP NOP SETB SDA NOP NOP NOP NOP RET ORG 0600H DB 0A0H,10H,01H,02H,03H,04H,05H,06H END 读写子程序如下: ;写串行E2PROM子程序EEPW ; R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000) ; (R4)=片内字节地址 ; (R1)=欲写数据存放地址指针 ; (R7)=连续写字节数n EEPW: MOV P1,#0FFH CLR P1.0 ;发开始信号 MOV A,R3 ;送器件地址 ACALL SUBS MOV A,R4 ;送片内字节地址 ACALL SUBS AGAIN: MOV A,@R1 ACALL SUBS ;调发送单字节子程序INC R1 DJNZ R7,AGAIN;连续写n个字节 CLR P1.0 ;SDA置0, 准备送停止信号 ACALL DELAY ;延时以满足传输速率要求 SETB P1.1 ;发停止信号 ACALL DELAY SETB P1.0 RET SUBS: MOV R0,#08H ;发送单字节子程序 LOOP: CLR P1.1 RLC A MOV P1.0,C NOP SETB P1.1 ACALL DELAY DJNZ R0,LOOP ;循环8次送8个bit CLR P1.1 ACALL DELAY SETB P1.1 REP: MOV C,P1.0 JC REP ;判应答到否,未到则等待 CLR P1.1 RET DELAY: NOP NOP RET ;读串行E2PROM子程序EEPR ;(R1)=欲读数据存放地址指针 ;; R3=10100001(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000) ;(R4)=片内字节地址 ;(R7)=连续读字节数 EEPR: MOV P1,#0FFH CLR P1.0 ;发开始信号 MOV A,R3 ;送器件地址 ACALL SUBS ;调发送单字节子程序 MOV A,R4 ;送片内字节地址 ACALL SUBS MOV P1,#0FFH CLR P1.0 ;再发开始信号 MOV A,R3 SETB ACC.0 ;发读命令 ACALL SUBS MORE: ACALL SUBR MOV @R1,A INC R1 DJNZ R7,MORE CLR P1.0 ACALL DELAY SETB P1.1 ACALL DELAY SETB P1.0 ;送停止信号 RET SUBR: MOV R0,#08H ;接受单字节子程序 LOOP2: SETB P1.1 ACALL DELAY MOV C,P1.0 RLC A CLR P1.1 ACALL DELAY DJNZ R0,LOOP2 CJNE R7,#01H,LOW SETB P1.0 ;若是最后一个字节置A=1 AJMP SETOK LOW: CLR P1.0 ;否则置A=0 SETOK: ACALL DELAY SETB P1.1 ACALL DELAY CLR P1.1 ACALL DELAY SETB P1.0 ;应答毕,SDA置1 RET 程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务