| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:求助:这个万年历程序运行不了
只看楼主 加入收藏
fregt
Rank: 1
等 级:禁止访问
帖 子:2
专家分:0
注 册:2008-6-10
收藏
 问题点数:0 回复次数:0 
求助:这个万年历程序运行不了
如题;程序如下:
;*****************************
;* 万年历程序 *
;*****************************
;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 Dw 66H
MONTH DW 65H
WEEK DW 64H
DAY DW 63H
HOUR DW 62H
MINTUE DW 61H
SECOND DW 60H
DS1302_ADDR DW 32H
DS1302_DATA DW 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
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
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 ;年加1
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 ;调月时闪标志
GWAIT2: LCALL DISPLAY
JNB P1.1,GWAIT2
SETG3: LCALL DISPLAY
JNB P1.1,SETG4
JNB P1.2,GADDMONTH
AJMP SETG3
GADDMONTH: MOV R7,65H ;月加1
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 ;调日时闪标志
GWAIT4: LCALL DISPLAY
JNB P1.1,GWAIT4
SETG5: LCALL DISPLAY
JNB P1.1,SETG6
JNB P1.2,GADDDAY
AJMP SETG5
GADDDAY: MOV R7,63H ;日加1
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 ;调星期时闪标志
GWAIT6: LCALL DISPLAY
JNB P1.1,GWAIT6
SETG7: LCALL DISPLAY
JNB P1.1,SETG8
JNB P1.2,GADDWEEK
AJMP SETG7
GADDWEEK: MOV R7,64H ;星期加1
LCALL ADD1
MOV 64H,A
CJNE A,#08H,GADDWEEK1
MOV 64H,#01H
GADDWEEK1: MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
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 ;调小时时闪标志
GWAIT8: LCALL DISPLAY
JNB P1.1,GWAIT8
SETG9: LCALL DISPLAY
JNB P1.1,SETG10
JNB P1.2,GADDHOUR
AJMP SETG9
GADDHOUR: MOV R7,62H ;小时加1
LCALL ADD1
MOV 62H,A
CJNE A,#24H,GADDHOUR1
MOV 62H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,62H
LCALL WRITE
MOV R0,62H
LCALL DIVIDE ;小时分离送显示缓冲
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
WAITT5: LCALL DISPLAY
JNB P1.2,WAITT5
AJMP SETG9
SETG10: SETB 0EH ;调分时闪标志
GWAIT10: LCALL DISPLAY
JNB P1.1,GWAIT10
SETG11: LCALL DISPLAY
JNB P1.1,SETGOUT
JNB P1.2,GADDMINTUE
AJMP SETG11
GADDMINTUE: MOV R7,61H ;分加1
LCALL ADD1
MOV 61H,A
CJNE A,#60H,GADDMINTUE1
MOV 61H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,61H
LCALL WRITE
MOV R0,61H
LCALL DIVIDE ;分分离送显示缓冲
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAITT6: LCALL DISPLAY
JNB P1.2,WAITT6
AJMP SETG11
SETGOUT: LCALL DISPLAY
JNB P1.1,SETGOUT
LCALL GENGXIN
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振开始振荡
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止写入1302
LCALL WRITE
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
CLR ET1
CLR TR1 ;关闪中断
LJMP MAIN1
;***********************************
;* 闪动调时程序 *
;***********************************
INTT1: PUSH ACC
PUSH PSW
GFLASH: CPL 0FH
JB 0FH,GFLASH1
MOV 7CH,4CH ;全部显示
MOV 7BH,4BH
MOV 7AH,4AH
MOV 79H,49H
MOV 78H,48H
MOV 77H,47H
MOV 76H,46H
MOV 75H,45H
MOV 74H,44H
MOV 73H,43H
MOV 72H,42H
MOV 71H,41H
MOV 70H,40H
GFLASHOUT: POP PSW
POP ACC
RETI
GFLASH1: JB 0AH,GFLASH2 ;调年闪
MOV 7CH,#0AH
MOV 7BH,#0AH
AJMP GFLASHOUT
GFLASH2: JB 0BH,GFLASH3 ;调月闪
MOV 7AH,#0AH
MOV 79H,#0AH
AJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4 ;调日闪
MOV 77H,#0AH
MOV 76H,#0AH
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5 ;调星期闪
MOV 78H,#0AH
AJMP GFLASHOUT
GFLASH5: JB 0EH,GFLASH6 ;调小时闪
MOV 75H,#0AH
MOV 74H,#0AH
AJMP GFLASHOUT
GFLASH6: MOV 73H,#0AH ;调分闪
MOV 72H,#0AH
AJMP GFLASHOUT
;*********************************
;* 加1程序 *
;*********************************
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;*********************************
;* 分离程序 *
;*********************************
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;*********************************
;* 写1302程序 *
;*********************************
WRITE: CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1: RRC A ;送地址给1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2: RRC A
NOP ;送数据给1302
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET
;*******************************
;* 读1302程序 *
;*******************************
READ: CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1: RRC A
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2: CLR SCLK
NOP
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
RET
;*********************************
;* BCD码转换为十进制程序 *
;*********************************
BCD_10: MOV A,R0
ANL A,#0FH
MOV R1,A ;高位*10,加低位
MOV A,R0
SWAP A
ANL A,#0FH
MOV B,#10
MUL AB
ADD A,R1
MOV R0,A
RET
;********************************
;* 查一年数据程序 *
;********************************
CHECKMONTH: LCALL BCD_10
MOV A,R0
MOV B,#04
MUL AB
MOV R1,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R7,A ;第1字节送R7
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R6,A ;第2字节送R6
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R5,A ;第3字节送R5
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R4,A ;第4字节送R4
RET
;******************************
;* 自动更新农历 *
;******************************
GENGXIN: MOV R2,#00H
MOV R3,#00H
MOV A,MONTH
CJNE A,#01H,GM2
MOV R0,DAY ;当前月为1月
LCALL BCD_10 ;当前日转换为十进制,送R2
MOV A,R0
MOV R2,A
AJMP TIAOZHENG1
GM2: CJNE A,#02H,GM3
MOV R0,DAY ;当前月为2月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加31送R2
ADD A,#31
MOV R2,A
AJMP TIAOZHENG1
GM3: CJNE A,#03H,GM4
MOV R0,DAY ;当前月为3月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加59送R2
ADD A,#59
MOV R2,A
AJMP TIAOZHENG1
GM4: CJNE A,#04H,GM5
MOV R0,DAY ;当前月为4月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加90送R2
ADD A,#90
MOV R2,A
AJMP TIAOZHENG1
GM5: CJNE A,#05H,GM6
MOV R0,DAY ;当前月为5月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加120送R2
ADD A,#120
MOV R2,A
AJMP TIAOZHENG1
GM6: CJNE A,#06H,GM7
MOV R0,DAY ;当前月为6月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加151送R2
ADD A,#151
MOV R2,A
AJMP TIAOZHENG1
GM7: CJNE A,#07H,GM8
MOV R0,DAY ;当前月为7月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加181送R2
ADD A,#181
MOV R2,A
AJMP TIAOZHENG1
GM8: CJNE A,#08H,GM9
MOV R0,DAY ;当前月为8月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加212送R2
ADD A,#212
MOV R2,A
AJMP TIAOZHENG1
GM9: CJNE A,#09H,GM10
MOV R0,DAY ;当前月为9月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加243
CLR C
ADD A,#243
JC GGG
MOV R2,A ;A没溢出,送R2
AJMP TIAOZHENG1
GGG: MOV R3,#0FFH ;R3中送#0FFH
INC A ;A溢出,A加1送R2
MOV R2,A
AJMP TIAOZHENG1
GM10: CJNE A,#10H,GM11
MOV R0,DAY ;当前月为10月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加18送R2
ADD A,#18
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM11: CJNE A,#11H,GM12
MOV R0,DAY ;当前月为11月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加49送R2
ADD A,#49
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM12: MOV R0,DAY ;当前月为12月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加79送R2
ADD A,#79
MOV R2,A
MOV R3,#0FFH ;R3中送#0FFH
AJMP TIAOZHENG1
TIAOZHENG1: MOV A,YEAR
MOV B,#04
DIV AB
MOV A,B
JNZ GGG1
MOV A,65H ;当前月是1
CJNE A,#01H,AAAA
AJMP GGG1 ;当前月是2
AAAA: CJNE A,#02H,BBBB
AJMP GGG1
BBBB: CJNE R2,#0FFH,GGG2
MOV R3,#0FFH ;当前月不是1和2
MOV R2,#01H ;R1和R2总和加1
AJMP GGG1
GGG2: INC R2
GGG1: MOV R0,YEAR ;查意一年数据
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,R7
MOV P1.6,C
CJNE A,#01H,GGG3
MOV R2,#01H
MOV A,R3
CJNE A,#00H,NEW1
MOV 57H,#01H ;R2和R3总和减R7
MOV 56H,#01H ;为0,则为春节
LJMP S_PLAY
GGG3: CJNE A,#00H,GGG6
MOV R2,A
AJMP OLD
GGG6: JNB P1.6,NEW2
MOV A,R7
CLR C
SUBB A,R2
MOV R7,A
CJNE R3,#0FFH,GGG5
MOV A,R3
CLR C
SUBB A,R7
MOV R2,A
MOV R3,#00H
AJMP NEW
GGG5: MOV A,R7
MOV R2,A
AJMP OLD
NEW1: MOV R2,#0FFH
MOV R3,#01H
AJMP NEW
NEW2: MOV R2,A
MOV A,R3
CJNE A,#0FFH,GGG4
MOV A,R2
MOV R3,A
MOV R2,#0FFH
GGG4: AJMP NEW
;***************************
;* OLD *
;***************************
;农历为公历的前一年
OLD: MOV A,YEAR
DEC A
MOV R0,A
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,#29
MOV P1.6,C
MOV R6,A
MOV A,R5
JB ACC.0,AAA ;12月为小月,转到AAA
MOV A,R2
CLR C
SUBB A,#30
MOV P1.6,C
MOV R6,A
AAA: MOV A,R6
CJNE A,#00H,BBB
MOV 56H,#29H ;为0,则为11月最后一天
MOV A,R5 ;小月为11月29
JB ACC.1,CCC
MOV 56H,#30H ;大月为11月30
CCC: MOV 57H,#11H
LJMP S_PLAY
BBB: JNB P1.6,DDD
MOV A,#29 ;CY位置位,为12月
CLR C
SUBB A,R2
MOV R4,A
MOV A,R5
JB ACC.0,EEE
MOV A,#30
CLR C
SUBB A,R2
MOV R4,A
MOV A,R5
JB ACC.0,EEE
MOV A,#30
CLR C
SUBB A,R2
MOV R4,A
EEE: MOV A,R4
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#12H
LJMP S_PLAY
DDD: MOV A,#29 ;CY为0,为11月
CLR C
SUBB A,R4
MOV R1,A
MOV A,R5
JB ACC.1,FFF
MOV A,#30
CLR C
SUBB A,R4
MOV R1,A
FFF: MOV A,R1
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#11H
LJMP S_PLAY
;*************************
;* NEW *
;*************************
;农历和公历为同一年,此时R2中值为FFH时,R3有值,否则为0
NEW: NOP
M1: MOV A,R2 ;R2减1月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.6,SM11
MOV A,R2
CLR C
MOV A,#30
MOV R1,A
SM11: JC SM12
MOV A,R1 ;R2减1月天数 够减
MOV R2,A ;转2月
AJMP M2
SM12: CJNE R3,#00H,M13 ;R2减1月天数
LJMP Y1 ;不够减,判断R3为0否
M13: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让1月减
MOV R2,A ;还不够转Y1
MOV R3,#00H
AJMP M1
M2: CLR C ;R2减1月天数 够减
MOV A,R2 ;转3月
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.5,M21
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M21: JC M22
MOV A,R1 ;R2减2月天数 够减
MOV R2,A
AJMP MM2
M22: CJNE R3,#00H,M23 ;R2减2月天数
LJMP Y2 ;不够减,判断R3为0否
M23: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让2月减
MOV R2,A ;还不够转Y2
MOV R3,#00H
AJMP M2
MM2: LCALL CHECKRE ;查2月,如果不为闰月
CJNE A,#02H,M3 ;转3月
RM2: MOV A,R4
ANL A,#0FH ;R2减闰2月天数
JNZ RM21
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM22
RM21: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM22: JC RM23
MOV A,R1 ;R2减闰2月天数,够减
MOV R2,A ;转3月
AJMP M3
RM23: CJNE R3,#00H,RM24 ;R2减润2月天数
LJMP RY2 ;不够减,判断R3为0否
RM24: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让闰2月减
MOV R3,#00H ;还不够转RY2
AJMP RM2
M3: MOV A,R2 ;R2减3月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.4,M31
CLR C
MOV A,R2
SUBB A,#30
MOV R1,A
M31: JC M32
MOV A,R1 ;R2减3月天数,够减
MOV R2,A
AJMP MM3
M32: CJNE R3,#00H,M33 ;R2减3月天数
LJMP Y3 ;不够减,判断R3为0否
M33: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让3月减
MOV R2,A ;还不够,则转Y3
MOV R3,#00H
AJMP M3
MM3: LCALL CHECKRE ;查3月,如果不为闰月
CJNE A,#03H,M4 ;转4月
RM3: MOV A,R4
ANL A,#0FH ;R2减闰3月天数
JNZ RM31
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM32
RM31: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM32: JC RM33
MOV A,R1 ;R2减闰3月天数,够减
MOV R2,A ;转4月
AJMP M4
RM33: CJNE R3,#00H,RM34
LJMP RY3 ;R2减润3月天数
RM34: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰3月减
MOV R3,#00H ;还不够转RY3
AJMP RM3
M4: MOV A,R2 ;R2减4月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.2,M41
CLR C
MOV A,R2
SUBB A,#30
MOV R1,A
M41: JC M42
MOV A,R1 ;R2减4月天数,够减
MOV R2,A
AJMP MM4
M42: CJNE R3,#00H,M43 ;R2减4月天数
LJMP Y4 ;不够减,判断R3为0否
M43: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让4月减
MOV R2,A ;还不够,则转Y4
MOV R3,#00H
AJMP M4
MM4: LCALL CHECKRE ;查4月,如果不为闰月
CJNE A,#04H,M5 ;转5月
RM4: MOV A,R4
ANL A,#0FH ;R2减闰4月天数
JNZ RM41
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM42
RM41: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM42: JC RM43
MOV A,R1 ;R2减闰4月天数,够减
MOV R2,A ;转5月
AJMP M5
RM43: CJNE R3,#00H,RM44
LJMP RY4 ;R2减润4月天数
RM44: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰4月减
MOV R3,#00H ;还不够转RY4
AJMP RM4
M5: MOV A,R2 ;R2减5月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.1,M51
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M51: JC M52
MOV A,R1 ;R2减5月天数,够减
MOV R2,A
AJMP MM5
M52: CJNE R3,#00H,M53 ;R2减5月天数
LJMP Y5 ;不够减,判断R3为0否
M53: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让5月减
MOV R2,A ;还不够,则转Y5
MOV R3,#00H
AJMP M5
MM5: LCALL CHECKRE ;查5月,如果不为闰月
CJNE A,#05H,M6 ;转6月
RM5: MOV A,R4
ANL A,#0FH ;R2减闰5月天数
JNZ RM51
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM52
RM51: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM52: JC RM53
MOV A,R1 ;R2减闰5月天数,够减
MOV R2,A ;转6月
LJMP M6
RM53: CJNE R3,#00H,RM54
LJMP RY5 ;R2减润5月天数
RM54: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰5月减
MOV R3,#00H ;还不够转RY5
LJMP RM5
M6: MOV A,R2 ;R2减6月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R6
JB ACC.0,M61
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M61: JC M62
MOV A,R1 ;R2减6月天数,够减
MOV R2,A
AJMP MM6
M62: CJNE R3,#00H,M63 ;R2减6月天数
LJMP Y6 ;不够减,判断R3为0否
M63: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让6月减
MOV R2,A ;还不够,则转Y6
MOV R3,#00H
AJMP M6
MM6: LCALL CHECKRE ;查6月,如果不为闰月
CJNE A,#06H,M7 ;转7月
RM6: MOV A,R4
ANL A,#0FH ;R2减闰6月天数
JNZ RM61
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM62
RM61: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM62: JC RM63
MOV A,R1 ;R2减闰6月天数,够减
MOV R2,A ;转7月
LJMP M7
RM63: CJNE R3,#00H,RM64
LJMP RY6 ;R2减润6月天数
RM64: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰6月减
MOV R3,#00H ;还不够转RY6
LJMP RM6
M7: MOV A,R2 ;R2减7月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.6,M71
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M71: JC M72
MOV A,R1 ;R2减7月天数,够减
MOV R2,A
AJMP MM7
M72: CJNE R3,#00H,M73 ;R2减7月天数
LJMP Y7 ;不够减,判断R3为0否
M73: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让7月减
MOV R2,A ;还不够,则转Y7
MOV R3,#00H
AJMP M7
MM7: LCALL CHECKRE ;查7月,如果不为闰月
CJNE A,#07H,M8 ;转8月
RM7: MOV A,R4
ANL A,#0FH ;R2减闰7月天数
JNZ RM71
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM72
RM71: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM72: JC RM73
MOV A,R1 ;R2减闰7月天数,够减
MOV R2,A ;转8月
LJMP M8
RM73: CJNE R3,#00H,RM74
LJMP RY7 ;R2减润5月天数
RM74: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰7月减
MOV R3,#00H ;还不够转RY7
LJMP RM7
M8: MOV A,R2 ;R2减8月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.5,M81
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M81: JC M82
MOV A,R1 ;R2减8月天数,够减
MOV R2,A
AJMP MM9 ;转9月
M82: CJNE R3,#00H,M83 ;R2减8月天数
LJMP Y8 ;不够减,判断R3为0否
M83: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让8月减
MOV R2,A ;还不够,则转Y8
MOV R3,#00H
LJMP M8
M9: MOV A,R2 ;R2减9月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.4,M91
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M91: JC M92
MOV A,R1 ;R2减9月天数,够减
MOV R2,A
AJMP MM9
M92: CJNE R3,#00H,M93 ;R2减9月天数
LJMP Y9 ;不够减,判断R3为0否
M93: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让9月减
MOV R2,A ;还不够,则转Y7
MOV R3,#00H
AJMP M9
MM9: LCALL CHECKRE ;查7月,如果不为闰月
CJNE A,#09H,M10 ;转10月
RM9: MOV A,R4
ANL A,#0FH ;R2减闰9月天数
JNZ RM91
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
AJMP RM92
RM91: MOV A,R2
CLR C
SUBB A,#29
MOV R1,A
RM92: JC RM93
MOV A,R1 ;R2减闰9月天数,够减
MOV R2,A ;转10月
LJMP M10
RM93: CJNE R3,#00H,RM94
LJMP RY9 ;R2减润9月天数
RM94: MOV A,R2 ;不够减,判断R3为0否
ADD A,R3 ;不为0,R3加到R2中
MOV R2,A ;再让闰9月减
MOV R3,#00H ;还不够转RY9
LJMP RM9
M10: MOV A,R2 ;R2减10月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.2,M101
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M101: JC M102
MOV A,R1 ;R2减10月天数,够减
MOV R2,A
LJMP M11 ;转11月
M102: CJNE R3,#00H,M93 ;R2减10月天数
LJMP Y10 ;不够减,判断R3为0否
M103: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让10月减
MOV R2,A ;还不够,则转Y10
MOV R3,#00H
LJMP M10
M11: MOV A,R2 ;R2减11月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.1,M111
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M111: JC M112
MOV A,R1 ;R2减11月天数,够减
MOV R2,A
LJMP M12
M112: CJNE R3,#00H,M113 ;R2减11月天数
LJMP Y11 ;不够减,判断R3为0否
M113: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让10月减
MOV R2,A ;还不够,则转Y10
MOV R3,#00H
LJMP M11
M12: MOV A,R2 ;R2减12月天数
CLR C
SUBB A,#29
MOV R1,A
MOV A,R5
JB ACC.0,M121
MOV A,R2
CLR C
SUBB A,#30
MOV R1,A
M121: CJNE R3,#00H,M122 ;R2减12月天数
LJMP Y12 ;不够减,判断R3为0否
M122: MOV A,R2 ;不为0,R3加到R2中
ADD A,R3 ;再让10月减
MOV R2,A ;还不够,则转Y10
MOV R3,#00H
LJMP M12
Y1: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#01H
CLR F0 ;非闰月
LJMP S_PLAY
Y2: CJNE R2,#00H,Y21
MOV A,R6 ;R2为0,则为前一月最后一天
MOV 56H,#29H
JB ACC.6,Y22
MOV 56H,#30H
Y22: MOV 57H,#01H
CLR F0
LJMP S_PLAY
Y21: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#02H
CLR F0
LJMP S_PLAY
RY2: CJNE R2,#00H,RY21
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.5,RY22
MOV 56H,#30H
RY22: MOV 57H,#02H
CLR F0
LJMP S_PLAY
RY21: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#02H
SETB F0 ;闰月
LJMP S_PLAY
Y3: CJNE R2,#00H,Y31
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#02H,Y32
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y33
MOV 56H,#30H
MOV 57H,#02H
SETB F0
LJMP S_PLAY
Y33: MOV 57H,#02H
SETB F0
LJMP S_PLAY
Y32: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.5,Y34
MOV 56H,#30H
Y34: MOV 57H,#02H
CLR F0
LJMP S_PLAY
Y31: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#03H
CLR F0
LJMP S_PLAY
RY3: CJNE R2,#00H,RY31
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.4,RY32
MOV 56H,#30H
RY32: MOV 57H,#03H
CLR F0
LJMP S_PLAY
RY31: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#03H
SETB F0 ;闰月
LJMP S_PLAY
Y4: CJNE R2,#00H,Y41
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#03H,Y42
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y43
MOV 56H,#30H
MOV 57H,#03H
SETB F0
LJMP S_PLAY
Y43: MOV 57H,#03H
SETB F0
LJMP S_PLAY
Y42: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.4,Y44
MOV 56H,#30H
Y44: MOV 57H,#03H
CLR F0
LJMP S_PLAY
Y41: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#04H
CLR F0
LJMP S_PLAY
RY4: CJNE R2,#00H,RY41
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.2,RY42
MOV 56H,#30H
RY42: MOV 57H,#04H
CLR F0
LJMP S_PLAY
RY41: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#04H
SETB F0 ;闰月
LJMP S_PLAY
Y5: CJNE R2,#00H,Y51
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#04H,Y52
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y53
MOV 56H,#30H
MOV 57H,#04H
SETB F0
LJMP S_PLAY
Y53: MOV 57H,#04H
SETB F0
LJMP S_PLAY
Y52: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.2,Y44
MOV 56H,#30H
Y54: MOV 57H,#04H
CLR F0
LJMP S_PLAY
Y51: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#05H
CLR F0
LJMP S_PLAY
RY5: CJNE R2,#00H,RY51
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.1,RY52
MOV 56H,#30H
RY52: MOV 57H,#05H
CLR F0
LJMP S_PLAY
RY51: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#05H
SETB F0 ;闰月
LJMP S_PLAY
Y6: CJNE R2,#00H,Y61
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#05H,Y62
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y63
MOV 56H,#30H
MOV 57H,#05H
SETB F0
LJMP S_PLAY
Y63: MOV 57H,#05H
SETB F0
LJMP S_PLAY
Y62: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.1,Y64
MOV 56H,#30H
Y64: MOV 57H,#05H
CLR F0
LJMP S_PLAY
Y61: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#06H
CLR F0
LJMP S_PLAY
RY6: CJNE R2,#00H,RY61
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.0,RY62
MOV 56H,#30H
RY62: MOV 57H,#06H
CLR F0
LJMP S_PLAY
RY61: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#06H
SETB F0 ;闰月
LJMP S_PLAY
Y7: CJNE R2,#00H,Y71
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#06H,Y72
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y73
MOV 56H,#30H
MOV 57H,#06H
SETB F0
LJMP S_PLAY
Y73: MOV 57H,#06H
SETB F0
LJMP S_PLAY
Y72: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.0,Y74
MOV 56H,#30H
Y74: MOV 57H,#06H
CLR F0
LJMP S_PLAY
Y71: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#07H
CLR F0
LJMP S_PLAY
RY7: CJNE R2,#00H,RY71
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R6
JB ACC.6,RY72
MOV 56H,#30H
RY72: MOV 57H,#07H
CLR F0
LJMP S_PLAY
RY71: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#07H
SETB F0 ;闰月
LJMP S_PLAY
Y8: CJNE R2,#00H,Y81
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#07H,Y82
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y83
MOV 56H,#30H
MOV 57H,#07H
SETB F0
LJMP S_PLAY
Y83: MOV 57H,#07H
SETB F0
LJMP S_PLAY
Y82: MOV 56H,#29H ;前一个月不是闰月
MOV A,R6
JB ACC.6,Y84
MOV 56H,#30H
Y84: MOV 57H,#07H
CLR F0
LJMP S_PLAY
Y81: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#08H
CLR F0
LJMP S_PLAY
Y9: CJNE R2,#00H,Y91
MOV 56H,#29H
MOV A,R5
JB ACC.5,Y94
MOV 56H,#30H
Y94: MOV 57H,#08H
CLR F0
LJMP S_PLAY
Y91: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#09H
CLR F0
LJMP S_PLAY
RY9: CJNE R2,#00H,RY91
MOV 56H,#29H ;R2为0,则为前一月最后一天
MOV A,R5
JB ACC.4,RY92
MOV 56H,#30H
RY92: MOV 57H,#09H
CLR F0
LJMP S_PLAY
RY91: MOV A,R2 ;R2中为日的值
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#09H
SETB F0 ;闰月
LJMP S_PLAY
Y10: CJNE R2,#00H,Y101
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#09H,Y102
MOV 56H,#29H ;前一个月是闰月
MOV A,R4
ANL A,#0FH ;R2中为0,则为前一个月的最后一天
JNZ Y103
MOV 56H,#30H
MOV 57H,#09H
SETB F0
LJMP S_PLAY
Y103: MOV 57H,#09H
SETB F0
LJMP S_PLAY
Y102: MOV 56H,#29H ;前一个月不是闰月
MOV A,R5
JB ACC.4,Y104
MOV 56H,#30H
Y104: MOV 57H,#09H
CLR F0
LJMP S_PLAY
Y101: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#010H
CLR F0
LJMP S_PLAY
Y11: CJNE R2,#00H,Y111
MOV 56H,#29H
MOV A,R5
JB ACC.2,Y112
MOV 56H,#30H
Y112: MOV 57H,#10H
CLR F0
LJMP S_PLAY
Y111: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#11H
CLR F0
LJMP S_PLAY
Y12: CJNE R2,#00H,Y121
MOV 56H,#29H
MOV A,R5
JB ACC.1,Y122
MOV 56H,#30H
Y122: MOV 57H,#11H
CLR F0
LJMP S_PLAY
Y121: MOV A,R2
MOV R0,A ;R2中为日的值
LCALL D_BCD
MOV 56H,A
MOV 57H,#12H
CLR F0
LJMP S_PLAY
S_PLAY: MOV R0,57H
LCALL DIVIDE ;月分离送显示缓存
MOV 52H,R1
MOV 53H,R2
MOV R0,56H
LCALL DIVIDE ;日分离送显示缓存
MOV 50H,R1
MOV 51H,R2
RET
;********************************
;* 查是否闰月程序 *
;********************************
CHECKRE: MOV A,R4
SWAP A
ANL A,#0FH
RET
;********************************
;* 十进制转换为BCD码程序 *
;********************************
D_BCD: MOV A,R0
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;********************************
;* 显示程序 *
;********************************
DISPLAY: MOV 7EH,#02H
MOV 7DH,#00H


MOV R0,#76H
MOV R1,#70H

MOV R2,79H
MOV R3,#79H
MOV R5,#0FEH

PLAY1:
MOV A,#0FFH
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A ;送第1字节
JNB TI,$
CLR TI
MOV A,@R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A ;送第2字节
JNB TI,$
CLR TI
MOV A,@R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A ;送第3字节
JNB TI,$
CLR TI
INC R0
INC R1
INC R3
MOV A,R3
SETB PSW.4 ;选2组寄存器
MOV R0,A
MOV A,@R0
CLR PSW.4
MOV R2,A
MOV A,R0
CJNE A,#78H,PLAY2
MOV R0,#50H
PLAY2:
CJNE A,#54H,PLAY3
MOV R0,#78H
PLAY3:
MOV A,R5
MOV P2,A
LCALL DL1MS
MOV A,R5
JNB ACC.6,PLAYOUT
RL A
MOV R5,A
LJMP PLAY1
PLAYOUT:
SETB P2.6
RET
DL1MS:
MOV R6,#14H
DL1:
MOV R7,#19H
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;*****************************
;* 数据表 *
;*****************************
TAB1: DB 03H,9FH,25H,0DH,99H
DB 49H,41H,1FH,01H,09H,0FFH
TAB: DB 35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H
DB 31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H
DB 28,25H,04H,71H,48,66H,42H,00H,37,33H,32H,00H
DB 25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H
DB 22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H
DB 49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H
DB 46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41H
DB 42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H
DB 40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H
DB 36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H
DB 33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H
DB 30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H
DB 27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H
DB 23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H
DB 21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H
DB 47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H
DB 44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H
END








MOV R2,#00H
MOV R3,#00H
MOV A,MONTH
CJNE A,#01H,GM2
MOV R0,DAY ;当前月为1月
LCALL BCD_10 ;当前日转换为十进制,送R2
MOV A,R0
MOV R2,A
AJMP TIAOZHENG1
GM2: CJNE A,#02H,GM3
MOV R0,DAY ;当前月为2月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加31送R2
ADD A,#31
MOV R2,A
AJMP TIAOZHENG1
GM3: CJNE A,#03H,GM4
MOV R0,DAY ;当前月为3月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加59送R2
ADD A,#59
MOV R2,A
AJMP TIAOZHENG1
GM4: CJNE A,#04H,GM5
MOV R0,DAY ;当前月为4月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加90送R2
ADD A,#90
MOV R2,A
JMP TIAOZHENG1
GM5: CJNE A,#05H,GM6
MOV R0,DAY ;当前月为5月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加120送R2
ADD A,#120
MOV R2,A
AJMP TIAOZHENG1
GM6: CJNE A,#06H,GM7
MOV R0,DAY ;当前月为6月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加151送R2
ADD A,#151
MOV R2,A
AJMP TIAOZHENG1
GM7: CJNE A,#07H,GM8
MOV R0,DAY ;当前月为7月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加181送R2
ADD A,#181
MOV R2,A
AJMP TIAOZHENG1
GM8: CJNE A,#08H,GM9
MOV R0,DAY ;当前月为8月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加212送R2
ADD A,#212
MOV R2,A
JMP TIAOZHENG1
GM9: CJNE A,#09H,GM10
MOV R0,DAY ;当前月为9月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加243
CLR C
ADD A,#243
JC GGG
MOV R2,A ;A没溢出,送R2
AJMP TIAOZHENG1
GGG: MOV R3,#0FFH ;R3中送#0FFH
INC A ;A溢出,A加1送R2
MOV R2,A
AJMP TIAOZHENG1
GM10: CJNE A,#10H,GM11
MOV R0,DAY ;当前月为10月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加18送R2
ADD A,#18
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM11: CJNE A,#11H,GM12
MOV R0,DAY ;当前月为11月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加49送R2
ADD A,#49
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM12: MOV R0,DAY ;当前月为12月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加79送R2
ADD A,#79
MOV R2,A
MOV R3,#0FFH ;R3中送#0FFH
AJMP TIAOZHENG1


但是错误很多,我怎么修改也运行不了。哪位高手帮帮看好吗?谢谢啦
搜索更多相关主题的帖子: 万年历 运行 
2008-06-11 09:01
快速回复:求助:这个万年历程序运行不了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019833 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved