分享一段自己写的24C02外部存储器的读写汇编子程序-已通过严谨测试
chaily945202012/09/19软件综合 IP:广东
这几天研究IIC总线,重新按自己的思路写了这个24C02的读写程序,用于在自己的主程序中调用。24C02可用于对数据采集的掉电保存或者系统的设置的读取或保存,对于没有数据保存能力的MCU是有很大作用的。使用两个I/O口模拟IIC总线与24C02做数据通信,很多人总觉得汇编很复杂,其实优化过的汇编是很简洁的,直指硬件的时序操作,也很直观,汇编达人请指正一些不够完善的地方,也欢迎大家讨论~~ [s:227]
分享一下汇编程序如下:

;数据写或读用A作为位载体,R2作为24c02位置字节地址,R3是写入或读出的内容
SDA EQU P2.0;定义24C02的串行数据线
SCL EQU P2.1;定义24C02的串行时钟线
ORG 0000H
AJMP START
ORG 0030H
START:MOV SP,#60H
MAIN:  放入需要的主程序
AJMP $


XIE:  写数据子程序,R2是要写入的24c02的字节位置地址,R3是要写入的内容
LCALL STAR;起始条件
MOV A,#10100000B;寻址24C02的总线硬件地址并使用写入命令
LCALL SDATA;传输数据A给24C02
MOV A,R2   ;确定要写入的字节位置地址
LCALL SDATA;传输数据A给24C02
MOV A,R3   ;把数据R3写入刚指定的字节地址
LCALL SDATA;传输数据A给24C02
;此处可在一页中(24C02一页为8字节,共32页)继续连续写入,注意一次不超过8个字节,字节地址自动+1,也可以不连续写
LCALL STOP;写入结束
LCALL CHULI ;提供2ms给24C02内部处理刚写入的数据,注意只有写完数据需要给24C02一定的处理时间
RET

DU:   ;读数据子程序,R2是要读的24c02的字节位置地址,读完后A传给R3
LCALL STAR;起始条件
MOV A,#10100000B;寻址24C02的总线硬件地址并使用写入命令(注意这里是写入命令)
LCALL SDATA;传输数据A给24C02
MOV A,R2   ;注意,这里是使24C02的字节地址指针变成R2的值,也就是确定要读取的字节位置地址
LCALL SDATA;传输数据A给24C02
LCALL STAR ;重复起始条件
MOV A,#10100001B;寻址24C02的总线硬件地址并使用读出命令(这里正式发起读命令)
LCALL SDATA;传输数据A给24C02
LCALL RDATA;从之前指定的字节地址中读出字节内容到A
LCALL STOP ;读取完毕(这里并没有连续读取,只能读一个字节,要多个字节连续读取,请自己在R2上做变址读取循环)
MOV R3,A  读出的字节传给R3
RET

STAR:SETB SDA ;起始条件子程序
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
RET

SDATA:MOV R0,#08H ;向24C02传输数据子程序
LOOP0:CLR SCL
RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
DJNZ R0,LOOP0
CLR SCL
NOP
SETB SDA
NOP
NOP
SETB SCL
REP:MOV C,SDA
JC REP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET

RDATA:MOV R0,#08H  从24C02读取数据子程序(读取一个字节以后不做应答)
LOOP1:SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
NOP
NOP
DJNZ R0,LOOP1
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET

STOP:CLR SDA   ;结束条件
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET

CHULI: ;1999uS  这里是用于写完数据以后留给24C02的内部数据处理时间,2ms是一个非常保险的时间,最短需要1ms
    MOV R6,#04H
WR0:
    MOV R5,#0F8H
    DJNZ R5,$
    DJNZ R6,WR0
    RET
END
来自:计算机科学 / 软件综合
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
chaily94520
进士 笔友
文章
10
回复
82
学术分
0
2012/03/19注册,1年0个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}