DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

ds3231程序

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-30 14:15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ds3231程序
;宏定义区;
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_sd;时钟启动
;input:---------
;output:---------
;usage:---------
;======================================================
start_sd:;时钟启动
;clrbsda
;N_NOP
setbsda
N_NOP
setbscl
N_NOP
jbsda,ssd_on
setbbsda
ssd_on:clrsda
;N_NOP
;clrscl
N_NOP
ret
;======================================================
;function:stop_sd;时钟停止
;input:---------
;output:---------
;usage:---------
;=======================================================
stop_sd:;时钟停止
clrsda
N_NOP
clrsda
N_NOP
setbscl
N_NOP
setbscl
N_NOP
setbsda
N_NOP
ret
;==================================================
;function:ack(应答)bsend------发送位
;input:---------
;output:---------
;usage:---------
;=====================================================
ack:;时钟应答
clrsda
N_NOP
setbscl
N_NOP
clrscl
ret
;=====================================================
;function:nack;发送非应答位
;input:---------
;output:---------
;usage:---------
;========================================================
nack:;非应答
setbsda
N_NOP
setbscl
N_NOP
clrscl
ret
;=========================================================
;function:check_ack;应答位检查
;input:---------
;output:---------
;usage:---------
;========================================================
check_ack:;检查应答信号;
clrscl
N_NOP
setbsda
N_NOP
setbscl
N_NOP
movr6,#255
cck_lp:jnbsda,cck_goon
djnzr6,cck_lp
cck_goon:clrscl
N_NOP
ret
;========================================================
;functionut_bit;发送一位数给实时时钟
;input:c
;output:---------
;usage:c
;========================================================
out_bit:;发送一位数给实时时钟
;lcalldog_int_feed
clrscl
N_NOP
movsda,c
N_NOP
setbscl
N_NOP
clrscl
N_NOP
TRAP_RET
;===============================================
;function:in_bit;从实时时钟接收一位数
;input:---------
;output:c
;usage:c
;=========================================================
in_bit:;从实时时钟接收一位数
;lcalldog_int_feed
setbsda
N_NOP
setbscl
N_NOP
movc,sda
clrscl
N_NOP
clrsda
N_NOP
TRAP_RET
;=====================================================
;function:sendh_l(高到低);发送一个字节给实时时钟
;input:a-----发送数据
;output:---------
;usage:a,c,r7
;r7----发送位数(8位)
;=================================================
send_H_L:;发送一个字节给实时时钟(高到低)
movr7,#08h
send_loop:movc,acc.7
lcallout_bit
rla
djnzr7,send_loop
nop
nop
ret
;=======================================================
;function:receiveh_l(高到低);从总线接收一个字节
;input:---------
;output:a---接收数据
;usage:a,r3,
;======================================================
receive_H_L:;从总线接收一个字节(高到低)
movr3,#08h
re_loop:lcallin_bit
rlca
djnzr3,re_loop
ret
;=======================================================
;function:write_1_sd;向I2C总线发送1个字节数据
;input:r0-----欲发送缓冲区地址
;r1-----器件地址
;output:----------
;usage:a,r0,r1
;=========================================================
write_1_sd:;向I2C总线发送1个字节数据
lcallstart_sd
jbbsda,w1sd_end
mova,#0d0h;#64h;写命令字
lcallsend_H_L
lcallcheck_ack
mova,r1;写器件地址
;anla,#0fh
;swapa
lcallsend_H_L
lcallcheck_ack
mova,@r0;写发送的数据
lcallsend_H_L
lcallcheck_ack
lcallack;应答
w1sd_end:lcallstop_sd
ret
;=========================================================
;function:read_1_sd;从I2C总线接收1个字节数据
;input:---------
;r0----器件地址
;r1----欲接收数据存放缓冲区地址
;output:year,month...(时间寄存器)
;usage:a,r1
;========================================================
read_1_sd:;从I2C总线接收1个字节数据
lcallstart_sd
jbbsda,r1sd_end
mova,#0d0h;#64h;写命令字
lcallsend_H_L
lcallcheck_ack
mova,r0;写器件地址
;anla,#0fh
;swapa
lcallsend_H_L
lcallcheck_ack
lcallstart_sd
jbbsda,r1sd_end
mova,#0d1h;#65h
lcallsend_H_L
lcallcheck_ack
lcallreceive_H_L;读数据放于时间寄存器
mov@r1,a
lcallnack
lcallstop_sd
ret
r1sd_end:lcallstop_sd
TRAP_RET
;================================================
;fuction:read_sd;读实时时钟
;input:------------
;output:year,month...(时间寄存器)
;usage:a,r0,r1
;=================================================
read_sd:;读实时时钟
;--------------------------------------------------------
;function:read_1_sd;从I2C总线接收1个字节数据
;input:---------
;r0----器件地址
;r1----欲接收数据存放缓冲区地址
;output:year,month...(时间寄存器)时间寄存器)
;usage:a,r0,r1,r2---循环次数
;--------------------------------------------------------
movr0,#0
movr1,#second
movr2,#3
rsd_lp:lcallread_1_sd
incr1
incr0
djnzr2,rsd_lp
ret
;=========================================================
;fuction:write_sd;写实时时钟
;input:date_set
;output:------------
;usage:a,r0,r1,r2
;============================================================
write_sd:;写实时时钟
;--------------------------------------------------------
;function:write_1_sd;向I2C总线发送1个字节数据
;input:r0-----欲发送缓冲区地址
;r1-----器件地址
;output:----------
;usage:a,r0,r1,r2---循环次数
;--------------------------------------------------------
movr0,#date_set
movr1,#0
movr2,#3
;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
jbbrun,ws_ret
jbbstop,ws_ret
jbbset,ws_ret
jbbset1,ws_ret
jnbbset2,ws_ret
mova,in_code
cjnea,#53,ws_ret
;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
wsd_lp:jnbbsaveT,ws_ret
lcallwrite_1_sd
incr0
incr1
djnzr2,wsd_lp
ws_ret:clrbsaveT
ret
;==========================================================
;fuction:time_int;时钟初始化程序
;input:------------
;output:------------
;usage:a,r0
;=======================================================
time_int:;时钟初始化程序
lcallstart_sd
mova,#0d0h;#64h
lcallsend_H_L
lcallcheck_ack
mova,#0f0h
lcallsend_H_L
lcallcheck_ack
mova,#20h
lcallsend_H_L
lcallcheck_ack
lcallstop_sd
lcallstart_sd
mova,#0d0h;#64h
lcallsend_H_L
lcallcheck_ack
mova,#70h
lcallsend_H_L
lcallcheck_ack
mova,#00h
lcallsend_H_L
lcallcheck_ack
lcallstop_sd
TRAP_RET
ds3231应用电路图


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-10-27 20:53 , 耗时 0.081225 秒, 18 个查询请求 , Gzip 开启.

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

桂公网安备 45031202000115号

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

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

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

QQ:28000622;Email:libyoufer@sina.com

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

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