全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

E2PROM读写程序

[复制链接]
1742 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本人写的一个简单的E2PROM读写程序
SCL1 EQU P1.0 ;时钟
SDA1 EQU P1.1 ;数据
SCL2 EQU P1.2
SDA2 EQU P1.3
L1 EQU P1.4 ;操作成功指示,低电平点亮
L2 EQU P1.5
ORG 0000H
LJMP MAIN
ORG 0100H


MAIN: SETB L1
SETB L2
JB P1.6 ,$
ACALL START1
MOV R2,#0XA1 ;将控制字"1010 0001"传到R2,最后一位表示读
ACALL WRITE ;写入控制字
MOV R2,#00 ;设置要读地址
ACALL READ ;调用读命令
ACALL ASK1 ;应答
MOV 0X40,R2 ;将读得的数据传到40H
ACALL STOP1 ;停止读操作

ACALL START2
MOV R2,#0XA0 ;写控制字,表示以下这写操作
ACALL WRITE
MOV R2,#0X01 ;设置地址
ACALL WRITE
MOV R2,0X40 ;将上面读得的数据写入到01单元
ACALL WRITE
ACALL STOP2 ;停止操作
ACALL DELAY ;等待写完成

ACALL START2 ;启动
MOV R2,#0XA1 ;写入控制字,表示以下为读操作
ACALL WRITE
MOV R2,#01 ;写入读的起始地址
ACALL READ
ACALL ASK2

MOV 0X40,R2 ;以下连续读出了两个字节
ACALL READ
ACALL ASK1
MOV 0X41,R2
ACALL READ
ACALL ASK2
ACALL STOP2

MOV A,0X41 ;以下为比较读出结果与写入是否相等
CJNE A,0X40,ENDALL
CLR P1.4
ACALL DELAY
ENDALL: CLR P1.5
RET


START1: CLR SCL1 ;先将SCL置低才改变SDA,以免误操作
NOP
NOP
SETB SDA1
NOP
NOP
SETB SCL1
NOP
NOP
CLR SDA1
NOP
NOP
RET
START2: CLR SCL2
NOP
NOP
SETB SDA2
NOP
NOP
SETB SCL2
NOP
NOP
CLR SDA2
NOP
NOP
RET

STOP1: CLR SCL1 ;先将SCL置低才改变SDA,以免误操作
NOP
NOP
CLR SDA1
NOP
NOP
SETB SCL1
NOP
NOP
SETB SDA1
NOP
NOP
RET
STOP2: CLR SCL2 ;先将SCL置低才改变SDA,以免误操作
NOP
NOP
CLR SDA2
NOP
NOP
SETB SCL2
NOP
NOP
SETB SDA2
NOP
NOP
RET

;应答函数
ASK1: CLR SCL1 ;先将SCL置低才改变SDA,以免误操作
NOP
NOP
CLR SDA1 ;发低电平应答
NOP
NOP
SETB SCL1
NOP
NOP
RET
ASK2: CLR SCL2 ;先将SCL置低才改变SDA,以免误操作
NOP
NOP
CLR SDA2 ;发低电平应答
NOP
NOP
SETB SCL2
NOP
NOP
RET

;写一个字节
;R2为要写的数据,R3为每字节的位数,这儿为8位
;返回时C为应答信号,可以不理会这个值
WRITE: MOV R3,#8
MOV A,R2
WRLOOP: CLR SCL2
RLC A
NOP
MOV SDA2,C
NOP
NOP
SETB SCL2
NOP
NOP
DJNZ R3,WRLOOP
CLR SCL2 ;以下处理AT24C02的应答信号
NOP
NOP
SETB SDA2 ;置高SDA,用作输入,如果AT24C02拉低,表示正确
NOP
NOP
SETB SCL2
NOP
NOP
MOV C,SDA2 ;读取应答信号
RET

;读一个字节
;返回时R2为读得的数
READ: MOV R3,#8
RDLOOP1: CLR SCL1
NOP
NOP
SETB SDA1 ;拉高SDA,用作输入
NOP
NOP
SETB SCL1
NOP
NOP
MOV C,SDA1
RLC A
DJNZ R3,RDLOOP1
MOV R2,A
RET
RDLOOP2: CLR SCL2
NOP
NOP
SETB SDA2 ;拉高SDA,用作输入
NOP
NOP
SETB SCL2
NOP
NOP
MOV C,SDA2
RLC A
DJNZ R3,RDLOOP2
MOV R2,A
RET

;延时,用以保证写操作完成,写地址信号不用延时
DELAY: MOV 0X31,#20
AA: MOV 0X32,#200
DJNZ 0X32,$
DJNZ 0X31,AA
RET
END

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表