📄 ds1302.asm
字号:
;=================================================
; DS1302测试程序
;=================================================
;
;实验板配套测试程序
;
;采用最简单的流程编写,简单易懂
;
;只为测试学习板使用
;
;考虑到只作为测试1302使用,所以只显示秒
;
;=================================================
LED1 EQU P1.3 ;
LED2 EQU P1.2 ;
LED3 EQU P1.1 ;显示控制
LED4 EQU P1.0 ;
DATA1 EQU 70H ;
DATA2 EQU 71H ;显示数据缓存区
DATA3 EQU 72H ;
DATA4 EQU 73H ;
T_CLK Bit P3.5 ;实时时钟时钟线引脚
T_IO Bit P3.6 ;实时时钟数据线引脚
T_RST Bit P3.3 ;实时时钟复位线引脚
ORG 0000H
LJMP MAIN ;转入主程序
ORG 0050H
MAIN:
SETB P3.7
NOP
MOV DATA1,#00H ;显示区初始化
MOV DATA2,#00H
MOV DATA3,#10H
MOV DATA4,#10H
MOV P2,#0FFH
MOV P1,#00H
MOV 60H,#00 ;秒
MOV 61H,#00 ;分
MOV 62H,#08 ;时
MOV 63H,#19 ;日
MOV 64H,#09 ;月
MOV 65H,#05 ;星期
MOV 66H,#08 ;年
ACALL SET1302 ;DS1302数据设置,并启动
DIS:
NOP
ACALL DISPLAY
NOP
ACALL GET1302 ;取秒数据
MOV A,60H
ANL A,#00001111B
MOV DATA1,A
MOV A,60H
ANL A,#01110000B
RR A
RR A
RR A
RR A
MOV DATA2,A
ACALL DISPLAY ;显示秒数据
NOP
JMP DIS
SET1302:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #00H ;写操作前WP=0
LCALL RTInputByte
SETB T_CLK
CLR T_RST
MOV R0, #60H ;秒入口地址
MOV R7, #7 ;秒 分 时 日 月 星期 年
MOV R1, #80H ;秒写地址
S13021:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;写秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
MOV A, @R0 ;写秒数据
MOV B, A
LCALL RTInputByte
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, S13021
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,写保护
LCALL RTInputByte
SETB T_CLK
CLR T_RST
RET
GET1302:
MOV R0, #60H ;数据存放地址入口
MOV R7, #7
MOV R1, #81H ;秒地址
G13021:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0, A ;秒
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, G13021
RET
;**********************************************************
;功 能:写1302一字节 (内部子程序)
;**********************************************************
RTInputByte:
MOV R4, #8
Inbit1: MOV A, B
RRC A
MOV B, A
MOV T_IO, C
SETB T_CLK
CLR T_CLK
DJNZ R4, Inbit1
RET
;**********************************************************
;功 能:读1302一字节 (内部子程序)
;**********************************************************
RTOutputByte:
MOV R4, #8
Outbit1:
MOV C, T_IO
RRC A
SETB T_CLK
CLR T_CLK
DJNZ R4, Outbit1
RET
DISPLAY: ;显示子程序,可移植
PUSH A
NOP
SETB LED2
NOP
SETB LED3
NOP
SETB LED4
NOP
CLR LED1
NOP
MOV DPTR,#TABLE
MOV A,DATA1
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED1
CLR LED2
NOP
MOV DPTR,#TABLE
MOV A,DATA2
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED2
CLR LED3
NOP
MOV DPTR,#TABLE
MOV A,DATA3
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED3
CLR LED4
NOP
MOV DPTR,#TABLE
MOV A,DATA4
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
POP A
RET
DISDELAY:
MOV 74H,#10
DISD:
MOV 75H,#250
DJNZ 75H,$
DJNZ 74H,DISD
RET
TABLE:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 10001000B ;A
DB 10000011B ;b
DB 11000110B ;C
DB 10100001B ;d
DB 10000110B ;E
DB 10001110B ;F
DB 10111111B ;-
DB 11111111B ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -