⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c02.txt

📁 eeprom的单片机程序
💻 TXT
字号:
;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时钟线 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -