ORG 000H
AJMP PK
ORG 03H
AJMP TION1
ORG 000BH
INC 20H ;
MOV TH0,#00H
MOV TL0,#00H ;
MOV R3,20H
CJNE R3,#29H,OUTT
MOV 20H,#00H
SETB EX0
CLR ET0
OUTT:
RETI
;
PK:
SDA BIT P1.1
SCL BIT P1.0
SECONDS EQU 70H
MINUTES EQU 71H
HOURS EQU 72H
DAY EQU 73H
DATE EQU 74H
MONTH EQU 75H
YEAR EQU 76H
CONTROL EQU 77H
SETADDR EQU 7AH
R10 EQU 41H
R11 EQU 42H
R12 EQU 43H
R13 EQU 44H
R14 EQU 45H
MOV R14,#00H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
SETB TR0
SETB 38H ;
SETB 39H ;
MOV 61H,#00H ;
mov R1,#00H
SETB SDA
SETB SCL
ACALL TIME
ACALL RECR
MOV SETADDR,#00H
MOV A,SECONDS
ANL A,#7FH
MOV R4,A
MOV R5,MINUTES
ACALL SENDSET
ACALL TIME
MOV SETADDR,#07H ;
MOV R4,#10H
MOV R5,#00H
ACALL SENDSET
SETB IT0
SETB EA
SETB EX0
MOV 51H,MINUTES
MOV 50H,HOURS
;--------------------------
;程序入口
;--------------------------
DISPLAY:
ACALL DISPLAY2
ACALL KEY
AJMP DISPLAY
;--------------------
;中断子程序入口
;--------------------
TION1:
CPL 38H
CPL 39H
INC R14
MOV R3,R14
CJNE R3,#01bH,VBT
CLR EX0
SETB ET0
CLR 38H
SETB 39H
MOV 51H,DATE
MOV A,MONTH
MOV 50H,A
VBT:CJNE R3,#01aH,VBB
CLR EX0
SETB ET0
SETB 38H
SETB 39H
MOV 51H,YEAR
MOV 50H,#20H
VBB:CJNE R3,#01cH,VOUT
CLR EX0
SETB ET0
SETB 38H
SETB 39H
MOV a,DAY
XRL A,#0F0H
MOV 51H,A
MOV 50H,#0CCH
VOUT:CJNE R3,#01dH,VVT
CLR ET0
SETB EX0
MOV 51H,MINUTES
MOV 50H,HOURS
MOV R14,#00H
VVT:NOP
NOP
ACALL RECR
RETI
;-------------------
;显示子程序入口
;-------------------
DISPLAY2:
MOV DPTR,#TAB
MOV A,51H; 分钟显示.
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
SETB P3.7
ACALL TIME
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
CLR P3.7
MOV P1,A
INC R7
ACALL TIME1
SETB P3.7
ACALL TIME
MOV DPTR,#TAB
MOV A,51H ;10分钟显示.
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV C,39H
MOV P1.7,C
SETB P3.7
ACALL TIME
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
CLR P3.7
MOV P1,A
INC R7
ACALL TIME1
SETB P3.7
ACALL TIME
;
MOV DPTR,#TAB
MOV A,50H
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV C,38H
MOV P1.7,C
SETB P3.7
ACALL TIME
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
CLR P3.7
MOV P1,A
INC R7
ACALL TIME1
SETB P3.7
ACALL TIME
MOV DPTR,#TAB
MOV A,50H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
SETB P3.7
ACALL TIME
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
CLR P3.7
MOV P1,A
MOV R7,#00H
ACALL TIME1
SETB P3.7
ACALL TIME
RET
;-----------------------
;键盘扫描子程序入口
;-----------------------
KEY:
JB P3.4,K1 ;
ACALL TIME1
JB P3.4,K1
CLR 38H
SETB 39H
CLR EX0
MOV 50H,MONTH
MOV 51H,DATE
ACALL DISPLAY2
JNB P3.4,KEY
MOV 51H,MINUTES
MOV 50H,HOURS
CLR 39H
SETB EX0
K1:JB P3.3,K2;
ACALL TIME1
SETB 38H
SETB 39H
CLR EX0
MOV 38H,#1B
MOV 50H,#20H
MOV 51H,YEAR
ACALL DISPLAY2
JNB P3.3,K1
MOV 51H,MINUTES
MOV 50H,HOURS
SETB EX0
K2:JB P3.1,K4
ACALL TIME1
JB P3.1,K3
INC R0
CJNE R0,#01H,SET1;
MOV R6,#00
MOV R1,#12
RIUR:
CJNE R6,#60,OTT
MOV R6,#00H
OTT:
CJNE R1,#24,TTO
MOV R1,#00H
TTO:ACALL SETTIME
ACALL OOT
JB P3.0,RIUR
ACALL SEMINUT;
MOV SETADDR,#01H
ACALL SENDSET
;
SET1:CJNE R0,#02H,K3;
MOV R6,#30
MOV R1,#12
CLR 38H
SETB 39H
CLR EX0
RIUY:
CJNE R6,#32,POO
MOV R6,#00H
POO:
CJNE R1,#13,PPO
MOV R1,#01H
PPO:ACALL SETTIME
ACALL OOT
JB P3.0,RIUY
CLR 39H
MOV SETADDR,#04H
ACALL SENDSET
SETB EX0
K3:CJNE R0,#03H,K4;
MOV R6,#00
SETB 38H
SETB 39H
CLR EX0
ERI:
CJNE R6,#60,PPP
MOV R6,#00H
PPP:ACALL SETTIME
MOV R1,#20
ACALL OOT
JB P3.0,ERI
MOV R0,#00H
ACALL START1
MOV A,#11010000B
ACALL SEND
ACALL ACK
MOV A,#06H
ACALL SEND
ACALL ACK
MOV A,R4
ACALL SEND
ACALL ACK
ACALL STOP
SETB EX0
K4:
RET
;--------------------------
;
;--------------------------
OOT:
MOV A,R6
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV R4,A
MOV A,R1
MOVC A,@A+DPTR
MOV R5,A
RET
;-------------------
;
;-------------------
SETTIME:
MOV 51H,R4
MOV 50H,R5
ACALL DISPLAY2
JB P3.4,K5
ACALL TIME1
JB P3.4,K5
INC R6
SETMIN:
ACALL DISPLAY2
JNB P3.4,SETMIN
K5:
JB P3.3,SETOUT
ACALL TIME1
JB P3.3,SETOUT
INC R1
SETMIN1:
ACALL DISPLAY2
JNB P3.3,SETMIN1
SETOUT:
RET
;--------------------
;
;--------------------
SENDSET:
ACALL START1
MOV A,#11010000B
ACALL SEND
ACALL ACK
MOV A,SETADDR
ACALL SEND
ACALL ACK
MOV A,R4
ACALL SEND
ACALL ACK
MOV A,R5
ACALL SEND
ACALL ACK
ACALL STOP
RET
;-------------------
;
;-------------------
RECR:
ACALL START1
MOV A,#11010000B
ACALL SEND
ACALL ACK
;
MOV A,#00H
ACALL SEND
ACALL ACK
ACALL STOP
;
ACALL START1
MOV A,#11010001B
ACALL SEND
ACALL ACK
CLR A
ACALL RCIER ;
MOV SECONDS,A
ACALL ACK1
CLR A
ACALL RCIER
MOV MINUTES,A
ACALL ACK1
CLR A
ACALL RCIER
MOV HOURS,A
ACALL ACK1
CLR A
ACALL RCIER
MOV DAY,A
ACALL ACK1
CLR A
ACALL RCIER
MOV DATE,A
ACALL ACK1
CLR A
ACALL RCIER
MOV MONTH,A
ACALL ACK1
CLR A
ACALL RCIER
MOV YEAR,A
CLR A
ACALL STOP
RET
;-------------------
;
;-------------------
START1:
SETB SDA
SETB SCL
ACALL TIME
CLR SDA
ACALL TIME
CLR SCL
ACALL TIME
RET
;------------------
;;
;------------------
SEND:
MOV R3,#08H
Y1:RLC A
MOV SDA,C
ACALL TIME
SETB SCL
ACALL TIME
CLR SCL
DJNZ R3,Y1
RET
;-------------------
;
;-------------------
RCIER:
MOV R3,#08H
OOP:SETB SCL
ACALL TIME
MOV C,SDA
RLC A
CLR SCL
DJNZ R3,OOP
RET
;-------------------
;
;-------------------
ACK:SETB SDA
ACALL TIME
SETB SCL
ACALL TIME
TRE:MOV C,SDA
JC TRE
CLR SCL
RET
;--------------------
;--------------------
STOP:SETB SDA
ACALL TIME
CLR SCL
NOP
NOP
CLR SDA
ACALL TIME
SETB SCL
ACALL TIME
SETB SDA
ACALL TIME
RET
;-------------------------
;
;-------------------------
ACK1:CLR SDA
ACALL TIME
SETB SCL
ACALL TIME
CLR SCL
SETB SDA
RET
;-------------------------
;;-------------------------
SEMINUT:
ACALL START1
MOV A,#11010000B
ACALL SEND
ACALL ACK
MOV A,#10H
ACALL SEND
ACALL ACK
ACALL STOP
RET
;---------------------
;;---------------------
TIME:NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;
TIME1:MOV 60H,#63H
NOP
DJNZ 60H,$
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H
DB 0F8H,80H,90H,0C0H,0BFH,0FFH
TAB1:DB 00H,04H,08H,0CH
;
TAB2:DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
DB 10H,11H,12H,13H,14H,15H,16H,17H,18H,19H
DB 20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 40H,41H,42H,43H,44H,45H,46H,47H,48H,49H
DB 50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
END