怎样制作简易24CXX存储器读写工具?

怎样制作简易24CXX存储器读写工具?,第1张

1、先买一个电脑打印机的打印线(两端有插头);

2、再找一块现在市上卖的多用线路板,两孔肆槐相连的,截下一小块;

3、将两个8脚IC插座及相关元件焊好(两个插座并联),

4、将打印插头联裂团友线全焊掉,清理干净,留下5根备用,其余或衫包好不用,将小插头线接好(特别注意引脚编号);

5、大插头保留外壳(插头丢掉)焊上线路板,扣上外壳即成一个美观实用的读写器。

SDA EQU P1.6 (你可以根据你的情况变更引脚)

SCL EQU P1.7

D15US,D1MS子程序分别为15uS和1mS延时程序,请根据你的晶体自行编写。

**************************************************************

24C01写初始.(传递的数据在R7中戚衡).

**************************************************************

sda bit p1.7

scl bit p1.6

org 0000

ajmp star

org 00040

star:

mov p3,#00H

mov 30H,#01H

mov 31h,#88h

nop

nop

nop

acall at2401w

nop

nop

nop

nop

nop

ajmp $

AT2401W: MOV P1,#0FFH 置SDA/SCL=1

LCALL R2STAR 写开始状态字

MOV R7,#10100000B SET 2401=写

LCALL R2SEND 送

MOV ACC,30H 30H指向2401数据的起始地址

MOV R7,ACC 将要写2401的起始地址送到R7

LCALL R2SEND

MOV ACC,31H 取第一个号

MOV R7,ACC 数据传递到R7

LCALL R2SEND 写具体号码

LCALL R2STOP 停止

LCALL D1MS 等待一定时间使24C01内部写完成

RET

------------------------------------------

写到2401 本程序开始及结束侍拍SDA &SCL 均=0 ,发送数据在R7

------------------------------------------

R2SEND: PUSH ACC 保存ACC

MOV ACC,R7 将R7中的数发送出去

MOV R6,#08H 往2401发送数据

R2SLOP1: RLC A 将ACC中的数据移到数据线上

MOV SDA,C 送出数据

LCALL D15US

SETB SCL 发送串行时钟进行写 *** 作

LCALL D15US

CLR SCL

DJNZ R6,R2SLOP1 串行发送8 BIT

SETB SDA 准备接收ACK

LCALL D15US

SETB SCL 接收ACK的时钟

LCALL D15US

R2SLOP2: MOV C,SDA 写完后等待确认信号 ACK

JC R2SLOP2

CLR SCL 为下一步其它 *** 作做准备

CLR SDA

POP ACC 还原ACC

LCALL D1MS 等待内部写完

RET

*******************************************************************

2401读初始.

------------------------------------------------------------------

AT2401RC: LCALL R2STAR 写状态字

MOV R7,#10100000B SET 2401=WRI

LCALL R2SEND 送出状态字

MOV A,30H 上程序传来的读取地址

MOV R7,A 地址数据送R7

LCALL R2SEND 送出数据

MOV P1,#11111111B 保证SDA/SCL起始=1

LCALL R2STAR

MOV R7,#10100001B 0A1H 读状态

LCALL R2SEND

LCALL R2READ 读所需的数

LCALL R2STOP

RET

**************************************************************

设高谈做置开始 ,初始SDA &SCL=1,结束 SDA &SCL=0

--------------------------------------------------------------

R2STAR: LCALL D15US 对2401 *** 作开始

CLR SDA 在SCL=1时,SDA由1变为0表示开始

LCALL D15US

CLR SCL

LCALL D15US

RET

----------------------------------------------------------------

读取2401数据

----------------------------------------------------------------

R2READ: PUSH ACC 保存ACC

MOV R6,#08H

R2RLOP1: SETB SDA 置数据线=1

LCALL D15US

SETB SCL 输出一个串行时钟

LCALL D15US

MOV C,SDA 读数据线上的数据到 C

RLC A 移到 ACC

LCALL D15US

CLR SCL

DJNZ R6,R2RLOP1 读 8 BIT 数据

LCALL D15US

CLR SDA

MOV R7,ACC 将接收到的数据保存到R7

POP ACC 还原ACC

RET

----------------------------------------------------------------

设置结束 在SEND &READ 后DSA &SCL均=0 ,本程序退出后 SDA &SCL=1

----------------------------------------------------------------

R2STOP: LCALL D15US 对2401 *** 作结束

SETB SCL 在SCL=1时,SDA由0变为1表示结束

LCALL D15US

SETB SDA

LCALL D15US

RET

d1ms: mov r2,#0F8h

a_1: djnz r2,a_1

nop

ret

d15us: mov r3,#0fh

b_1: djnz r3,B_1

ret

上面的程序是把C51,,31H的88数写在24CXX的01地址上,

用的是6M的晶体,用P1。7==SDA数据线

P1。6是SCL时钟线

24C011Page * 32rows * 4bytes * 8 bit = 128bytes = 1kbits

24C021Page * 32rows * 8bytes * 8 bit = 256bytes = 2kbits

24C042Page * 16rows * 16bytes * 8 bit = 512bytes = 4kbits

24C084Page * 16rows * 16bytes * 8 bit = 1024bytes = 8kbits

24C168Page * 16rows * 16bytes * 8 bit = 2048bytes = 16kbits

因为24C01是每行4个字节,例如从0x02开始连续写12个字节者帆,就是

0x02 0x03向0x03地址写完后换行

0x04 0x05 0x06 0x07向0x07地址写茄耐完后换行首纳雹

0x08 0x09 0x0a 0x0b向0x0b地址写完后换行

0x0c 0x0d


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12533155.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存