📄 sx1302.asm
字号:
;天逸版实时时钟程序(未作测试,只供参考)
;***************************************************************************
;* ohm@szsxmcu.com 深圳随想电子科技有限公司版权所有 *
;* Create by :欧海明 www.szsxmcu.com 更多例程及单片机专业 *
;* 咨讯请登陆网站 因为专业所以做得更好!深圳随想电子科技 *
;***************************************************************************
IO_DATA BIT P1.1
SCLK BIT P1.0
RST BIT P1.2
K1 EQU P3.2
K2 EQU P3.3
K3 EQU P3.4
K4 EQU P3.5
BEEP EQU P2.0
RELAY EQU P1.4
T_CONU EQU 22H
TIME_L EQU 23H
TIME_H EQU 24H
TIME_DATA EQU 50H
DATE_DATA EQU 60H
DS_DATA EQU 58H
;------------------------------------------------
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT_T0
ORG 0100H
;------------------------------------------------
MAIN:
MOV TMOD,#01H
MOV TIME_L,#00H
MOV TIME_H,#4CH
MOV T_CONU,#00H
MOV IE,#82H
MOV A,#00H
MOV R0,#40H
MOV R1,#40H
M_CLEAR: MOV @R0,A
INC R0
DJNZ R1,M_CLEAR
MOV 7FH,#0AH
SETB BEEP
LCALL TIME_DELAY
LCALL PROSET
MAIN1:
LCALL GET_TIME
LCALL CHULI
MOV R0,#TIME_DATA ;
LCALL DISP
MOV R0,#TIME_DATA
LCALL TIME_DISPLAY
LCALL SET_KEY
LCALL COMP
JB K1,MAIN1
CALL BEEP_BL
MAIN2:
LCALL CHULI
MOV R0,#DATE_DATA
LCALL DISP
MOV R0,#DATE_DATA
LCALL TIME_DISPLAY
JB K1,MAIN2
CALL BEEP_BL
MAIN3:
LCALL DS_CHULI
MOV R0,#DS_DATA
LCALL DS_SP
MOV R0,#DS_DATA
LCALL DS_DISPLAY
JB K1,MAIN3
CALL BEEP_BL
AJMP MAIN1
;--------------------------------------------
;中断服务子程序
;300MS对闪动标记取反一次
;--------------------------------------------
INT_T0:
PUSH ACC
PUSH PSW
MOV TL0,TIME_L
MOV TH0,TIME_H
INC T_CONU
MOV A,T_CONU
CJNE A,#06H,INT_END
MOV T_CONU,#00H
CPL 0AH
INT_END:
POP PSW
POP ACC
RETI
;--------------------------------------------
;DS1302 初始化子程序
; (R0)=数据 (R1)=地址
;--------------------------------------------
PROSET:
CLR RST ;DS1302复位
CLR SCLK
NOP
NOP
SETB RST
;MOV R1,#80H
;MOV R0,#00H
;LCALL WRITE
;MOV R1,#82H
;MOV R0,#58H
;LCALL WRITE
;MOV R1,#84H
;MOV R0,#80H
;LCALL WRITE
MOV R1,#90H
MOV R0,#0ABH
LCALL WRITE
RET
;===============================================
;读时间、日期数据子程序
;存放单元 40H - 46H
;===============================================
GET_TIME:
MOV R1,#81H
LCALL READ
MOV 40H,R0
MOV R1,#83H
LCALL READ
MOV 41H,R0
MOV R1,#85H
LCALL READ
MOV 42H,R0
MOV R1,#87H
LCALL READ
MOV 43H,R0
MOV R1,#89H
LCALL READ
MOV 44H,R0
MOV R1,#8BH
LCALL READ
MOV 46H,R0
MOV R1,#8DH
LCALL READ
MOV 45H,R0
RET
;================================================
;写 DS1302 子程序
;================================================
WRITE:
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,R1
MOV R2,#08H
WRI_01:
RRC A
NOP
NOP
CLR SCLK
NOP
NOP
MOV IO_DATA,C
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,WRI_01
CLR SCLK
NOP
NOP
MOV A,R0
MOV R2,#08H
WRI_02:
RRC A
NOP
CLR SCLK
NOP
NOP
MOV IO_DATA,C
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,WRI_02
CLR SCLK
NOP
NOP
CLR RST
NOP
NOP
RET
;=================================================
;读 DS1302 子程序
;=================================================
READ:
CLR SCLK
NOP
NOP
SETB RST
NOP
NOP
MOV A,R1
MOV R2,#08H
READ_01:
RRC A
NOP
MOV IO_DATA,C
NOP
NOP
SETB SCLK
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R2,READ_01
NOP
NOP
SETB IO_DATA
CLR A
CLR C
MOV R2,#08H
READ_02:
CLR SCLK
NOP
NOP
MOV C,IO_DATA
NOP
NOP
RRC A
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R2,READ_02
MOV R0,A
CLR RST
RET
;==============================================
;实时时间、日期数据处理子程序
;==============================================
CHULI:
MOV A,40H
ANL A,#0FH
MOV 50H,A
MOV 70H,A
MOV A,40H
ANL A,#11110000B
SWAP A
MOV 51H,A
MOV 71H,A
;---------------------------------------------
MOV A,41H
ANL A,#0FH
MOV 52H,A
MOV 72H,A
MOV A,41H
ANL A,#11110000B
SWAP A
MOV 53H,A
MOV 73H,A
;---------------------------------------------
MOV A,42H
ANL A,#0FH
MOV 54H,A
MOV 74H,A
MOV A,42H
ANL A,#11110000B
SWAP A
MOV 55H,A
MOV 75H,A
;----------------------------------------------
MOV A,43H
ANL A,#0FH
MOV 60H,A
MOV 76H,A
MOV A,43H
ANL A,#11110000B
SWAP A
MOV 61H,A
MOV 77H,A
;---------------------------------------------
MOV A,44H
ANL A,#0FH
MOV 62H,A
MOV 78H,A
MOV A,44H
ANL A,#11110000B
SWAP A
MOV 63H,A
MOV 79H,A
;---------------------------------------------
MOV A,45H
ANL A,#0FH
MOV 64H,A
MOV 7AH,A
MOV A,45H
ANL A,#11110000B
SWAP A
MOV 65H,A
MOV 7BH,A
;----------------------------------------------
MOV A,46H
MOV 66H,A
MOV 7CH,A
RET
;=============================================
;实时时间、日期查表取数子程序
;=============================================
DISP: ;MOV R0,#TIME_DATA
MOV R3,#06H
DISP1: MOV A,@R0
MOV DPTR,#TAB_NU
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R3,DISP1
RET
;====================================================
;时间、日期显示子程序
;====================================================
TIME_DISPLAY:
;MOV R0,#TIME_DATA
MOV R1,#07FH
MOV R2,#08H ;共6个数码管
DISLP: MOV P0,@R0
MOV A,R1
MOV P2,A
JB ACC.5,DISLP1
MOV P0,#0BFH
JMP DISLP3
DISLP1: JB ACC.2,DISLP2
MOV P0,#0BFH
JMP DISLP3
DISLP2: INC R0
DISLP3: MOV A,R1
RR A
MOV R1,A
LCALL DELAY
DJNZ R2,DISLP
RET
DELAY:
MOV R4,#0AH
L15: MOV R5,#64H
L16: DJNZ R5,L16
DJNZ R4,L15
RET
;******************************************************
SET_KEY:
SETB K1
SETB K2
SETB K3
SETB K4
NOP
JB K4,KEY01
LCALL BEEP_BL
JMP DS_KEY
KEY01: JB K2,KEY02
LCALL BEEP_BL
JMP SET_TIME
KEY02: JB K3,KEY03
LCALL BEEP_BL
CPL 20H.0
KEY03: RET
;-----------------------------------------------------
DS_KEY:
CALL DS_DELAY
JNB K4,$
LCALL DSSET
CALL DS_DELAY
RET
SET_TIME:
MOV R1,#8EH
MOV R0,#00H
LCALL WRITE
MOV R1,#80H
MOV R0,#80H
LCALL WRITE
SETB TR0
K001: CALL TIME_DELAY
JNB K3,K001
K010:
CALL CHULI
JNB 0AH,KH01
MOV 54H,7FH
MOV 55H,7FH
JMP KH02
KH01: MOV 54H,74H
MOV 55H,75H
KH02: MOV R0,#TIME_DATA
CALL DISP
MOV R0,#TIME_DATA
CALL TIME_DISPLAY
JNB K1,K011A
JNB K2,K011B
JNB K3,K002
JMP K010
K011A:
MOV A,42H
ADD A,#01H
DA A
MOV 42H,A
XRL A,#24H
JNZ K012A
MOV 42H,#00H
K012A: MOV R1,#84H
MOV R0,42H
LCALL WRITE
CALL TIME_DELAY
JMP K010
K011B:
MOV A,42H
XRL A,#00H
JZ K012B
SETB C
CLR A
ADDC A,#99H
SUBB A,#01H
ADD A,42H
DA A
MOV 42H,A
XRL A,#00H
JNZ K012C
K012B: MOV 42H,#23H
K012C: MOV R1,#84H
MOV R0,42H
LCALL WRITE
CALL TIME_DELAY
JMP K010
;-------------------------------------------------
K002: CALL TIME_DELAY
JNB K3,K002
K020: CALL CHULI
JNB 0AH,KM01
MOV 52H,7FH
MOV 53H,7FH
JMP KM02
KM01: MOV 52H,72H
MOV 53H,73H
KM02: MOV R0,#TIME_DATA
CALL DISP
MOV R0,#TIME_DATA
CALL TIME_DISPLAY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -