
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 = 1kbits24C021Page * 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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)