版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
;寄存器配置:(時(shí)間和II期)
;第3組(18?1FH)(RSkRSO=11)RO?R3,公歷年月日;
;R4?R7,時(shí)間的時(shí)、分、秒、百分之?秒(0.01秒)
;第2組(10?17H)(RSI、RS0-10)計(jì)算農(nóng)歷日期存儲(chǔ)中間臨時(shí)數(shù)據(jù)
;第1組(08?OFH)(RSKRS0=01)鍵盤處理程序存儲(chǔ)
;鬧鐘設(shè)置狀態(tài):R4、R5設(shè)置時(shí)間時(shí)、分,R6、R7計(jì)算分鐘數(shù)
;萬(wàn)年歷狀態(tài):R0?R3查看的公歷年月日,R6、R7農(nóng)歷月日,R4、R5總天數(shù)
;時(shí)間設(shè)置時(shí):直接在第3組寄存器操作
;第0組(00-07H)(RSI、RSO=OO)計(jì)算中間值臨時(shí)存儲(chǔ)器
;總天數(shù)、星期、當(dāng)天分鐘計(jì)數(shù)器、農(nóng)歷日期寄存器
;30H、31H一一距1925.1.1日總天數(shù)
;32H一一高四位星期幾,低四位與33H當(dāng)天的分鐘數(shù)
;34?37H一—農(nóng)歷年月日
;寄存器配置:(鬧鐘),兩個(gè)字節(jié)為一個(gè)單位
;低地址最高位表示是否設(shè)置鬧鐘,低四位與27H為鬧鐘時(shí)間(當(dāng)天的分鐘數(shù))
;鬧鐘1:28H、29H,星期一到五鬧鐘
;鬧鐘2:2AH、2BH,配置與鬧鐘1相同
;鬧鐘3:2CH、2DH,為每日鬧鐘
;鬧鐘4:2EH、2FH,為一次性鬧鐘
;運(yùn)行狀態(tài)寄存器:27H單元,00H,正常的時(shí)間顯示模式
;IxH,鬧鈴設(shè)置模式,0?1位第幾個(gè)鬧鐘(0?3號(hào)),第3位設(shè)置時(shí)(0)和分(1)
;2xH,萬(wàn)年歷查看模式,0?3分別加減10年、1年、1月、1日,1有效
;4xH,忖間日期設(shè)置,低四位都是0設(shè)置年,第0?3位分別為1時(shí)設(shè)置月、日、時(shí)、分
(加減1)
;方波信號(hào):位地址的07H、06H分別為1秒和0.5秒等脈寬信號(hào),用于控制設(shè)置時(shí)閃爍顯示
;顯示緩沖區(qū):6F?7F單元,分別為星期、年月日、時(shí)分、農(nóng)歷月日,星期1個(gè)單元、年4
個(gè)單元、其余2個(gè)單元
;在計(jì)算過(guò)程中所示用的位寄存器:
;在計(jì)算農(nóng)歷時(shí)用00H位(位地址)表示是否閏月
;y年m月的天數(shù)用25H單元存儲(chǔ)臨時(shí)數(shù)據(jù),01H位(位地址)表示當(dāng)月是29天或30天
;05H計(jì)時(shí)滿一天后或者調(diào)整日期后請(qǐng)求進(jìn)行農(nóng)歷日期計(jì)算標(biāo)志為
;04H調(diào)整小時(shí)或分鐘后重新計(jì)算當(dāng)天分鐘數(shù)請(qǐng)求標(biāo)識(shí)
;06H、07H周期1秒和0.5秒的方波信號(hào),前者用于秒閃爍,后者調(diào)整項(xiàng)閃爍
ORG0000H
;開(kāi)機(jī)及復(fù)位后從第一行起運(yùn)行
LJMP0080H;INITTHECLOCK
ORG0003H
;INTO中斷服務(wù)程序,若有鍵按下則產(chǎn)轉(zhuǎn)入鍵處理
LJMPTIIEKEYDOWNSERVER;90011
ORG000BH
;定時(shí)/計(jì)數(shù)器0中斷服務(wù)程序,預(yù)計(jì)每10毫秒產(chǎn)生一次中斷
LJMPSETTIMEVALUE;0300H
ORG001BH
;定時(shí)/計(jì)數(shù)器1中斷服務(wù)程序,用于延時(shí)5秒后將狀態(tài)寄存器復(fù)位為00H
PUSHA
DEC03H
MOVA,03H
JNZTIMER1RET
;按鍵后16秒中如果沒(méi)有其他按鍵操作,自動(dòng)轉(zhuǎn)換為時(shí)間顯示狀態(tài)
MOVA,27H
JZTIMER1SERVERRET;如果是狀態(tài)0,直接返回
TIMER1STATE1:
JNB3CH,TIMER1STATE2
PUSHPSW;如果是在鬧鐘設(shè)置狀態(tài)下調(diào)用鬧鐘設(shè)置程序
MOVPSW,#000010006
LCALLSETALARMTIME
POPPSW
AJMPTIMER1SERVERRET
TIMER1STATE2:
JNB3DH,TIMER1STATE3
AJMPTIMER1SERVERRET;如果在萬(wàn)年歷查看方式下直接換到時(shí)間顯示狀態(tài)
TIMER1STATE3:
JNB3EH,T1MER1SERVERRET
;如果在時(shí)間設(shè)置狀態(tài)下,更改當(dāng)前分鐘數(shù)
SETB05H;設(shè)置農(nóng)歷日期計(jì)算請(qǐng)求標(biāo)識(shí)
JNB04H,TIMER1SERVERRET
PUSHPSW
PUSHB
MOVPSW,#00011000B;
MOVA,R4;如果調(diào)整了時(shí)間,重新計(jì)算當(dāng)天分鐘數(shù)
MOVB,#60
MULAB
ADDA,R5
MOV33H,A
MOVA,B
ADDCA,#0
MOV32H,A
MOVR6,#0;秒清零
CLR04H
POPB
POPPSW
;AJMPTIMER1SERVERRET
TIMER1SERVERRET:
MOV27H,#0011
CLRTRI
TIMER1RET:
POPA
RETI
ORG0080H
INITTHECLOCK:
MOVSP,#3811
JNB08H,INITRESET
MOVPSW,#000110006;使用3組寄存器(0、1、2、3四組寄存器)
MOVR7,#00;初始時(shí)間:00:00:00,00
MOVR6,#00
MOVR5,#00
MOVR4,#00
MOVR3,#15;初始日期:2000.1.1
MOVR2,#12
MOVRI,#0D4H
MOVRO,#7
MOV33H,#0;初始當(dāng)天分鐘計(jì)數(shù)器,32H高4位為星期
MOV32H,#0
MOV27H,#0
SETB08H;標(biāo)識(shí)上電啟動(dòng),在復(fù)位啟動(dòng)時(shí)不初始化時(shí)間日期
SETB05H;
INITRESET:
MOVPSW,#00H
MOVR0,#28H
LOOPINIT:
MOV@R0,#00
INCR0
CJNER0,#30H,LOOPINIT
CLRPl.7
CLRP2.2
MOVIE,#10001011B;開(kāi)定時(shí)/計(jì)數(shù)器0、1中斷,開(kāi)外部中斷0,關(guān)其余中斷
SETB1T0;設(shè)置INTO為負(fù)邊沿觸發(fā)
MOVIP,#00000010B;設(shè)置定時(shí)/計(jì)數(shù)器0的中斷優(yōu)先級(jí)為高
MOVTMOI),#000100108;定義定時(shí)/計(jì)數(shù)器0計(jì)數(shù)模式,與INTO無(wú)關(guān),計(jì)數(shù)模式為8位自動(dòng)
重裝模式
;定義定時(shí)/計(jì)數(shù)器1計(jì)數(shù)模式,與INT1無(wú)關(guān),計(jì)數(shù)模式為16位計(jì)數(shù)
模式
MOVTHO,#6;擬計(jì)數(shù)脈沖頻率為25K,計(jì)數(shù)滿250時(shí)間為10毫秒
MOVTLO,#6
SETBTRO;啟動(dòng)定時(shí)/計(jì)數(shù)器0
MOVPSW,#000000008
MOVP2,#11111111B
;顯示字符、鬧鈴檢測(cè)比較循環(huán)程序
DISPLAYPREPARATIVE:
JNB05H,LUNARDATETODISPLAY
CLR05H
PUSHPSW;計(jì)算農(nóng)歷日期
MOVPSW,#000100008
ACALLSETLUNARDATE
POPPSW
LUNARDATETODISPLAY:
LCALLALARMCLOCK;鬧鈴檢測(cè)及服務(wù)程序
MOVDPTR,#0F90H;數(shù)字1?9的共陰極顯示碼首地址
MOVA,27H;取運(yùn)行狀態(tài)寄存器,以選擇顯示方式
JNZDISABNORMAL
DISPLAYNORMAL:
MOVA,32H;正常時(shí)間顯示模式下,取星期顯示碼
SWAPA
ANLA,#OFH
JNZDISWEEKDAY
MOVA,#8
DISWEEKDAY:
MOVCA,?A+DPTR
MOV6FH,A
MOVRO,#19H;取年分顯示碼,共4位
MOVRI,#70H
ACALLDISYEARCODE
MOVRO,#1AII;取日期(月日)顯示碼,共4位
ACALLDISCODE
INCRO;取時(shí)間(時(shí)分)顯示碼,共4位
ACALLDISCODE
MOVRO,#36H;取農(nóng)歷日期(月日)顯示碼,共4位
ACALLDISCODE
AJMPDISPLAYRUN
DISABNORMAL:;設(shè)置及萬(wàn)年歷模式下,顯示方式
JB3CH,DISSTATE1XH
JB3DH,DISSTATE2XH
JB3EH,DISSTATE3XH
JB3FH,DISSTATE4XH
AJMPDISPLAYPREPARATIVE
DISSTATE3XH:
AJMPJMPDISSTATE3XH
DISSTATE4XH:
AJMPJMPDISSTATE4XH
DISSTATE1XH:;狀態(tài)1(設(shè)置鬧鐘),星期欄顯示鬧鐘號(hào)(廣4),鬧鈴標(biāo)志亮,時(shí)間欄顯示,
其余不顯示
MOVA,27H;取狀態(tài)字
ANLA,#000001118
INCA
MOVCA,?A+DPTR
MOV6FH,A;在星期一欄顯示鬧鐘號(hào)(1-4)
MOVRI,#70H;陽(yáng)歷的年月日日期都不顯示,送顯示碼00H到顯示緩沖區(qū)
L00PDISSTATE1XH:
MOV?R1,#0
INCRI
CJNERI,#78H,L00PDISSTATE1XH
DECRI
MOVR0,#OCH;時(shí)間時(shí),分顯示碼,第1組寄存器R4、R5
ACALLDISCODE
INCR1
L00PDISSTATE1XH1:;農(nóng)歷日期蘭不顯示,送顯示碼00H到顯示緩沖區(qū)
MOV@R1,#0
INCRI
CJNERI,#80H,L00PDISSTATE1XH1
JB07H,DISSTATE1XHFLICKER
AJMPDISPLAYRUN
DISSTATE1XHFLICKER:;設(shè)置時(shí)的閃爍顯示
JB3BH,DISSTATE1XHFLICKERMINUTE
MOV78H,#0;時(shí)消隱
MOV79H,#0
AJMPDISPLAYRUN
DISSTATE1XHFLICKERMINUTE:
MOV7AH,#0;分消隱
MOV7BH,no
AJMPDISPLAYRUN
DISSTATE2XH:;狀態(tài)2(萬(wàn)年歷),時(shí)間欄不顯示,只顯示陰陽(yáng)歷日期及星期
MOVA,26H;取星期顯示碼,高4位
ANLA,#OFOH
SWAPA
JNZDISSTATE2XHWEEKDAY
MOVA,#8
DISSTATE2XHWEEKDAY:
MOVCA,?A+DPTR
MOV6FH,A
MOVRO,#09H;取年顯示碼,共4位
MOVRI,#70H
ACALLDISYEARCODE
MOVRO,#0AH;取日期(月日)顯示碼,共4位
ACALLDISCODE
L00PDISSTATE2XH:;時(shí)間不顯示,送0為顯示碼
INCR1
MOV@R1,#0
CJNERI,#7BH,L00PDISSTATE2XH
MOVRO,#OEH;取陰歷(月日)顯示碼,共4位
;M0VRI,#7BH
ACALLDISCODE
JB07H,DISSTATE2XHFLICKER
AJMPDISPLAYRUN
DISSTATE2XHFLICKER:
JB38H,DISSTATE2XHFLICKERYEAR10
JB39H,DISSTATE2XHFL1CKERYEAR1
JB3AH,DISSTATE2XHFLICKERM0NTH
JB3BH,DISSTATE2XHFL1CKERDATE
AJMPDISPLAYRUN
DISSTATE2XHFL1CKERYEAR10:
MOV72H,#0
AJMPDISPLAYRUN
DISSTATE2XHFLICKERYEAR1:
MOV73H,#0
AJMPDISPLAYRUN
DISSTATE2XHFLICKERM0NTH:
MOV74H,#0
MOV75H,#0
AJMPDISPLAYRUN
DISSTATE2XHFLICKERDATE:
MOV76H,#0
MOV77H,#0
AJMPDISPLAYRUN
JMPDISSTATE3XH:;狀態(tài)3(設(shè)置時(shí)間日期),不顯示農(nóng)歷的日期和星期
MOV6FH,#0;星期,不顯示
MOVRO,#19H;取年分顯示碼,共4位
MOVRI,#70H
ACALLDISYEARCODE
MOVRO,#1AH;取日期(月日)顯示碼,共4位
ACALLDISCODE
INCRO;取時(shí)間(時(shí)分)顯示碼,共4位
ACALLDISCODE
L00PDISSTATE3XH:;時(shí)間不顯示,送0為顯示碼
INCR1
MOV@R1,#0
CJNERI,#7FH,L00PDISSTATE3XH
JB07H,DISSTATE3XIIFLICKER
AJMPDISPLAYRUN
DISSTATE3XHFLICKER:
JB38H,DISSTATE3XHFLICKERYEAR
JB3911,DISSTATE3XIIFLICKERM0NTII
JB3AH,DISSTATE3XHFLICKERDATE
JB3BH,DISSTATE3XHFLICKERI10UR
;DISSTATE3XHFLICKERINUTE:
MOV7AH,#0
MOV7BH,#0
AJMPDISPLAYRUN
DISSTATE3XHFLICKERYEAR:
MOV70H,#0
MOV71H,#0
MOV72H,#0
MOV73H,#0
AJMPDISPLAYRUN
DISSTATE3XHFL1CKERM0NTH:
MOV74H,#0
MOV75H,#0
AJMPDISPLAYRUN
D1SSTATE3XHFL1CKERDATE:
MOV76H,#0
MOV77H,#0
AJMPDISPLAYRUN
DISSTATE3XHFLICKERH0UR:
MOV78H,#0
MOV79H,#0
AJMPDISPLAYRUN
JMPDISSTATE4XH:
AJMPDISPLAYNORMAL
;AJMPDISPLAYRUN
DISPLAYRUN:;顯示碼送顯示驅(qū)動(dòng)器
MOVC,06H
MOVP2.0,C;
MOVC,07H
MOVP2.1,C;
MOVPO,6FH
SETBP2.2
ACALLDELAY
CLRP2.2
MOVRO,#70H
MOVR2,#0
LOOPDISPLAY:
MOVPO,?RO
MOVA,R2
SWAPA
ANLP2,#OFH
ORLP2,A
CLRP2.3
ACALLDELAY
SETBP2.3
INCRO
INCR2
CJNER2,#16,LOOPDISPLAY
LJMPDISPLAYPREPARATIVE
DELAY:
;顯示延遲
;((2*R6+1)*R7+1)機(jī)器周期
MOVR7,#5
LOOPDALAY:
MOVR6,#100
L00PDALAY1:
DJNZR6,L00PDALAY1
DJNZR7,LOOPDALAY
RET
DISYEARCODE:
MOVA,@R0;計(jì)算年的顯示碼
CLRC
SUBBA,#ODOH;(2000->7D0H)
MOVB,A
DECRO
MOVA,@R0
SUBBA,#07H
JNCDISYEAR2000
INCRO
MOVA,?RO
CLRC
SUBBA,#06CH;(1900->76CH)
MOVB,A
;MOVA,18H
;SUBBA,#07H
MOVA,#1
MOVCA,@A+DPTR
MOV@R1,A
MOVA,#9
MOVCA,?A+DPTR
INCRI
MOV@R1,A
AJMPDISYEAR1O
DISYEAR2000:
MOVA,#2
MOVCA,?A+DPTR
MOV@R1,A
MOVA,#0
MOVCA,@A+DPTR
INCRI
MOV@R1,A
DISYEAR10:
MOVA,B
MOVB,#10
DIVAB
MOVCA,@A+DPTR
INCRI
MOV@R1,A
MOVA,B
MOVCA,@A+DPTR
INCRI
MOV@R1,A
RET
D1SC0DE:
MOVA,@R0
MOVB,#10
DIVAB
MOVCA,?A+DPTR
INCRI
MOV@R1,A
MOVA,B
MOVCA,?A+DPTR
INCRI
MOV@R1,A
INCRO
MOVA,@R0
MOVB,#10
DIVAB
MOVCA,?A+DPTR
INCRI
MOV@R1,A
MOVA,B
MOVCA,?A+DPTR
INCRI
MOV@R1,A
RET
SETLUNARDATE:
MOVA,19H;設(shè)置計(jì)算總天數(shù)程序的入口參數(shù),(年T925)送R2
SUBBA,#85H;1925D=785H
MOVR2,A
MOVR3,1AH;月送R3
MOVR4,1BH;日送R4
LCALLCALCULATETOTALDAYS;計(jì)算距離1925年1月1日的總天數(shù)
MOV30H,R6;計(jì)算結(jié)果送30H、31H單元保存
MOV31H,R7
LCALLSETWEEKDAYS;計(jì)算星期幾
MOVA,R5
SWAPA
ANL32H,#0FH
ORL32H,A;計(jì)算結(jié)果送32H單元高四位保存
MOVR4,30H;計(jì)算農(nóng)歷日期程序入口參數(shù),總天數(shù)送R4、R5
MOVR5,31H
LCALLLUNARDATECALULATE
MOV37H,R7;
MOV36H,R4;
MOVA,R2
ADDA,#85H;1925D=785H
MOV35H,A
MOVA,#0
ADDCA,#07H
MOV34H,A
RET
ORG0300H
;時(shí)間計(jì)數(shù)器累加,設(shè)置當(dāng)前時(shí)間,年月日、時(shí)分秒、0.01秒
;設(shè)置時(shí)間
SETTIMEVALUE:
PUSHPSW;壓棧保護(hù)現(xiàn)場(chǎng)PS%A、B
PUSHA
PUSHB
MOVPSW,#OOO11OOOB;使用第三組寄存器
INC24H;250微秒計(jì)數(shù)器
MOVA,24H
CJNEA,#40,RETTIME
MOV24H,#0011
INCR7;百分之一秒(0.01秒)時(shí)間計(jì)數(shù)器
;產(chǎn)生周期為1秒及0?5秒的方波脈沖信號(hào)
MS250:
CJNER7,#25,MS500
CPL07H
MS500:
CJNER7,#50,MS750
CPL07H
CPL06H
MS750:
CJNER7,#75,MS1000
CPL07H
MS1000:
CJNER7,#100,RETTIME
CPL07H
CPL06H
MOVR7,#0;滿一秒鐘,百分秒計(jì)數(shù)器清零
INCR6;秒計(jì)數(shù)器
CJNER6,#60,RETTIME
MOVR6,#0;滿一分鐘,分計(jì)數(shù)器清零
INCR5;分鐘計(jì)數(shù)器
MOVA,33H;當(dāng)天分鐘數(shù)計(jì)數(shù)器(32H低四位、33H)
ADDA,#1
MOV33H,A
MOVA,#0
ADDCA,32H
MOV32H,A
CJNER5,#60,RETTIME
MOVR5,#0;滿一小時(shí),分鐘計(jì)數(shù)器清零
INCR4;時(shí)計(jì)數(shù)器
CJNER4,#24,RETTIME
MOVR4,#0;滿一天,時(shí)計(jì)數(shù)器清零
MOV33H,#0;當(dāng)天分鐘計(jì)數(shù)器清零
MOV32H,#0
ACALLSETDATEVALUE;設(shè)置日期計(jì)數(shù)器
;計(jì)算日期入口條件設(shè)置
SETB05H;設(shè)置請(qǐng)求計(jì)算農(nóng)歷日期指示
RETTIME:
POPB;出?;謴?fù)現(xiàn)場(chǎng)B、A、PSW
POPA
POPPSW
RETI
;設(shè)置II期
SETDATEVALUE:
INCR3;天計(jì)數(shù)器
MOVA,R2;判斷月份以確定當(dāng)月的天數(shù)
DECA
JZDAY31;1月
DECA
JZDAY28;2月
DECA
JZDAY3L3月
DECA
JZDAY30;4月
DECA
JZDAY31;5月
DECA
JZDAY30;6月
DECA
JZDAY31;7月
DECA
JZDAY31;8月
DECA
JZDAY30;9月
DECA
JZDAY31;10月
DECA
JZDAY30;ll月
DECA
JZDAY31;12月
DAY31:
CJNER3,#32,RETDATE;大月,31天
AJMPSETMONTH
DAY30:
CJNER3,#31,RETDATE;小月,30天
AJMPSETMONTH
DAY28:;2月,平年28天,閏年29天
MOVA,R1;計(jì)算當(dāng)年一1925年
SUBBA,#84H;
MOVB,#4
DIVAB
MOVA,B
JZDAY29
CJNER3,#29,RETDATE;平年2月28天
AJMPSETMONTH
DAY29:
CJNER3,#30,RETDATE;閏年2月29天
;AJMPSETMONTH
SETMONTH:
MOVR3,#1;滿一個(gè)月,日計(jì)數(shù)器設(shè)置為1
INCR2;月計(jì)數(shù)器
CJNER2,#13,RETDATE
MOVR2,#1;滿一年,月計(jì)數(shù)器設(shè)置為1
MOVA,#1;年計(jì)數(shù)器(RO、R1)
ADDA,RI
MOVRI,A
MOVA,#0
ADDCA,RO
MOVRO,A
RETDATE:
RET
ORG0400H
ORG0500H
;計(jì)算當(dāng)天距離1925年1月1日的總天數(shù),使用第2組寄存器
;入口:R2二年一1925,R3=月,R4=E
;出口:R6、R7=總天數(shù)
CALCULATETOTALDAYS:
MOVA,R2;假設(shè)1年有365天,計(jì)算(年-1925)年的總天數(shù)
MOVB,#6DH;16DH(365)的低位字節(jié)
MULAB
MOVR7,A
MOVA,R2
ADDA,B
MOVR6,A
MOVA,R2;補(bǔ)加(年-1925)中閏年補(bǔ)償(一年366天)的天數(shù)
MOVB,#4
DIVAB
ADDA,R7
MOVR7,A
MOVA,#0
ADDCA,R6
MOVR6,A
MOVA,R3;假設(shè)每月有28天,計(jì)算(月一1)個(gè)月的總天數(shù)
DECA
MOVB,#28;設(shè)每月有28天
MULAB
ADDA,R7
MOVR7,A
MOVA,B
ADDCA,R6
MOVR6,A
MOVDPTR,#0F70H;平年月天數(shù)補(bǔ)償表起始地址(大月31天、小月30天、閏年2月29
天)
MOVA,R2
INCA
MOVB,#4
DIVAB
MOVA,B
JNZSETDPTREND
MOVDPTR,#0F80H;閏年月天數(shù)補(bǔ)償表起始地址
SETDPTREND:
MOVA,R3;補(bǔ)加月補(bǔ)償天數(shù)
DECA
MOVCA,?A+DPTR
ADDA,R7
MOVR7,A
MOVA,#0
ADDCA,R6
MOVR6,A
MOVA,R4;日
DECA
ADDA,R7
MOVR7,A
MOVA,#0
ADDCA,R6
MOVR6,A
RET
ORG0580H
;計(jì)算當(dāng)前是星期幾,使用第0組寄存器
;入口:R6、R7,為當(dāng)天距離1925年1月1日的總天數(shù)
;出口:R5,計(jì)算結(jié)果0表示星期天,1?6分別為星期一至星期六
SETWEEKDAYS:
MOVA,R7;取出總天數(shù),加4(1925年1月1日為星期四)
ADDA,#4
MOVR7,A
MOVA,#0
ADDCA,R6
MOVR6,A;計(jì)算總天數(shù)除以7的余數(shù)
MOVB,#7
DIVAB
MOVR6,B
MOVA,R7
MOVB,#7
DIVAB
MOVA,B
RLA
RLA
RLA
MOVR7,A
MOVA,R6
RLA
RLA
RLA
MOVB,#7
DIVAB
MOVR6,B
MOVRO,#3
WEEKDAYSLOOP:
MOVA,R6
CLRCY
RRCA
MOVR6,A
MOVA,R7
RRCA
MOVR7,A
DECRO
CJNERO,#0,WEEKDAYSLOOP
;MOVA,R7
MOVB,#7
DIVAB
MOVR5,B
RET
ORG0700H
;計(jì)算農(nóng)歷日期(年月日),第0組、第1組(00H?0FH)寄存器存儲(chǔ)計(jì)算中間值
;子程序段
LUNARYEARDAYS:
;計(jì)算農(nóng)歷Y年的總天數(shù)
;入口,R2,Y年一1925
;出口,R4、R5,Y年的總天數(shù)
MOVR5,#5CH;設(shè)一年29x12=348(15CH)天
MOVR4,#1
MOVDPTR,#OEOOH;資料起始地址
MOVA,R2;設(shè)置DPTR,原因:資料單位為字(雙字節(jié))
ADDA,DPL
MOVDPL,A
MOVA,#0
ADDCA,DPH;在程序設(shè)計(jì)時(shí)確定該計(jì)算不會(huì)溢出
MOVDPH,A
MOVA,R2;取丫年月份資料高字節(jié)(1?8月份)
MOVCA,@A+DPTR
MOVRO,#0;累加農(nóng)歷Y年應(yīng)補(bǔ)加的天數(shù)
MOVR1,#8;移位計(jì)數(shù)器
L00PLUNARYEARDAYS1:
RLCA
JNCLUNARYEARDAY291
INCRO
LUNARYEARDAY291:
DJNZRI,LOOPLUNARYEARDAYS1
MOVA,R2;取低字節(jié)資料的高四位
INCA
MOVCA,?A+DPTR
MOVRI,#4
L00PLUNARYEARDAYS2:
RLCA
JNCLUNARYEARDAY292
INCRO
LUNARYEARDAY292:
DJNZRI,L00PLUNARYEARDAYS2
MOVA,RO
ADDA,R5
MOVR5,A
MOVA,#0
ADDCA,R4
MOVR4,A
LCALLLUNARLEAPDAYS;補(bǔ)加Y年閏月的天數(shù)(R3)
MOVA,R3
ADDA,R5
MOVR5,A
MOVA,#0
ADDCA,R4
MOVR4,A
RET
LUNARLEAPDAYS:
;計(jì)算農(nóng)歷Y年的閏月的天數(shù)
;入口:R2Y年一1925
;出口:R3,Y年閏月的天數(shù)
LCALLLUNARLEAPMONTH;Y年有無(wú)閏月,潤(rùn)幾月。結(jié)果存在R3
CJNER3,#0,LUNARLEAPDAYS29
MOVR3,#0
LJMPLUNARLEAPDAYSRET
LUNARLEAPDAYS29:
MOVA,R2;取月份資料低字節(jié)低四位(閏月天數(shù)資料)
INCA
ADDA,#2;?。╕年—1924),低四位表示前一年閏月天數(shù)
MOVCA,?A+DPTR
ANLA,#0FH;取低四位
XRLA,#OFH;如果低四位為F,則前一年閏月30天
JZLUNARLEAPDAYS30
MOVR3,#29
LJMPLUNARLEAPDAYSRET
LUNARLEAPDAYS30:
MOVR3,#30
LUNARLEAPDAYSRET:
RET
LUNARLEAPMONTH:
;計(jì)算農(nóng)歷Y年的閨月的月份
;入口:R2Y年一1925
;出口:R3,Y年閏月的月份,0表示Y年無(wú)閨月
MOVA,R2
INCA
MOVCA,?A+DPTR
ANLA,#OFH;取低四位
MOVR3,A
XRLA,#OFH;如果是F,返回0,Y年無(wú)閏月
JNZLUNARLEAPMONTHRET
MOVR3,#0
LUNARLEAPMONTHRET:
RET
LUNARMONTHDAYS:
;計(jì)算農(nóng)歷Y年的M月的天數(shù)
;入口:R2Y年一1925,R4M月
;出口:RX,Y年M月的天數(shù)
;MOVA,R2
;MOVDPTR,#2000H;資料起始地址
;MOVA,R2;設(shè)置DPTR,原因:資料單位為字(雙字節(jié))
;ADDA,DPL
;MOVDPL,A
;MOVA,#0
;ADDCA,DPH;在程序設(shè)計(jì)時(shí)確定該計(jì)算不會(huì)溢出
;MOVDPH,A
MOVA,R2;取丫年月份資料高字節(jié)(1?8月份)
MOVCA,?A+DPTR
MOV25H,A
MOVA,R4;循環(huán)計(jì)數(shù)器
MOVRO,A
MOVRI,#8
MOVA,25H
LOOPMONTHDAYS1:
RLCA
MOV01H,C
DECRO
DECRI
MOV25H,A;保存A寄存器的內(nèi)容
MOVA,RO
JZEX1TL00PM0NTHDAYS2
MOVA,RI
JZEXITL00PM0NTHDAYS1
MOVA,25H;恢復(fù)A寄存器的內(nèi)容
LJMPLOOPMONTHDAYS1
EXITL00PM0NTHDAYS1:
MOVA,R2;取低字節(jié)資料
INCA
MOVCA,?A+DPTR
L00PM0NTHDAYS2:
RLCA
MOV01H,C
DJNZRO,L00PM0NTHDAYS2
EXITL00PM0NTHDAYS2:
JB01H,LUNARM0NTHDAYS30
MOVR3,#29
LJMPLUNARMONTHDAYSRET
LUNARM0NTHDAYS30:
MOVR3,#30
LUNARMONTHDAYSRET:
RET
;計(jì)算農(nóng)歷日期的主程序
LUNARDATECALULATE:
;計(jì)算農(nóng)歷日期,使用第0組或第1組寄存器
;入口:R4、R5總天數(shù)
;出口:1^2=年-1925;R4=月;1^7=日
;分三段計(jì)算1925.1.24?1968.1.30、?2011.2.3、~2045.2.8、2099.12.31
MOVA,R5
CLRC
SUBBA,#033H
MOVR7,A
MOVA,R4
SUBBA,#0B8H
MOVR6,A
MOVR2,#129
JNCEXITFENDUAN
MOVA,R5
CLRC
SUBBA,#0D4H
MOVR7,A
MOVA,R4
SUBBA,#07AH
MOVR6,A
MOVR2,#86
JNCEXITFENDUAN
MOVA,R5
CLRC
SUBBA,#076H
MOVR7,A
MOVA,R4
SUBBA,#03DH
MOVR6,A
MOVR2,#43
JNCEXITFENDUAN
MOVA,R5
CLRC
SUBBA,#017H
MOVR7,A
MOVA,R4
SUBBA,#0
MOVR6,A
MOVR2,#0
JNCEXITFENDUAN
LJMPERRCALCULATE;計(jì)算出錯(cuò),超出日期范圍
EXITFENDUAN:;分段計(jì)算有效總天數(shù)R6、R7,年份R2,R4、R5失效后面的程序可以
使用
LOOPCALCULATEYEAR:
LCALLLUNARYEARDAYS
MOVA,R7
CLRC
SUBBA,R5
MOVR7,A
MOVA,R6
SUBBA,R4
MOVR6,A
JCEX1TL00PCALCULATEYEAR
INCR2
MOVA,R2
XRLA,#176;大于175(2100年)退出循環(huán)
JNZPASSERRCALCULATE2
LJMPERRCALCULATE
PASSERRCALCULATE2:
LJMPLOOPCALCULATEYEAR
EXITLOOPCALCULATEYEAR:
MOVA,R7;加上最后一年減掉的天數(shù),當(dāng)年已經(jīng)過(guò)去的天數(shù),用于計(jì)算月份和日期
ADDA,R5
MOVR7,A
MOVA,R6
ADDCA,R4
MOVR6,A
;DECR2;如果是零,為1926年
LCALLLUNARLEAPMONTH;判斷是否有閏月,月份存在R3
MOVA,R3
MOVR5,A
CLROOH;是否閏月標(biāo)識(shí)
MOVR4,#1;計(jì)算月數(shù)
LOOPCALCULATEMONTH:
MOVA,R5
JZCALCULATEM0NTH1;轉(zhuǎn)無(wú)閏月處理
MoV#1
AA,5
DDA,R
X
RLA,R4
JNZCALCULATEM0NTH1;轉(zhuǎn)非閏月處理
JBOOH,CALCULATEMONTH1
DECR4
SETBOOH;設(shè)置閏年標(biāo)識(shí)
LCALLLUNARLEAPDAYS;讀取當(dāng)年閏月的天數(shù)R3
LJMPCALCULATEMONTH2;
CALCULATEMONTH1:
LCALLLUNARMONTHDAYS;結(jié)果存放在R3中
CALCULATEMONTH2:
JNBOOH,CALCULATEMONTH3
MOVA,#1
ADDA,R5
XRLA,R4
JNZCALCULATEMONTH3
CLROOH;解除閏月標(biāo)識(shí)
CALCULATEMONTH3:
MOVA,R7
CLRC
SUBBA,R3
MOVR7,A
MOVA,R6
SUBBA,#0
MOVR6,A
JCEX1TL00PCALCULATEM0NTH
INCR4
MOVA,R4;如果大于十二退出,提示錯(cuò)誤
XRLA,#13
JZERRCALCULATE
LJMPLOOPCALCULATEMONTH
EXITLOOPCALCULATEMONTH:
MOVA,R5;判斷是否閏月
JZCALCULATEM0NTH5
MOVA,#1
ADDA,R5
XRLA,R4
JNZCALCULATEM0NTH5
JNBOOH,CALCULATEM0NTH4
CLROOH
LJMPCALCULATEM0NTH5
CALCULATEM0NTH4:
SETBOOH
DECR4
CALCULATEM0NTH5:
MOVA,R7;加最后一次減的天數(shù),當(dāng)月已經(jīng)過(guò)完的天數(shù)
ADDA,R3
MOVR7,A
MOVA,#0
ADDCA,R6
MOVR6,A
;DECR4
INCR7;計(jì)算日期
LJMPCALCULATERET
;計(jì)算結(jié)果:1?2=年-1925;R4=月;R7=H
ERRCALCULATE:;錯(cuò)誤顯示
;錯(cuò)誤處理程序
NOP
CALCULATERET:
RET
ORG0900H
THEKEYDOWNSERVER:
;27H單元的位地址高位到低位:37、36、35、34、33、32、31、30(H)
;有鍵按下的位為0,本程序?yàn)榘存I處理分派
CLRTR1;關(guān)閉延時(shí)計(jì)數(shù)器
CLREXO;關(guān)閉INTO中斷
PUSHP0
MOVP0,#0
MOV04H,#10;延時(shí)單元
KEYDELAY:
MOV05H,#200
DJNZ05H,$
DJNZ04H,KEYDELAY
PUSHPSW;保護(hù)現(xiàn)場(chǎng)
PUSHA
PUSHB
MOVPSV#000010008
MOVA,Pl
ORLA,#OFH
MOVPl,A;讀鍵盤口,結(jié)果存儲(chǔ)26H第四位
MOVA,Pl
CPLA
ANLA,#OFH
JZKEYALL0T5;如果無(wú)鍵按下,推出
ANL26H,#OFOH
ORL26H,A
KEYALL0T1:
MOVA,27H
JNZKEYALLOT2
ACALLKEYSTATEO
AJMPKEYALLOT5
KEYALLOT2:
JNB3CH,KEYALLOT3
ACALLKEYSTATE1
AJMPKEYALLOT5
KEYALLOT3:
JNB3DH,KEYALL0T4
ACALLKEYSTATE2
AJMPKEYALLOT5
KEYALL0T4:
JNB3EH,KEYALL0T8
ACALLKEYSTATE3
AJMPKEYALLOT5
KEYALL0T8:
JNB3FH,KEYALL0T5
ACALLKEYSTATE4
;AJMPKEYALL0T5
KEYALLOT5:
POPB;恢復(fù)現(xiàn)場(chǎng)
POPA
POPPSW
POPPO
;設(shè)置延時(shí)計(jì)數(shù)器,如果在5秒鐘內(nèi)沒(méi)有按鍵動(dòng)作自動(dòng)轉(zhuǎn)到時(shí)間顯示狀態(tài)
MOVTH1,#0
MOVTFO,#0
MOV03H,#255
CLRIE0
SETBEXO
SETBTRI;計(jì)時(shí)開(kāi)始
RETI
KEYSTATEO:
;狀態(tài)0按鍵處理,時(shí)間顯示狀態(tài)
STATEOKEYO:
JNB30H,STATE0KEY1
MOV27H,#10H
ACALLPRESETALARMTIME
AJMPKEYSTATEORET
STATE0KEY1:
JNB31H,STATE0KEY2
AJMPSTATE0KEY12
STATE0KEY2:
JNB32H,STATE0KEY3
STATE0KEY12:
MOV27H,#24H
MOVRO,18H
MOVRl,19H
MOVR2,1AH
MOVR3,1BH
MOVR6,36H
MOVR7,37H
MOVA,32H
ANLA,#OFOH
ANL26H,#OFH
ORL26H,A
AJMPKEYSTATEORET
STATEOKEY3:
JNB33H,KEYSTATEORET
MOV27H,#48H
;AJMPKEYSTATEORET
KEYSTATEORET:
RET
KEYSTATE1:
;狀態(tài)1按鍵處理,鬧鐘設(shè)置狀態(tài)
STATE1KEYO:
JNB30H,STATE1KEY1
ACALLSETALARMTIME;SET
MOV27H,#21H;初始化萬(wàn)年歷狀態(tài)
MOVRO,18H
MOVRI,19H
MOVR2,1AH
MOVR3,1BH
MOVR6,36H
MOVR7,37H
MOVA,32H
ANLA,#OFOH
ANL26H,#OFH
ORL26H,A
AJMPKEYSTATE1RET
STATE1KEY1:
JNB31H,STATE1KEY2
JB3BH,STATE1KEY1MIN;UP
INCR4
CJNER4,#25,STATE1KEY1HOUR
MOVR4,#0
STATE1KEY1H0UR:
AJMPKEYSTATE1RET
STATE1KEY1MIN:
ACALLMINUTEADJUST
AJMPKEYSTATE1RET
STATE1KEY2:
JNB32H,STATE1KEY3
JB3BII,STATE1KEY2MIN;DOWN
DECR4
CJNER4,#0FFH,STATE1KEY2H0UR
MOVR4,#24
STATE1KEY2H0UR:
AJMPKEYSTATE1RET
STATE1KEY2MIN:
ACALLMINUTEADJUST
AJMPKEYSTATE1RET
STATE1KEY3:
JNB33H,KEYSTATE1RET
JNB3BH,STATE1KEY3CHANGE;RIGHT
ACALLSETALARMTIME
MOVA,27H
ANLA,#03H
INCA
MOVB,#4
DIVAB
MOVA,B
ANL27H,#OFOH
ORL27H,A
ACALLPRESETALARMTIME
AJMPKEYSTATE1RET
STATE1KEY3CHANGE:
SETB3BH;切換到分鐘調(diào)整
;AJMPKEYSTATE1RET
KEYSTATE1RET:
RET
KEYSTATE2:
;狀態(tài)2按鍵處理,萬(wàn)年歷查看狀態(tài)
STATE2KEY0:
JNB30H,STATE2KEY1
MOV27H,#41H;按鍵0,SET
AJMPKEYSTATE2RET
STATE2KEY1:
JNB31H,STATE2KEY2
JNB38H,STATE2KEY1YEAR;按鍵1,UP
MOVB,#10
ACALLYEARADJUST
AJMPKEYSTATE2RET
STATE2KEY1YEAR:
JNB39H,STATE2KEY1M0NTH
MOVB,#1
ACALLYEARADJUST
AJMPKEYSTATE2RET
STATE2KEY1M0NTH:
JNB3AH,STATE2KEY1DATE
ACALLMONTIIADJUST
AJMPKEYSTATE2RET
STATE2KEY1DATE:
JNB3BH,KEYSTATE2RET
ACALLDATEADJUST
AJMPKEYSTATE2RET
STATE2KEY2:
JNB32H,STATE2KEY3
JNB38H,STATE2KEY2YEAR;按鍵2,DOWN
MOVB,#10
ACALLYEARADJUST
AJMPKEYSTATE2RET
STATE2KEY2YEAR:
JNB39H,STATE2KEY2M0NTH
MOVB,#1
ACALLYEARADJUST
AJMPKEYSTATE2RET
STATE2KEY2M0NTH:
JNB3AH,STATE2KEY2DATE
ACALLMONTHADJUST
AJMPKEYSTATE2RET
STATE2KEY2DATE:
JNB3BH,KEYSTATE2RET
ACALLDATEADJUST
AJMPKEYSTATE2RET
STATE2KEY3:
JNB33H,KEYSTATE2RET
JNB38H,STATE2KEY3YEAR;按鍵3,RIGHT
MOV27H,#0010001OB
AJMPKEYSTATE2RET
STATE2KEY3YEAR:
JNB3911,STATE2KEY3M0NTH
MOV27H,#001001008
AJMPKEYSTATE2RET
STATE2KEY3MONTH:
JNB3AH,STATE2KEY3DATE
MOV27H,#001010006
AJMPKEYSTATE2RET
STATE2KEY3DATE:
JNB3BH,KEYSTATE2RET
MOV27H,#001000016
;AJMPKEYSTATE2RET
KEYSTATE2RET:
MOVPSW,#OOO1OOOOB;使用第二組寄存器
MOVA,0911;設(shè)置計(jì)算總天數(shù)程序的入口參數(shù),(年-1925)送R2
SUBBA,#85H;1925D=785H
MOVR2,A
MOVR3,OAH;月送R3
MOVR4,OBH;日送R4
LCALLCALCULATETOTALDAYS;計(jì)算距離1925年1月1日的總天數(shù)
MOVOCH,R6;計(jì)算結(jié)果送OCH、ODH單元保存
MOVODH,R7
LCALLSETWEEKDAYS;計(jì)算星期幾
MOVA,R5
SWAPA
ANL26H,#OOFH
ORL26H,A;計(jì)算結(jié)果送26H單元高四位保存
MOVR4,OCH;計(jì)算農(nóng)歷日期程序入口參數(shù),總天數(shù)送R4、R5
MOVR5,ODH
LCALLLUNARDATECALULATE
MOVOFH,R7;
MOVOEH,R4;
RET
KEYSTATE3:
;狀態(tài)3按鍵處理,時(shí)間調(diào)整設(shè)置狀態(tài)
MOVPSW,#00011000B
STATE3KEY0:
JNB30H,STATE3KEY1
MOV27H,#00H;按鍵0,SET
JNB04H,STATE3KEY01
MOVA,R4;重新計(jì)算當(dāng)天分鐘數(shù)
MOVB,#60
MULAB
ADDA,R5
MOV33H,A
MOVA,B
ADDCA,#0
MOV32H,A
MOVR6,#0;秒清零
CLR04H
STATE3KEY01:
SETB05H;設(shè)置農(nóng)歷H期計(jì)算請(qǐng)求標(biāo)識(shí)
AJMPKEYSTATE3RET
STATE3KEY1:
JNB31H,STATE3KEY2
JNB38H,STATE3KEY1M0NTH;按鍵1,UP
MOVB,#1
ACALLYEARADJUST
AJMPKEYSTATE3RET
STATE3KEY1M0NTH:
JNB39H,STATE3KEY1DATE
ACALLMONTHADJUST
AJMPKEYSTATE3RET
STATE3KEY1DATE:
JNB3AH,STATE3KEY1H0UR
ACALLDATEADJUST
AJMPKEYSTATE3RET
STATE3KEY1H0UR:
JNB3BH,STATE3KEY1MINUTE
ACALLHOURADJUST
AJMPKEYSTATE3RET
STATE3KEY1MINUTE:
ACALLMINUTEADJUST
AJMPKEYSTATE3RET
STATE3KEY2:
JNB32H,STATE3KEY3
JNB38H,STATE3KEY2M0NTH;按鍵2,DOWN
MOVB,#1
ACALLYEARADJUST
AJMPKEYSTATE3RET
STATE3KEY2M0NTH:
JNB39H,STATE3KEY2DATE
ACALLMONTHADJUST
AJMPKEYSTATE3RET
STATE3KEY2DATE:
JNB3AH,STATE3KEY2H0UR
ACALLDATEADJUST
AJMPKEYSTATE3RET
STATE3KEY2H0UR:
JNB3BH,STATE3KEY2MINUTE
ACALLHOURADJUST
AJMPKEYSTATE3RET
STATE3KEY2MINUTE:
ACALLMINUTEADJUST
AJMPKEYSTATE3RET
STATE3KEY3:
JNB33H,KEYSTATE3RET
JNB38H,STATE3KEY3MONTH;按鍵3,RIGHT
MOV27H,#0100001OB
AJMPKEYSTATE3RET
STATE3KEY3M0NTH:
JNB3911,STATE3KEY3DATE
MOV27H,#01000100B
AJMPKEYSTATE3RET
STATE3KEY3DATE:
JNB3AH,STATE3KEY3H0UR
MOV27H,#010010008
AJMPKEYSTATE3RET
STATE3KEY3H0UR:
JNB3BH,STATE3KEY3MINUTE
MOV27H,#01000000B
AJMPKEYSTATE3RET
STATE3KEY3MINUTE:
MOV27H,#01000001B
;AJMPKEYSTATE3RET
KEYSTATE3RET:
RET
KEYSTATE4:
;狀態(tài)4按鍵處理,鬧鐘響鈴狀態(tài)
MOVA,27H
ANLA,#03H
MOVRO,A
MOVA,#28H
ADDA,RO
ADDA,RO
MOVRO,A
MOVA,?RO
CLRACC.6
SETBACC.5
MOV@R0,A
CLRPl.7
MOV27H,#0011
RET
YEARADJUST:
;調(diào)整年份,1年增量、10年增量,增量值存在B寄存器中,大于2099及小于1925循環(huán)調(diào)整
JB31H,YEARADD
JB32H,YEARSUBB
AJMPYEARADJUSTRET
YEARADD:
MOVA,RI
ADDA,B
MOVRI,A
MOVA,#0
ADDCA,RO
MOVRO,A
MOVA,#03311;(2099<—>833H)
CLRC
SUBBA,RI
MOVA,#08H
SUBBA,RO
JNCYEARADJUSTRET
MOVRO,#07H;(1925<—>785H)
MOVRI,#85H
AJMPYEARADJUSTRET
YEARSUBB:
MOVA,RI
CLRC
SUBBA,B
MOVRI,A
MOVA,RO
SUBBA,#0
MOVRO,A
MOVA,RI
CLRC
SUBBA,#85H
MOVA,RO
SUBBA,#07H
JNCYEARADJUSTRET
MOVRO,#08H
MOVRI,#33H
;AJMPYEARADJUSTRET
YEARADJUSTRET:
MOVA,#28
CLRC
SUBBA,R3
JNCYEARADJUSTRET2
MOVR3,#28
YEARADJUSTRET2:
RET
MONTHADJUST:
;月份調(diào)整,增量1,超12及小于1循環(huán)
JB31H,MONTHADD
JB32H,MONTHSUBB
AJMPMONTHADJUSTRET
MONTHADD:
INCR2
CJNER2,#13,MONTHADJUSTRET
MOVR2,#1
AJMPMONTHADJUSTRET
MONTHSUBB:
DECR2
CJNER2,#0,MONTHADJUSTRET
MOVR2,#12
;AJMPMONTHADJUSTRET
MONTHADJUSTRET:
MOVA,#28
CLRC
SUBBA,R3
JNCMONTHADJUSTRET2
MOVR3,#28
MONTHADJUSTRET2:
RET
DATEADJUST:
;計(jì)算當(dāng)月的天數(shù)
CJNER2,#1,DATE02
MOV06H,#31
AJMPDATE13
DATE02:
CJNER2,#2,DATE03
MOVA,RI;計(jì)算當(dāng)年一1925年
CLRC
SUBBA,#84H;
MOVB,#4
DIVAB
MOVA,B
JZDATE029
MOV06H,#28
AJMPDATE13
DATE029:
MOV0611,#29
AJMPDATE13
DATE03:
CJNER2,#3,DATE04
MOV0611,#31
AJMPDATE13
DATE04:
CJNER2,#4,DATE05
MOV06H,#30
AJMPDATE13
DATE05:
CJNER2,#5,DATE06
MOV06H,#31
AJMPDATE13
DATE06:
CJNER2,#6,DATE07
MOV06H,#30
AJMPDATE13
DATE07:
CJNER2,#7,DATE08
MOV06H,#31
AJMPDATE13
DATE08:
CJNER2,#8,DATE09
MOV06H,#31
AJMPDATE13
DATE09:
CJNER2,#9,DATE10
MOV06H,#30
AJMPDATE13
DATE10:
CJNER2,#10,DATE11
MOV06H,#31
AJMPDATE13
DATE11:
CJNER2,#11,DATE12
MOV06H,#30
AJMPDATE13
DATE12:
CJNER2,#12,DATE13
MOV06H,#31
;AJMPDATE13
DATE13:
JB31H,DATEADD
JB32H,DATESUBB
AJMPDATEADJUSTRET
DATEADD:
INCR3
MOVA,06H
CLRC
SUBBA,R3
JNCDATEADJUSTRET
MOVR3,#1
AJMPDATEADJUSTRET
DATESUBB:
DECR3
CJNER3,#0,DATEADJUSTRET
MOVR3,06H
;AJMPDATEADJUSTRET
DATEADJUSTRET:
RET
HOURADJUST:
;小時(shí)調(diào)整,增量1,00?23有效
JB31H,HOURADD
JB32H,HOURSUBB
AJMPHOURADJUSTRET
HOURADD:
INCR4
CJNER4,#24,HOURADJUSTRET
MOVR4,#0
AJMPHOURADJUSTRET
HOURSUBB:
MOVA,R4
CLRC
SUBBA,#1
MOVR4,A
JNCHOURADJUSTRET
MOVR4,#23
;AJMPHOURADJUSTRET
HOURADJUSTRET:
SETB04H
RET
MINUTEADJUST:
;分鐘調(diào)整,增量1,00?59有效
JB31H,MINUTEADD
JB32H,MINUTESUBB
AJMPMINUTEADJUSTRET
MINUTEADD:
INCR5
CJNER5,#60,MINUTEADJUSTRET
MOVR5,#0
AJMPMINUTEADJUSTRET
MINUTESUBB:
DECR5
CJNER5,#0FFH,MINUTEADJUSTRET
MOVR5,#59
;AJMPMINUTEADJUSTRET
MINUTEADJUSTRET:
SETB04H
RET
SETALARMTIME:
;判斷小時(shí)R4是否24,是取消鬧鐘,否則計(jì)算分鐘數(shù)并設(shè)置鬧鐘
MOVA,27H;取得當(dāng)前設(shè)置鬧鐘時(shí)間地址
ANLA,#03H
MOVRO,A
MOVA,#28H
ADDA,RO
ADDA,RO
MOVRO,A
CJNER4,#24,SETALARMTIME1
MOV@R0,#0;取消鬧鐘
INCRO
MOV@R0,#0
AJMPSETALARMTIMERET
SETALARMT1ME1:
INCRO;設(shè)置鬧鈴時(shí)間
MOVA,R4
MOVB,#60
MULAB
ADDA,R5
MOV?RO,A
MOVA,#0
ADDCA,B
SETBACC.7
DECRO
MOV@R0,A
SETALARMTIMERET:
RET
PRESETALARMTIME:
;讀取當(dāng)前鬧鐘時(shí)間,并判斷是否已經(jīng)設(shè)置,如果已經(jīng)設(shè)置,顯示已設(shè)置時(shí)間,否則顯示24:00
MOVA,27H
ANLA,#03H
MOVRO,A
MOVA,#28H
ADDA,RO
ADDA,RO
MOVRO,A
MOVA,@R0
JNBACC.7,PRESETALARMTIMENON
;MOVA,@R0
ANLA,#0FH
MOVR2,A
INCRO
MOVA,@R0
MOVR3,A
MOVR4,#0
LOOPPRESETALARMTIME:
MOVA,R3
CLRC
SUBBA,#60
MOVR3,A
MOVA,R2
SUBBA,#0
MOVR2,A
INCR4
JNCLOOPPRESETALARMTIME
DECR4
MOVA,R3
ADDA,#60
MOVR5,A
AJMPPRESETALARMTIMERET
PRESETALARMTIMENO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2026年中國(guó)特種閥門市場(chǎng)供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 二零二五年度出借信息咨詢與金融科技解決方案合同3篇
- 2025年度個(gè)人家居裝修服務(wù)合同標(biāo)準(zhǔn)版2篇
- 二零二四年度幼兒園教師勞務(wù)派遣服務(wù)合同范本3篇
- 二零二五年度立體停車庫(kù)車位租賃合同轉(zhuǎn)讓協(xié)議書(shū)3篇
- 二零二五版農(nóng)民工職業(yè)技能提升資助合同3篇
- 2025年度電商平臺(tái)直播內(nèi)容制作與銷售合同4篇
- 二零二五年度兒童床品安全認(rèn)證銷售合同范本4篇
- 高效害蟲(chóng)防治與建筑環(huán)境改善合同二零二五年度4篇
- 市政工程公司合同管理職責(zé)
- 《醫(yī)院財(cái)務(wù)分析報(bào)告》課件
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合卷(含答案)
- 2024中國(guó)汽車后市場(chǎng)年度發(fā)展報(bào)告
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 《人工智能基礎(chǔ)》全套英語(yǔ)教學(xué)課件(共7章)
- GB/T 35613-2024綠色產(chǎn)品評(píng)價(jià)紙和紙制品
- 2022-2023學(xué)年五年級(jí)數(shù)學(xué)春季開(kāi)學(xué)摸底考(四)蘇教版
- 【螞蟻保】2024中國(guó)商業(yè)醫(yī)療險(xiǎn)發(fā)展研究藍(lán)皮書(shū)
- 軍事理論-綜合版智慧樹(shù)知到期末考試答案章節(jié)答案2024年國(guó)防大學(xué)
評(píng)論
0/150
提交評(píng)論