📄 1302.asm
字号:
SDK_1302 equ P2.5 ;DS1302的I/O接P2.5
SCK_1302 equ P2.6 ;DS1302的CLK接P2.4
RST_1302 equ P2.4 ;DS1302的RST接P2.3
buf_second equ 60H ;秒的缓冲区
buf_minute equ 61H ;分的缓冲区
buf_hour equ 62H ;小时的缓冲区
buf_date equ 63H ;日期的缓冲区
buf_month equ 64H ;月的缓冲区
buf_day equ 65H ;星期
buf_year equ 66H ;年
buf_ringhour EQU 6AH ;闹分 from 00(1302)
buf_ringminute EQU 6BH ;闹时 from 01(1302)
Addr_1302 equ 6CH ;存放DS1302的地址
Data_1302 equ 6DH ;存放DS1302的数据
ORG 0000H
MOV 60H,#50H ;05年8月4日12:00:00
MOV 61H,#59H
MOV 62H,#23H
MOV 63H,#31H
MOV 64H,#12H
MOV 65H,#07H
MOV 66H,#99H
LCALL SETDT
WWW: LCALL ReadDT
ljmp www
SJMP $
;初始化日期时间
SetDT: mov Addr_1302,#10001110B ;最高位为0,允许对ds1302操作
mov Data_1302,#00000000B
lcall WDS1302
mov Addr_1302,#10000000B ;DS1302晶振停振
mov Data_1302,#10000000B
lcall WDS1302
mov Addr_1302,#10001100B ;写入年
mov Data_1302,buf_year
lcall WDS1302
mov Addr_1302,#10001000B ;写入月
mov Data_1302,buf_month
lcall WDS1302
mov Addr_1302,#10000110B ;写入日期
mov Data_1302,buf_date
lcall WDS1302
mov Addr_1302,#10001010B ;写入星期
mov Data_1302,buf_day
lcall WDS1302
mov Addr_1302,#10000100B ;写入小时
mov a,buf_hour
clr acc.7 ;设置为24小时制
mov Data_1302,a
lcall WDS1302
mov Addr_1302,#10000010B ;写入分
mov Data_1302,buf_minute
lcall WDS1302
mov Addr_1302,#10000000B ;写入秒
mov a,buf_second
clr acc.7 ;DS1302晶振起振
mov Data_1302,a
lcall WDS1302
mov Addr_1302,#10001110B ;最高位为1,禁止对ds1302操作
mov Data_1302,#10000000B
lcall WDS1302
RET
;将日期时间读入缓冲区
ReadDT: mov Addr_1302,#10001101b ;读入年
lcall rds1302
mov buf_year,Data_1302
mov Addr_1302,#10001001b ;读入月
lcall rds1302
mov buf_month,Data_1302
mov Addr_1302,#10000111b ;读入日期
lcall rds1302
mov buf_date,Data_1302
mov Addr_1302,#10001011b ;读入星期
lcall rds1302
mov buf_day,Data_1302
mov Addr_1302,#10000101b ;读入小时
lcall rds1302
mov buf_hour,Data_1302
mov Addr_1302,#10000011b ;读入分钟
lcall rds1302
mov buf_minute,Data_1302
mov Addr_1302,#10000001b ;读入小时
lcall rds1302
mov buf_second,Data_1302
ret
;向DS1302写入一个字节
WDS1302: push acc
clr SCK_1302
setb RST_1302
mov a,Addr_1302
setb acc.7
clr acc.0
mov R7,#8
wds13021: clr sck_1302
rrc a
mov sdk_1302,c
setb sck_1302
djnz R7,wds13021
mov a,Data_1302
mov R7,#8
wds13022: clr sck_1302
rrc a
mov sdk_1302,c
setb sck_1302
djnz R7,wds13022
CLR RST_1302
clr sck_1302
pop acc
RET
;从DS1302读取一个字节
RDS1302: push acc
clr sck_1302
setb RST_1302
mov a,Addr_1302
setb acc.7
setb acc.0
mov R7,#8
rds13021: clr sck_1302
rrc a
mov sdk_1302,c
setb sck_1302
djnz R7,rds13021
mov R7,#8
rds13022: setb sck_1302
clr sck_1302
mov c,sdk_1302
rrc a
djnz R7,rds13022
mov Data_1302,a
clr RST_1302
clr SCK_1302
pop acc
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -