;*****************************
;* 万年历程序 *
;*****************************
;67H(高两位年)66H(低两位年)65H(月)64H(星期)
;63H(日)62H(小时)61H(分)60H(秒)57H(农历月)56H(农历日)
;显示缓冲单元7CH~7BH(4CH~4BH)年低位,7AH~79H(4AH~49H)月,
;78H(48H)星期,77H~76H(47H~46H)日,75H~74H(45H~44H)时,
;73H72H(43H~42H)分,71H~70H(41H~40H)秒,5EH~5DH(55H~54H)农历年
;5CH~5BH(53H~52H)农历月,5AH~59H(51H~50H)农历日
;闰年标志为F0,定时器T1为调整时候闪烁用
;
;
SCLK EQU P3.2
IO EQU P3.3
RST EQU P3.4
YEAR DATA 66H
MONTH DATA 65H
WEEK DATA 64H
DAY DATA 63H
HOUR DATA 62H
MINTUE DATA 61H
SECOND DATA 60H
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H
ORG 0000H
AJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
LJMP INTT1
ORG 0023H
RETI
ORG 002BH
RETI
;************************************
;* 主程序 *
;************************************
START: SETB EA
MOV SCON,#00H ;串行输出,方式0
MOV TMOD,#10H ;计数器1,方式1
MOV TL1,#00H
MOV TH1,#00H
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H ;1302充电,充电电流1.1mA
LCALL WRITE
MAIN1: MOV DS1302_ADDR,#8DH ;READ OUT YEAR
LCALL READ
MOV YEAR,DS1302_DATA
MOV DS1302_ADDR,#8BH ;READ OUT WEEK
LCALL READ
MOV WEEK,DS1302_DATA
MOV DS1302_ADDR,#89H ;READ OUT MONTH
LCALL READ
MOV MONTH,DS1302_DATA
MOV DS1302_ADDR,#87H ;READ OUT DAY
LCALL READ
MOV DAY,DS1302_DATA
MOV DS1302_ADDR,#85H ;READ OUT HOUR
LCALL READ
MOV HOUR,DS1302_DATA
MOV DS1302_ADDR,#83H ;READ OUT MINTUE
LCALL READ
MOV MINTUE,DS1302_DATA
MOV DS1302_ADDR,#81H ;READ OUT SECOND
LCALL READ
MOV SECOND,DS1302_DATA
MOV R0,YEAR ;年分离,送显示缓存
LCALL DIVIDE
MOV 7BH,R1
MOV 4BH,R1
MOV 7CH,R2
MOV 4CH,R2
MOV 78H,WEEK
MOV 48H,WEEK
MOV R0,MONTH ;月分离,送显示缓存
LCALL DIVIDE
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
MOV R0,DAY ;日分离,送显示缓存
LCALL DIVIDE
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,R2
MOV R0,HOUR ;小时分离,送显示缓存
LCALL DIVIDE
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
MOV R0,MINTUE ;分分离,送显示缓存
LCALL DIVIDE
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
MOV R0,SECOND ;秒分离,送显示缓存
LCALL DIVIDE
MOV 70H,R1
MOV 40H,R1
MOV 71H,R2
MOV 41H,R2
LCALL DISPLAY
LCALL GENGXIN ;更新农历程序
JNB P1.1,SETG
JNB F0,SSS
CLR P1.3 ;闰月,则p1.3清0,指示灯亮
LJMP MAIN1
SSS: SETB P1.3 ;非闰月,则p1.3置位,指示灯灭
LJMP MAIN1
;*******************************
;* 公历设置程序 *
;*******************************
SETG: SETB TR1
SETB ET1
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH