?? wds12887.asm
字號(hào):
;參考程序A.匯編程序WDS12887.ASM. 程序功能:讀取時(shí)鐘值,并將時(shí),分,秒顯示在
;數(shù)碼管上. 可以實(shí)現(xiàn)時(shí)鐘初始化(授時(shí))操作.
;運(yùn)行初始化程序DS12INIT之前,要先用當(dāng)前時(shí)間值(年、月、日、時(shí)、分、秒)改
;寫(xiě)DS12887的時(shí)間寄存器(0000H~0009H)內(nèi)的數(shù)據(jù),見(jiàn)表XX。要先修改程序中的
;初始化子程序DS12INIT中的當(dāng)前時(shí)間值,并在主程序WDS12887.ASM中將< ; Lcall
;DS12INIT>語(yǔ)句的<;>取消(即運(yùn)行初始化子程序DS12INIT),主程序即被修改成為時(shí)
;鐘初始化程序.完成初始化后,再將< ; Lcall DS12INIT>語(yǔ)句的<;>加上(即注銷(xiāo)初
;始化子程序),即可恢復(fù)主程序WDS12887.ASM.再次運(yùn)行主程序,就可以實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘
;在六位數(shù)碼管上顯示.
;WDS12887.ASM.
$INCLUDE (C8051F020.inc)
CS12887 EQU 8300H ;時(shí)鐘DS12887的端口地址
CS12887A EQU 830AH ;
CS12887B EQU 830BH
CS12887C EQU 830CH
PPA EQU 8000H ;8255的端口地址
PPB EQU 8001H
PPC EQU 8002H
CWR EQU 8003H
ORG 0
STAR: MOV WDTCN,#0DEH ;關(guān)閉看門(mén)狗
MOV WDTCN,#0ADH
MOV 0E3H,#40H; /*使能交叉開(kāi)關(guān),弱上拉*/
MOV 0B5H,#0C0H ;/*設(shè)置P7為推拉模式,P4,P5,P6為漏極開(kāi)路
MOV 0A3H,#2CH ;/*EMIF工作在地址/數(shù)據(jù)復(fù)用方式,只用外部存儲(chǔ)器,
;ALE高/低脈寬占1個(gè)SYSCLK周期*/
MOV 0A1H,#6DH ;/*地址建立/保持時(shí)間占1個(gè)SYSCLK周期,
;/WR和/RD占12個(gè)SYSCLK周期*/
ACALL C8255 ;8255初始化
; Lcall DS12INIT ; DS12887初始化,授時(shí):設(shè)定初始值:年,月,日,時(shí),分,秒
MAIN: Lcall DS12T ;從DS12887讀出當(dāng)前時(shí)鐘值:年,月,日,時(shí),分,秒
LCALL EXCHANG ;變換數(shù)據(jù)存放格式
LCALL DISPLED ;用六位數(shù)碼管顯示時(shí),分,秒
AJMP MAIN
DS12INIT: MOV DPTR,#CS12887B
MOV A, #080H ;設(shè)置 SET=1,禁止時(shí)間更新
MOVX @DPTR,A
MOV DPTR,#CS12887 ;CS12887=8F00H
MOV A,#00H ;寫(xiě)入當(dāng)前秒值:"00"
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH ;NONE ALARM秒不報(bào)警(不鬧秒)
MOVX @DPTR,A
INC DPTR
MOV A,#30H
MOVX @DPTR,A ; 寫(xiě)入當(dāng)前分值:"30"分
INC DPTR
MOV A,#0FFH
MOVX @DPTR,A ;NONE ALARM 分不報(bào)警(不鬧分)
INC DPTR
MOV A,#11H
MOVX @DPTR,A ; 寫(xiě)入當(dāng)前時(shí)值:"11"時(shí) ;HOURS
INC DPTR
MOV A,#0FFH ;NONE HOUR ALARM時(shí)不報(bào)警(不鬧時(shí))
MOVX @DPTR,A
INC DPTR
MOV A,#5H ;DAY OF THE WEEK寫(xiě)入當(dāng)前周日:"6"
MOVX @DPTR,A
INC DPTR
MOV A,#24H
MOVX @DPTR,A ;DATA OF THE MONTH寫(xiě)入當(dāng)前日期:"24"
INC DPTR
MOV A,#08H
MOVX @DPTR,A ;MONTH 寫(xiě)入當(dāng)前月份:"09"月
INC DPTR
MOV A,#05 ;YEAR 寫(xiě)入當(dāng)前年份:" 05 "年
MOVX @DPTR,A
MOV DPTR,#CS12887C ;CS12887C=830CH
MOVX A,@DPTR ;CLEAR C
INC DPTR
MOVX A,@DPTR ;CLEAR D
MOV DPTR,#CS12887B ;更新周期正常運(yùn)行,禁止中斷,BCD碼格式,24小時(shí)制
MOV A,#02H ;不用夏時(shí)制
MOVX @DPTR,A
RET
;讀出年、月、日、時(shí)、分、秒及周日的子程序DS12T:
DS12T: ACALL TDU ;讀出DS12887時(shí)鐘數(shù)據(jù),存放在外部SRAM(62256)的00-09H單元中.
RET
RD0: MOV DPTR,#CS12887A ;從DS12887讀出數(shù)據(jù),先判更新周期結(jié)束否?查詢(xún)UIP位
MOVX A,@DPTR ; UIP=0,時(shí)鐘更新周期已結(jié)束.
JBC ACC.7,RD0 ; UIP=1,時(shí)鐘更新周期未結(jié)束.
RET
TDU: ACALL RD0
MOV R0,#0H
MOV DPTR,#CS12887
RR0: MOVX A,@DPTR
MOV P6,#0 ;從DS12887讀出數(shù)據(jù):年,月,日,時(shí),分,秒,存如片外RAM(62256),
MOVX @R0,A ;的00H--09H單元中去
INC DPTR
INC R0
CJNE R0,#9,RR0
MOV DPTR,#CS12887A
MOV A,#20H
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPTR
INC DPTR
MOVX A,@DPTR
MOV DPTR,#CS12887B
MOV A,#02H ;設(shè)定24小時(shí)制,禁止中斷,禁止報(bào)警
MOVX @DPTR,A
RET
;數(shù)據(jù)轉(zhuǎn)換子程序
EXCHANG: MOV DPTR,#0009H ;外部SRAM的09單元中.存放年(YEAR)的壓縮BCD碼;
MOV R0,#7DH ;(00 05);7CH-7DH 中存十年、年(BCD碼)
LCALL YMD
MOV DPTR,#0008H ;外部SRAM的08單元中.存放月(MONTH)的壓縮BCD碼;
MOV R0,#7BH ;7BH-7AH存月份(BCD碼)
LCALL YMD
MOV R0,#79H ;79H-78H存日期(BCD碼)
LCALL YMD
MOV DPTR,#0006H ;外部SRAM的06單元中存放周日的壓縮BCD碼
MOVX A,@DPTR ;77H存周日(BCD碼)
MOV 77H,A
MOV DPTR,#0004H;將外擴(kuò)SRAM 04H單元內(nèi)存放時(shí)的壓縮BCD碼的值傳給
MOV R0,#72h ;72H~71H存時(shí)值(BCD碼)
LCALL YMD
MOV DPTR, #0002 ;外部SRAM的02單元中存放分(MINUTE)的壓縮BCD碼
MOV R0, #74H ;74H~73H存分值(BCD碼)
LCALL YMD
MOV DPTR, #0000H;外部SRAM的00單元中存放秒(SECOND)的壓縮BCD碼
MOV R0, #76H ;76H-75H存秒值(BCD碼)
LCALL YMD
RET
YMD: MOVX A,@DPTR
;YMD將壓縮BCD碼(一字節(jié)存兩位數(shù))轉(zhuǎn)化為BCD碼(一字節(jié)存一位數(shù))
MOV B,A
ANL A, #0FH
MOV @R0, A
DEC R0
MOV A ,B
SWAP A
ANL A, #0FH
MOV @R0,A
RET
;顯示功能子程序,要顯示的數(shù)據(jù)在內(nèi)部RAM的71H--76H 中(BCD碼)
DISPLED: ACALL C8255
MOV R2,#01H
MOV R5,#6
MOV R0,#71H
DSP1: MOV DPTR,#PPB
MOV A,R2
MOVX @DPTR,A
MOV A,@R0
ANL A,#0FH
DSP2: MOV DPTR,#BCD
MOVC A,@A+DPTR
MOV B,A
MOV DPTR,#PPC
MOV A,R5
ANL A,#1
CJNE A,#1,SS0
MOV A,B
ADD A,#80H
AJMP SS1
SS0: MOV A,B
SS1: MOVX @DPTR,A
ACALL DEL0
MOV A,R2
RL A
MOV R2,A
INC R0
DJNZ R5,DSP1
RET
BCD: DB 3FH,06H,5BH,4FH ;顯示數(shù)值,0,1,2,3
DB 66H,6DH,7DH,07H ;4,5,6,7
DB 7FH,6FH,77H,7CH ;8,9,A,B
DB 39H,5EH,79H,71H ;C,D,E,F(xiàn)
DB 73H,3EH,31H,6EH ;P,U,Z,Y
DB 0FFH,00H ;8,滅
DEL0:MOV 08H,#0FH ;延時(shí)子程序
TM: MOV 07H,#20H
DJNZ 07H,$
DJNZ 08H,TM
RET
;初始化8255
C8255:MOV A,#80H ; 設(shè)置PC口,PB口為輸出,PA口為輸入
MOV DPTR,#8003H ;#8003H為8255的控制寄存器地址
MOVX @DPTR,A
RET
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -