找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13202|回复: 1
打印 上一主题 下一主题
收起左侧

AT24C512存储器的应用 源程序 中文资料

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-24 18:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 51黑黑黑 于 2016-3-3 00:54 编辑

(一)、AT24C512简介
  AT24C512Atmel公司生产的64KB串行电可擦的可编程存储器,内部有512页,每一页为128字节,任一单元的地址为16位,地址范围为00000FFFFH。它采用8引脚封装,具有结构紧凑、存储容量大等特点,可以在2线总线上并接4片芯片,特别适用于具有大容量数据存储要求的数据采集系统,因此在测控系统中被大量采用。该芯片的主要特性如下:存储容量为65536byte;与100kHz400kHz1MHzI2C总线兼容;100000次编程/擦写周期;单电源、读写电压为 1.8V5.5VESD保护电压>4kV;数据可保存40年;写保护功能,当WP为高电平时,进入写保护状态;CMOS低功耗技术,最大写入电流为3mA128byte页写入缓存器;自动定时的写周期;具有8引脚DIP20引脚SOIC封装等多种封装形式。
1AT24C512的引脚和功能如下图:

 ①A0A1——地址选择输入端。在串行总线结构中,如需连接4AT24C512芯片,则可用A0A1来区分各芯片。A0A1悬空时为0
  ②SDA——双向串行数据输入输出口。用于存储器与单片机之间的数据交换。
  ③SCL——串行时钟输入。通常在其上升沿将SDA上的数据写入存储器,而在下降沿从存储器读出数据并送往SDA
  ④WP——写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储器操作被禁止。如果不连,该脚将在芯片内部下拉到地。
  ⑤VCC——电源。
  GND接地。NC悬空。
2)起停信号
时钟线保持高电平期间,数据线电平从高到低的跳变代为I2C总线的起始信号。时钟线保持高电平期间,数据线电平从低到高的跳变代为I2C总线的停止信号。
3)器件寻址
   主器件通过发送1个起始信号启动发送过程,然后发送它所需要寻址的从器件地址,8位从器件地址的高5位固定为10100,接下来的2位(A0A1)为器件的地址位,因此最多可以将4AT24C512连接到同一总线上使存储容量扩展至256Kbyte。注意,这两位必须与A0A1两引脚的输入状态相对应,从器件地址的最低位为读写控制位,“1”表示对从器件进行读操作,“0”表示对从器件进行写操作,在主器件发送起始信号和从器件发送地址字节后,AT24C512监测总线并当其地址与发送的从地址相符时发出1个应答信号(通过SDA线),AT24C512再根据读写控制位(R/W)的状态进行读写操作,从器件地址字节内容如下图所示。


4)应答信号
I2C总线传送数据时,每成功传送1个字节,接收器都必须产生1个应答信号,应答的器件在第9个时钟周期将SDA线拉低表示其已收到1个8位数据。AT24C512在接收到起始信号和从器件地址之后产生应答信号,如果器件已选择了写操作,则在每接收1个8位字节之后会有1个应答信号ACR。
5)写操作

AT24C512的写操作有写字节和写页两种方式。写字节时通常在向AT24C512发送设备地址字并接到应答信号后,还需要发送2个8位地址来选择要写数据的地址。AT24C512接收到这个地址后会应答一个ACR信号,然后接收8位数据进来,并再返回一个应答信号。


6)读操作
  读操作有当前地址读、随机读、读串三种方式。其初始化过程基本与写操作相同,只是在设备选择字中的最低位要改成读而已。在当前地址读操作方式时,内部数据的地址将保持在最后的读写操作地址加1上,读串操作既可以是当前地址读,也可以是随机地址读。当单片机接收到数据但不送应答信号时,读过程结束。




(二)、AT24C512读写操作的51汇编语言编程

         ORG 0000H
           AJMP KS
            ORG 0003H
            RETI
            ORG 000BH
            LJMP 0C00H
       RETI
            ORG 001BH
            RETI
            ORG 0023H
       ;AJMPS       ;接收数据转S
       SDA EQU 0B6H
       SCL  EQU  0B5H
   KS:
     MOVSP,#60H      ;设堆栈指针
      MOV A,#21H
    MOV 89H,A  ;定时器1    工作方式2,8位可重装
      MOV 8BH,#0F3H ;给定时器1赋值6M=F31200波特率,0.833毫秒/,12M=E8H
     MOV8DH,#0F3H ;给定时器0赋值6M=F31200波特率,0.833毫秒/,12M=E8H
       MOV 8CH, #3CH
     MOV 8AH, #0C0H
      SETB 0BCH   ;通信中断优先,IPPS1
    MOVA,#9AH      ;;;IE
    MOV 0A8H,A   
    SETB8EH    ;开始定时,TR1=1
       SETB ET0       ;
     MOV A,#50H;;设串行口模式1,允许接收。
    MOV 98H,A  ;送串行控制SCON
Q:       CLR A
      MOVR2,#90D     ;清数据区
      MOV R0,#30H
  QING:MOV@R0,A  ;清数据区
      INC R0
       INC A
      DJNZ R2,QING
      ACALL WRITE
      ACALL READ0
     AJMP Q
              
READ0:  MOVR1,#30H            ;读表号和电度数到显示缓冲区30-37
      MOV R4,58H
      MOV R5,59H
      MOV R7,#9   ;;;;;
READ:   SETB SCL
      SETB SDA
      CLR SDA
      MOVA,#10100010B    ;写命令
      ACALL SUBS
      MOV A,R4
      ACALL SUBS
      MOV A,R5
      ACALL SUBS
      SETB SCL
      SETB SDA
      CLR SDA
      MOVA,#10100011B    ;读命令
      ACALL SUBS
      SETB ACC.0
READ1:  ACALL SUBR
      MOV @R1,A
      ;ACALLFSD        ;调向PC发送一个字节子程序      
      INC R1
      DJNZ R7,READ1
      CLR SDA
      ACALL DELAY
      SETB SCL
      ACALL DELAY
      SETB SDA
      RET
FSD:      CLR    ES
       MOV    A,   @R1
       ANL    A,     #0F0H
       SWAP   A
       MOV    SBUF,   A
       JNB    TI,    $
       CLR    TI
       MOV    A,  @R1
       ANL    A,     #0FH
       MOV    SBUF,   A
       JNB    TI,    $
       CLR    TI
       SETB   ES
       RET
WRITE:  MOV R1,  #30H        ;数据存储地址
       MOV  R7,  #9          ;写数据9个字节
ww:     MOVR4,58H;            ;写地址高位
      MOVR5,59H;            ;写地址低位
ww1:     SETB SDA;setb p3.6
      SETB SCL;setb p3.5
      CLR SDA
      MOVA,#10100010B       ;写命令
      ACALL SUBS
      MOVA,R4               ;写地址高位
      ACALL SUBS
      MOVA,R5           ;写地址低位
      ACALL SUBS
WRITE1:MOV A,@R1
      ACALL SUBS
      INC R1
      DJNZ R7,WRITE1
      CLR SDA
      ACALL DELAY
      SETB SCL
      ACALL DELAY
      SETB SDA
      RET
      
SUBS:   MOVR0,#08H            ;512一个字8位,或者数据或者命令
LOOP:    CLRSCL
      RLC A
      MOV SDA,C
;     NOP
      SETB SCL
      ACALL DELAY
      DJNZ R0,LOOP
      CLR SCL
      ACALL DELAY
      SETB SCL
REP:      MOV C,SDA
      JC REP
      CLR SCL
      RET

EEPR:   SETBSCL           ;512一个字
      SETB SDA
      CLRSDA                   ;边沿要求
      MOVA,#10100010B    ;写命令
      ACALL SUBS
      MOVA,R4           ;写地址高位
      ACALL SUBS
      MOVA,R5           ;写地址低位
      ACALL SUBS
       SETBSCL           
      SETB SDA
      CLR SDA
      MOVA,#10100011B    ;写命令
      ACALL SUBS
      SETB ACC.0
MORE:   ACALLSUBR             ;读数据
      MOV @R1,A
      INC R1
      DJNZ R7,MORE
      CLR SDA
      ACALL DELAY
      SETB SCL
      ACALL DELAY
      SETB SDA
      RET
      
SUBR:   MOV R0,#08H
LOOP2:  SETB SCL
      ACALL DELAY
      MOV C,SDA
      RLC A
      CLR SCL
      ACALL DELAY
      DJNZ R0,LOOP2
      CJNE R7, #01H,Loop3
      SETB SDA
      AJMP SETOK
Loop3:   CLR SDA
SETOK:  ACALL DELAY
      SETB SCL
      ACALL DELAY
      CLR SCL
      ACALL DELAY
      SETB SDA
      RET

DELAY:  NOP
;     NOP
      RET
      
YSA:   MOV     7EH,   #18H
YSA1:  DJNZ    7EH,   YSA1
       RET
YSB:  MOV     7EH,   #0FFH
YS1B:  MOV     7FH,   #0FFH
YS2B:  DJNZ    7FH,   YS2B
       DJNZ    7EH,   YS1B
       RET


END

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390295 发表于 2018-8-27 09:45 来自触屏版 | 只看该作者
楼主:能推荐帮助解决24512丢数据难题吗?感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表