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

📄 万年历.txt

📁 [DBG8051.rar] - 搜集的一款学习51单片机的软件!感觉用着还不错. [232shoufa.rar] - 单片机 实现的RS232串口读写汇编程序 [TPPHZTAB.rar] -
💻 TXT
字号:
SJ DATA 30H ; 世纪 BCD 00 TO 99 
NH DATA 31H ; 年号 BCD 00 TO 99 0000 TO 9999 年 
YF DATA 32H ; 月份 BCD 01 TO 12 

org 000h 
MOV SP, #40H 
MOV SJ, #21H ;2004-05 
MOV NH, #01H 
MOV YF, #4H 
ACALL SUB_WNL 
SJMP $ 

;===============SUB_WNL=================== 
; 入口: 
; SJ DATA 30H ; 世纪 BCD 00 TO 99 
; NH DATA 31H ; 年号 BCD 00 TO 99 0000 TO 9999 年 
; YF DATA 32H ; 月份 BCD 01 TO 12 
; 出口 
; ACC -- 本月天数 BCD 28 to 31 
; B -- 本月1日的星期数 1 to 6 == 星期1 to 星期6 
; 0 -- 星期日 
; 使用: ACC, B, R5, R6 
; STACK: 3 bytes (不包括调用) 
ORG 50H 


SUB_WNL: 
PUSH PSW 
MOV A, SJ 
ACALL BCD2BIN_MOD4 
; x 400年: (大周期) 
; =146097天 = 7 * 20871 + 0 天 
; x 100年: 
; 000年 = 7 * 0 + 0 + 1 - 1 1 = 0 * 2 + 1 **** 
; 100年 = 7 * 5217 + 7 + 1 - 2 2 = 1 * 2 
; 200年 = 7 * 10435 + 7 + 1 - 4 4 = 2 * 2 
; 300年 = 7 * 15653 + 7 + 1 - 6 6 = 3 * 2 
; {1,2,4,6} 
MOV A, R6 ; A=R6= SJ_BIN MOD 4 
RLC A ; A=A*2+C A = {1,2,4,6} **** 
XRL A, #10000111B ; A = 87H - A ; 边界调整 
MOV R5, A ; A = {86H, 85H, 83H, 81H} ; R5: 星期 
MOV A, NH 
JZ WNL_1 
ACALL BCD2BIN_MOD4 
XCH A, R5 
SUBB A, R5 ; 0 年 ; 0 = 0 + 0 + 1 + (-1) *** 
MOV R5, A 

WNL_1: 
MOV A, YF 
ADD A, #(WNL_TAB-$-4) 
MOVC A, @A+PC 
MOV R6, A 

SWAP A 
ACALL WNL_F0; 大年对>=3月调整准备 
ADDC A, R5 ; 月调整 
MOV B, #7 
DIV AB ; B = A MOD 7 

MOV A, R6 
ACALL WNL_F0; 大年调整准备 
ADDC A, #28 
POP PSW 
RET 

WNL_TAB: 
DB 3*2 + 5 * 32+0 ;1 BIT 0 : "2月" 标志 
DB 0*2+1+1 * 32+0 ;2 ** BIT 1..2: 月大小 
DB 3*2 + 1 * 32+16 ;3 00:28 天 
DB 2*2 + 4 * 32+16 ;4 01:---- 
DB 3*2 + 6 * 32+16 ;5 10: 30 天 
DB 2*2 + 2 * 32+16 ;6 11: 31 天 
DB 3*2 + 4 * 32+16 ;7 BIT 3: 0 ----- 
DB 3*2 + 7 * 32+16 ;8 BIT 4: 0: 1/2月 
DB 2*2 + 3 * 32+16 ;9 1: >=3月 
WNL_F0: ; 6 BYTES ; 大年调整准备 
RRC A ;0AH 
ANL A, #07H ;0BH 
;0CH 
ANL C, F0 ;0DH 
;0EH 
RET ;0FH 
DB 3*2 + 5 * 32+16 ;10H BIT 5..7: 星期调整数 
DB 2*2 + 1 * 32+16 ;11H 0:--- 
DB 3*2 + 3 * 32+16 ;12H 1-7: 调整数 

BCD2BIN_MOD4: 
; 功能:A. 1 BYTES BCD TO BIN 
; B. MOD 4 
; C. MUL 2 
; 入口: 
; A : SJ OR NH 
; F0 : 大世纪 
; 出口 
; ACC -- (BIN(A) \ 4) * 2 - (BIN(A) MOD 4) - F0 
; R6 -- BIN(A) MOD 4 
; C -- IIF( (BIN(A) MOD 4)=0, 1, 0 ) 
; 使用: ACC, B, R6, PSW 
; STACK: 0 bytes (不包括调用) 

MOV R6, A ; BCD ==> BIN 
ANL A, #0F0H ; 16X+Y ==> 10X+Y 
SWAP A 
MOV B, #(256-6) ; (256-6)*X + (16X+Y) 
MUL AB ; 
ADD A, R6 ; = 256X + (10X+Y) 

MOV R6, A ; MOD4 
ANL A, #3 
XCH A, R6 ; R6 = BIN MOD 4 = {0,1,2,3} 
; X 4年:3 * 365 + 366 = 7*209 + (-2) ** 
XRL A, R6 ; A = (BIN \ 4) 
RR A ; A = (BIN \4 ) * 2 ** 
MOV C, F0 ; 大世纪调整 
SUBB A, R6 
;X 1 年: 
;0 年 0 = 0 + 0 + 1 + (-1) *** 
;1 年 366 = 7*52 + 1 + 1 
;2 年 366 + 365 = 7*104 + 2 + 1 
;3 年 366 + 365 + 365 = 7*156+3 + 1 
; {-1,1,2,3} 
CJNE R6, #1, $ + 3 ; C = IIF(R6>=1, 0, 1) 
MOV F0, C ; C=1 为大年/大世纪 
RET 

⌨️ 快捷键说明

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