?? 程序.asm
字號(hào):
; 萬(wàn)年歷程序
;從1302中讀出的數(shù)據(jù)放在67H(高兩位年)66H(低兩位年)65H(月)64H(星期)63H(日)
;; 62H(小時(shí))61H(分鐘)60H(秒)57H(農(nóng)歷月)56H(農(nóng)歷日)
;; 顯示緩沖單元7CH-7BH(4CH-4BH)(年低位),7AH-79H(4AH-49H)月,78H(48H)星期,
;77H-76H(47H-46H)日,75H-74H(45H-44H)小時(shí),73H-72H(43H-42H)分鐘,71H-70H(41H-40H)秒 5EH-5DH(55H-54H)農(nóng)歷年,5CH-5BH(53H-52H)農(nóng)歷月,5AH-59H(51H-50H)農(nóng)歷日
;;;; 閏月標(biāo)志為F0,定時(shí)器T1為調(diào)整時(shí)候閃爍用。
;1302在設(shè)置調(diào)整時(shí)間后,要改為禁止寫入狀態(tài),否則在上電復(fù)位的時(shí)候就發(fā)生誤寫入,使時(shí)間值加1分鐘
;次程序中的段碼表只適用于該特殊的硬件,具體的段碼表由具體的硬件決定
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
LJMP 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 ;計(jì)數(shù)器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 ;讀出年
LCALL READ
MOV year,DS1302_DATA
MOV DS1302_ADDR,#8BH ;讀出星期
LCALL READ
MOV week ,DS1302_DATA
MOV DS1302_ADDR,#89H ;讀出月
LCALL READ
MOV month,DS1302_DATA
MOV DS1302_ADDR,#87H ;讀出日
LCALL READ
MOV day,DS1302_DATA
MOV DS1302_ADDR,#85H ;讀出小時(shí)
LCALL READ
MOV hour,DS1302_DATA
MOV DS1302_ADDR,#83H ;讀出分鐘
LCALL READ
MOV mintue,DS1302_DATA
MOV DS1302_ADDR,#81H ;讀出秒
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 ;小時(shí)分離,送顯示緩存
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 GENGXIAN ;更新農(nóng)歷程序
JNB P1.1,SETG
JNB F0,SSS
SETB P1.3 ;閏月,則p1.3清零,指示燈亮
LJMP MAIN1
SSS: CLR P1.3 ;非閏月,則p1.3置位,指示燈滅
LJMP MAIN1
;;;;;;;;;;;;;;;;;
;;公歷設(shè)置程序;;;
;;;;;;;;;;;;;;;;;
SETG : SETB TR1
SETB ET1
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振蕩
LCALL WRITE
GWAIT: LCALL DISPLAY
JNB P1.1,GWAIT
SETG1: LCALL DISPLAY
JNB P1.1,SETG2
JNB P1.2,GADDYEAR
AJMP SETG1
GADDYEAR: MOV R7,66H ;年加一
LCALL ADD1
MOV 66H,A
CJNE A,#51H, GADDYEAR1
MOV 66H,#01H
GADDYEAR1: MOV DS1302_ADDR,#8CH ;年值送人1302
MOV DS1302_DATA,66H
LCALL WRITE
MOV R0,66H
LCALL DIVIDE ;年分離送顯示緩存
MOV 4BH,R1
MOV 7BH,R1
MOV 4CH,R2
MOV 7CH,R2
WAITT1:LCALL DISPLAY
JNB P1.2,WAITT1
AJMP SETG1
SETG2: SETB 0AH ;調(diào)月時(shí)閃標(biāo)志
GWAIT2: LCALL DISPLAY
JNB P1.1,GWAIT2
SETG3: LCALL DISPLAY
JNB P1.1,SETG4
JNB P1.2,GADDMONTH
AJMP SETG3
GADDMONTH:MOV R7,65H ;月加一
LCALL ADD1
MOV 65H,A
CJNE A,#13H,GADDMONTH1
MOV 65H,#01H
GADDMONTH1: MOV DS1302_ADDR,#88H ;月值送人1302
MOV DS1302_DATA,65H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE ;月分離,送顯示緩存
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
WAITT2: LCALL DISPLAY
JNB P1.2,WAITT2
AJMP SETG3
SETG4: SETB 0BH ;調(diào)日時(shí)閃標(biāo)志
GWAIT4: LCALL DISPLAY
JNB P1.1,GWAIT4
SETG5: LCALL DISPLAY
JNB P1.1,SETG6
JNB P1.2,GADDDAY
AJMP SETG5
GADDDAY: MOV R7,63H ;日加一
LCALL ADD1
MOV 63H,A
CJNE A,#32H,GADDDAY1
MOV 63H,#01H
GADDDAY1: MOV DS1302_ADDR,#86H ;日值送人1302
MOV DS1302_DATA,63H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE ;日分離,送顯示緩存
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,R2
WAITT3:LCALL DISPLAY
JNB P1.2,WAITT3
AJMP SETG5
SETG6: SETB 0CH ;調(diào)星期時(shí)閃標(biāo)志
GWAIT6: LCALL DISPLAY
JNB P1.1,GWAIT6
SETG7: LCALL DISPLAY
JNB P1.1,SETG8
JNB P1.2,GADDWEEK
AJMP SETG7
GADDWEEK: MOV R7,64H ;星期加一
LCALL ADD1
MOV 64H,A
CJNE A,#08H,GADDWEEK1
MOV 64H,#01H
GADDWEEK1: MOV DS1302_ADDR,#8AH
MOV DS1302_DATA,64H ;星期值送人1302
LCALL WRITE
MOV R0,64H
LCALL DIVIDE ;星期值分離送顯示緩存
MOV 48H,R1
MOV 78H,R1
WAITT4:LCALL DISPLAY
JNB P1.2,WAITT4
AJMP SETG7
SETG8: SETB 0DH ;調(diào)小時(shí)時(shí)閃標(biāo)志
GWAIT8: LCALL DISPLAY
JNB P1.1,GWAIT8
SETG9: LCALL DISPLAY
JNB P1.1,SETG10
JNB P1.2,GADDHOUR
AJMP SETG9
GADDHOUR: MOV R7,62H ;小時(shí)加一
LCALL ADD1
MOV 62H,A
CJNE A,#24H,GADDHOUR1
MOV 62H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ;恍∈敝鄧腿
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -