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
;========================================================
;function:out_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应用电路图
三星IP68 防水防尘,今年也率先放给中端机种了
深圳电信:建设5G精品网络样板区域,构建5G在重点行业应用的商用落地
到2029年电动汽车动力系统市场规模将突破1000亿美元
凯迪正大sf6气体检测仪
区块链技术在黄金交易市场已得到了广泛的采用
ds3231程序
新能源汽车:一线厂商高速成长
l6599开关电源图(五种l6599开关电源电路原理图详细)
第47届国际家具博览会在广东现代国际展览中心如期举行
十字交叉直线电机模组激光加工小圆应用案例分享
全球科技处于移动互联网到物联网的升级周期
可穿戴传感器或将促进医疗健康领域的巨大变革
普通空调智能控制多级权限
瀚达电子嵌入式计算机,适用于远程监控通讯平台
遭遇翻车?外媒:LG可卷曲OLED电视市场销量持续低迷
电动汽车是否可以成为城市电网的一种灵活能源?
校企合作、产学双赢!中海达与河南理工大学测绘学院签订战略合作协议
华钰矿业和上海微系统所联合创立超导量子干涉器件勘探公司
软DSP处理用于语音引擎设计是需注意哪些事项
欧姆龙推出的CS1D双重PLC系统