⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wannieli.asm

📁 19位万年历程序(带8个定时器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
            MOV DS1302_ADDR,#0C9H
            LCALL READ
            MOV ALARM2ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0CBH
            LCALL READ
            MOV ALARM3ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0CDH
            LCALL READ
            MOV ALARM3ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0CFH
            LCALL READ
            MOV ALARMTIME,DS1302_DATA
            MOV DS1302_ADDR,#0D1H
            LCALL READ
            MOV ALARM4ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0D3H
            LCALL READ
            MOV ALARM4ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0D5H
            LCALL READ
            MOV OUT1ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0D7H
            LCALL READ
            MOV OUT1ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0D9H
            LCALL READ
            MOV OUT1OFF_H,DS1302_DATA
            MOV DS1302_ADDR,#0DBH
            LCALL READ
            MOV OUT1OFF_L,DS1302_DATA
            MOV DS1302_ADDR,#0DDH
            LCALL READ
            MOV OUT2ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0DFH
            LCALL READ
            MOV OUT2ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0E1H
            LCALL READ
            MOV OUT2OFF_H,DS1302_DATA
            MOV DS1302_ADDR,#0E3H
            LCALL READ
            MOV OUT2OFF_L,DS1302_DATA
            MOV DS1302_ADDR,#0E5H
            LCALL READ
            MOV OUT3ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0E7H
            LCALL READ
            MOV OUT3ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0E9H
            LCALL READ
            MOV OUT3OFF_H,DS1302_DATA
            MOV DS1302_ADDR,#0EBH
            LCALL READ
            MOV OUT3OFF_L,DS1302_DATA
            MOV DS1302_ADDR,#0EDH
            LCALL READ
            MOV OUT4ON_H,DS1302_DATA
            MOV DS1302_ADDR,#0EFH
            LCALL READ
            MOV OUT4ON_L,DS1302_DATA
            MOV DS1302_ADDR,#0F1H
            LCALL READ
            MOV OUT4OFF_H,DS1302_DATA
            MOV DS1302_ADDR,#0F3H
            LCALL READ
            MOV OUT4OFF_L,DS1302_DATA
            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 RYEAR,C
            CJNE A,#01H,GGG3
            MOV R2,#01H
            MOV A,R3
            CJNE A,#00H,NEW1
            MOV NMONTH,#01H          ;R2和R3总和减R7
            MOV NDAY,#01H            ;为0,则为春节
            LJMP S_PLAY
GGG3:       CJNE A,#00H,GGG6
            MOV R2,A
            AJMP OLD
GGG6:       JNB RYEAR,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 RYEAR,C
            MOV R6,A
            MOV A,R5
            JB ACC.0,AAA             ;12月为小月,转到AAA
            MOV A,R2
            CLR C
            SUBB A,#30
            MOV RYEAR,C
            MOV R6,A
AAA:        MOV A,R6
            CJNE A,#00H,BBB
            MOV NDAY,#29H            ;为0,则为11月最后一天
            MOV A,R5                 ;小月为11月29
            JB ACC.1,CCC
            MOV NDAY,#30H            ;大月为11月30
CCC:        MOV NMONTH,#11H
            LJMP S_PLAY
BBB:        JNB RYEAR,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
EEE:        MOV A,R4
            MOV R0,A
            LCALL D_BCD
            MOV NDAY,A
            MOV NMONTH,#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 NDAY,A
            MOV NMONTH,#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
            SUBB 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月

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -