单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7056|回复: 2
收起左侧

单片机24C02存储器的数据复制器制作

[复制链接]
dzdiy 发表于 2015-4-12 02:56 | 显示全部楼层 |阅读模式
       电子小制作24C02存储器是基于I2C总线存储器,是一种 采用I2C总线接口进行数据存取的可擦除写入存储器件,广泛应用于音视频设备之中。早期产品如M58655、PCF8581等等,现在大多使用24系列存 储器件,如电视机中使用的24C02、24C04、24C08等等,用来存储电视机收看节目使用的制式、语言、工作模式及频道数据等信息。
       本文以24C02存储器为例,介绍一下I2C总线存储器的数据传输规范以及采用单片机对I2C总线存储器进行数据复制。
       图为24C02存储器的数据复制器电路原理图。这种电路配合下文程序,可完成两片存储器N1、N2之间数据复制。程序设计以N2为读取方,N1为写入方,完成将存储器N2中的数据复制到N1之中。




       24C02存储器的数据复制器电路核心采用单片机电路89S51。一个完整的微机系统必须包括处理器、内存(随机存储器)、ROM(程序存储器)及输入输出接口这几部分。所谓单片机就是将这几部分集成到一块电路中,从而形成一个完整的微机系统,可以独立完成一些较小的程序。现在单片机电路已经很普遍了,遥控电视机中的微处理器就是一种最常见的单片机电路。单片机电路89S51内部集成了128Byte的随机存储器RAM、4KByte的可擦写程序存储器ROM、P0-P3四个双向输入输出端口、一个标准的异步通讯接口,用来与电脑COM口连接,进行异步通讯。89S51并不具有标准的I2C总线通讯接口,这里仅通过软件模拟,实现与标准I2C总线接口存储器的数据通讯。
       存储器N2、N1与单片机89S51通过SDA、SCL两线,共同连接在一条I2C总线之上。N1的三位芯片地址线A0、A1、A2全部接地,N2的A0地址线则与正电源相接。这样的连接可以为两片同样型号的存储器设置了不同的芯片地址,这样单片机就能通过芯片地址的不同对同一总线上的两块存储器分别进行读写操作了。存储器N1、N2与电路的连接,采用插座方式。按放、拿取存储器电路时,需要使用开关“SW”将电源切断,保证断电操作。“复制”按键负责控制程序的运行。
       连接好电路之后,接通电源,按动“复制”键,程序进入执行,单片机依次读取N2中的数据,并将数据写入到N1中,在这同时还将读写数据送入P0接口,通过P0接口的八只发光管显示出来。数据复制完成后,发光管熄灭。
       24C02存储器的数据复制器源程序
;==============================
sda EQU p2.0
scl EQU p2.1
address EQU 08H
i2cdate EQU 09H
sbit p37=p3^7
sbit p36=p3^6
org 0000H
ljmp start
;======================== 存储器写
i2c_write:
i2c_write_a:
lcall i2c_start
mov a,r6
lcall i2c_send
lcall i2c_ack
Jc i2c_write_a
mov a,address
lcall i2c_send
lcall i2c_ack
mov a,i2cdate
lcall i2c_send
lcall i2c_ack
lcall i2c_stop
ret
;========================存储器读
i2c_read:
i2c_read_a:
lcall i2c_start
mov a,r2
lcall i2c_send
lcall i2c_ack
Jc i2c_read_a
mov a,address
lcall i2c_send
lcall i2c_ack
i2c_read_b:
lcall i2c_start
mov a,r4
lcall i2c_send
lcall i2c_ack
Jc i2c_read_b
i2c_rece:
lcall i2c_receive
mov i2cdate,a
lcall i2c_ack
lcall i2c_stop
ret
;=======================总线启动
i2c_start:
setb scl
setb sda
nop
nop
clr sda
nop
nop
clr scl
ret
;=======================总线停止
i2c_stop:
clr sda
nop
nop
setb scl
nop
nop
setb sda
ret
;======================存储器应答
i2c_ack:
setb sda
nop
nop
setb scl
Jb sda,i2c_ack0
clr c
sjmp i2c_ack_end
i2c_ack0:
setb c
i2c_ack_end:
nop
nop
clr scl
ret
;=====================发送八位数据
i2c_send:
mov b,#08H
i2c_send1:
rlc a
mov sda,c
setb scl
nop
nop
clr scl
djnz b,i2c_send1
ret
;====================接收八位数据
i2c_receive:
mov b,#08H
clr a
setb sda
i2c_receive_a:
setb scl
nop
nop
mov c,sda
rlc a
clr scl
djnz b,i2c_receive_a
ret
;=======================延时程序
delay:
mov r1,#255
djnz r1,$
ret
;===============256字节数据复制程序
copy:
mov r5,#0
s:
mov r2,#10100010b
mov r4,#10100011b
call i2c_read
mov i2cdate,a
mov p0,a
mov r6,#10100000b
call i2c_write
inc address
djnz r5, s
mov p0,#255
ret
;=========================主程序
start:
mov SP,#60H
mov p0,#255
mov p1,#255
mov p2,#255
mov p3,#255
mov address,#00H
wai:
jb p37,$
call delay
jnb p37,$
call copy
ljmp wai
end
       使用Keil软件对24C02存储器的数据复制器源程序进行编译,并写入AT89S51之中,就可以对24C02存储芯片进行复制了。对汇编程序进行相应改动,还可以适应所有24系列存储器之间的数据复制。

回复

使用道具 举报

阳光花园 发表于 2018-11-18 10:53 来自手机 | 显示全部楼层
你好,你的联系方式?
回复

使用道具 举报

新乡家电维修 发表于 2018-11-18 11:42 | 显示全部楼层
阳光花园 发表于 2018-11-18 10:53
你好,你的联系方式?

你要版权起诉吗,我看过原版书籍
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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