1302.asm
来自「时间芯片1302的的读写。也有内部寄存器的使用程序。带有直接初始化」· 汇编 代码 · 共 255 行
ASM
255 行
;*********************************************************************
; 公司名称:
; 模块名称:DS1302.a51
; 功 能:实时时钟模块 时钟芯片型号:DS1302
; 说 明:(修改版)
; 程序设计:
; 设计时间:
; 版 本 号:
;*********************************************************************/
;sclc equ p3.3;1302sclk ;实时时钟时钟线引脚
;sdac equ p3.4;1302io ;实时时钟数据线引脚
;csc equ p3.5;1302rst ;实时时钟复位线引脚
;**********************************************************
;子程序名:Set1302
;功 能:设置DS1302 初始时间,并启动计时。
;说 明:
;调 用:RTInputByte
;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续)
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;设 计: 日 期:
;修 改: 日 期:
;**********************************************************
;*********************************************
;1302初始化程序:
;*********************************************
set_DS1302: nop
CLR csc
CLR sclc
SETB csc
mov b, #8eh ;寄存器地址
LCALL RTInputByte ;写操作前WP=0
mov b,#00h
LCALL RTInputByte
SETB sclc
CLR csc
CLR csc ;充电程序
CLR sclc
SETB csc
mov b,#90h
LCALL RTInputByte
mov b,#0a5h
LCALL RTInputByte
SETB sclc
CLR csc
CLR csc ;秒位制零
CLR sclc
SETB csc
mov b,#80h
lcall RTInputByte
mov b,#00h
lcall RTInputByte
SETB sclc
CLR csc
CLR csc
CLR sclc
SETB csc
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,写保护
LCALL RTInputByte
SETB sclc
CLR csc
ret
;*****************************************************************
;*****************************************************************
write_time:
CLR csc
CLR sclc
SETB csc
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #00H ;写操作前WP=0
LCALL RTInputByte
SETB sclc
CLR csc
MOV R0, #free_park_st+2; ;每一次上电,必须把秒寄存器高位设置为0,时钟才能走时;
MOV R7, #7 ;秒 分 时 日 月 星期 年
MOV R1, #80H ;秒写地址
S13021: CLR csc
CLR sclc
SETB csc
MOV B, R1 ;写 秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
MOV A, @R0 ;写秒数据
MOV B, A
LCALL RTInputByte
INC R0
INC R1
INC R1
SETB sclc
CLR csc
DJNZ R7, S13021
CLR csc
CLR sclc
SETB csc
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,写保护
LCALL RTInputByte
SETB sclc
CLR csc
RET
;**********************************************************
;子程序名:Get1302
;功 能:从DS1302 读时间
;说 明:
;调 用:RTInputByte,RTOutputByte
;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL
;出口参数:无
;影响资源:A B R0 R1 R4 R7
;设 计: 日 期:
;修 改: 日 期:
;**********************************************************
load_time:
Get1302:
MOV R0, #free_park_st+2;
MOV R7, #7
MOV R1, #81H ;秒地址
G13021: CLR csc
CLR sclc
SETB csc
MOV B, R1 ;秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0, A ;秒
INC R0
INC R1
INC R1
SETB sclc
CLR csc
DJNZ R7, G13021 ;第一次读取
mov r0,#free_park_st+10
MOV R7, #7
MOV R1, #81H ;秒地址
G13022: CLR csc
CLR sclc
SETB csc
MOV B, R1 ;秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0, A ;秒
INC R0
INC R1
INC R1
SETB sclc
CLR csc
DJNZ R7, G13022 ;第二次读取
mov r7,#7
mov r0,#free_park_st+2
mov r1,#free_park_st+10
G13023: mov a,@r0
mov temp_ram1,@r1
cjne a,temp_ram1,Get1302
inc r0
inc r1
djnz r7,G13023
mov r0,#free_park_st+2
mov r7,#7
mov r1,#second_ram
mov_time_data:
mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r7,mov_time_data
RET
;**********************************************************
;功 能:写1302一字节 (内部子程序)
;**********************************************************
RTInputByte:
MOV R4, #8
Inbit1: MOV A, B
RRC A
MOV B, A
MOV sdac, C
SETB sclc
CLR sclc
DJNZ R4, Inbit1
RET
;**********************************************************
;功 能:读1302一字节 (内部子程序)
;**********************************************************
RTOutputByte:
MOV R4, #8
Outbit1: MOV C, sdac
RRC A
SETB sclc
CLR sclc
DJNZ R4, Outbit1
RET
;/////////////////////////////////////////////////////////////////////////////
;***************************************************************************
;*****************************************************************
;报警终端地址寻找
;*****************************************************************
;报警终端位置存放到flash里,然后每隔10MS进行检查报警终端的通讯情况,
;如果通讯情况为0表示报警终端断线发送报警命令。
search_alr_ID:
mov dptr,#0422H
mov r7,#0
mov r6,#0
mov addr_hi,#10H
mov addr_lo,#00
mov addr_ah,#00
send_terminal_ID0:
mov block_cnt,#2
mov r0,#free_park_st
call read_block
mov r0,#free_park_st
cjne @r0,#0CCH,search_alr_ID0
inc r7
mov a,#0CCH
movx @dptr,a
inc dpl
inc r0
mov a,@r0
movx @dptr,a
inc dpl
mov a,r6
movx @dptr,a
inc dpl
search_alr_ID0: cjne @r0,#0FFH,search_alr_ID1
jmp search_alr_ID_end
search_alr_ID1: clr c
mov a,addr_lo
add a,#64
mov addr_lo,a
mov a,addr_hi
addc a,#0
mov addr_hi,a
inc r6
cjne r6,#255,send_terminal_ID0
search_alr_ID_end:
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?