DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 154|回复: 0
打印 上一主题 下一主题

24c64程序

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-30 14:15:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
24c64程序该程序已使用过,免调试。
;宏定义区;
N_NOPMACRO
nop
nop
nop
ENDM
TRAPMACRO
nop
nop
nop
sjmp$
ENDM

TRAP_RETMACRO
nop
nop
nop
ret
nop
nop
nop
sjmp$
ENDM
;===============================================
;function:start_24c;启动I2C总线
;input:---------
;output:---------
;usage:---------
;=============================================
start_24c:;启动I2C总线
setbCSDA;数据线下降沿产生
N_NOP
setbCSCL;时钟线下降沿
N_NOP
clrCSDA
N_NOP
clrCSCL
N_NOP
ret
;================================================
;function:stop_24c;停止I2C总线
;input:
;output:---------
;usage:
;================================================
stop_24c:;停止I2C总线
clrCSDA;数据线上升沿有效?
N_NOP
setbCSCL
N_NOP
setbCSDA;数据线上升沿有效?
N_NOP
clrCSDA;且时钟线须为高电平
N_NOP
clrCSCL;且时钟线须为高电平
N_NOP
ret
;===============================================
;function:ch_ack(应答位检查);应答位检查
;input:
;output:---------
;usage:
;==============================================
ch_ack:;应答位检查
setbCSDA
N_NOP
setbCSCL
N_NOP
out_chkack:movc,SDA
jcout_chkack
clrSCL
N_NOP
ret
;=================================================
;function:send_ack(发送应答);;发送应答位
;input:
;output:---------
;usage:
;================================================
send_ack:;发送应答位
clrCSDA
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
setbCSDA
N_NOP
ret
;===================================================
;function:send_ack(发送非应答);发送非应答位
;input:
;output:---------
;usage:
;=============================================
sendn_ack:;发送非应答位
setbCSDA
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
clrCSDA
N_NOP
ret
;=================================================
;function:read_24c_N;从I2C总线接收N个数据字节
;input:r1---------欲接收数据存放缓冲区首址
;b----------从器件地址/读写控制字
;dptr-------欲从eprom读数据的首地址
;r2---------欲接收数据的字节数
;output:---------
;usage:a,c,r1,r2,dptr
;================================================
read_24c_N:;从I2C总线接收N个数据字节
lcallstart_24c;start
mova,b;ic_addr
clracc.0
lcallout_24c
;mova,dph;addr_low
;lcallout_24c
mova,dpl;addr_hi
lcallout_24c
lcallstart_24c;start
mova,b;ic_addr
lcallout_24c
decr2
cjner2,#00h,read_loop
sjmpread_once
read_loop:lcallin_24c;read
lcallsend_ack;send nack
mov@r1,a
incr1
djnzr2,read_loop
read_once:lcallin_24c;read
lcallsendn_ack;send nack
lcallstop_24c;stop
mov@r1,a
TRAP_RET
;=================================================
;function:write_24c_N;向I2C总线发送N个数据字节
;input:r0---------欲发送数据缓冲区首址
;b----------从器件地址/写控制字
;dptr-------欲写入eprom数据的首地址
;r2---------欲发送数据的字节数
;output:---------
;usage:a,c,r0,r2,dptr
;========================================================
write_24c_N:;向I2C总线发送N个数据字节
lcallstart_24c;start
mova,b;从地址
lcallout_24c
;mova,dph;高位地址
;lcallout_24c
mova,dpl;低位地址
lcallout_24c
write_loop:mova,@r0
lcallout_24c
incr0
djnzr2,write_loop
lcallstop_24c;stop
N_NOP
N_NOP
TRAP_RET
;=========================================================
;function:write_24c_1;向I2C总线发送1个数据字节
;input:b----------要写的数据
;dpl-------欲写入eprom数据的地址
;output:---------
;usage:a,b,dptr
;=========================================================
write_24c_1:;向I2C总线发送1个数据字节
lcallstart_24c;start
mova,#0a0h;从地址
lcallout_24c
mova,dpl;低位地址
lcallout_24c
mova,b
lcallout_24c
lcallstop_24c;stop
N_NOP
N_NOP
TRAP_RET
;===============================================
;function:read_24c_1;从I2C总线接收1个数据字节
;input:dpl-------欲从eprom读数据的地址
;output:a
;usage:a,dptr
;===================================================
read_24c_1:;从I2C总线接收1个数据字节
lcallstart_24c;start
mova,#0a0h;ic_addr
lcallout_24c
mova,dpl;addr_hi
lcallout_24c
lcallstart_24c;start
mova,#0a1h;ic_addr
lcallout_24c
lcallin_24c;read
lcallsendn_ack;send nack
lcallstop_24c;stop
TRAP_RET
;=================================================
;functionut_24c;向I2C发送一个字节
;input:a
;output:--------
;usage:a,c
;========================================================
out_24c:;向I2C发送一个字节
;lcalldog_int_feed
movc,acc.7
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.6
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.5
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.4
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.3
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.2
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.1
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
movc,acc.0
movCSDA,c
N_NOP
setbCSCL
N_NOP
clrCSCL
N_NOP
setbCSDA
N_NOP
setbCSCL
N_NOP
out_wait:movc,CSDA
jcout_wait
clrCSCL
TRAP_RET
;=========================================================
;function:in_24c;从I2C总线接收一个数据字节
;input:---------
;output:a
;usage:a,c
;=================================================
in_24c:;从I2C总线接收一个数据字节
;lcalldog_int_feed
setbCSDA
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.7,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.6,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.5,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.4,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.3,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.2,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.1,c
clrCSCL
N_NOP
setbCSCL
N_NOP
movc,CSDA
movacc.0,c
clrCSCL
N_NOP
TRAP_RET
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-10-28 02:19 , 耗时 0.087301 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表