单片机万年历程序
MS50_BUF EQU 30H S1_BUF EQU 31H SEC_BUF EQU 32H MIN_BUF EQU 33H HOUR_BUF EQU 34H DAY_BUF EQU 35H MON_BUF EQU 36H YEA_BUF EQU 37H ;分配存储空间
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TO_ISR
ORG 0030H
MAIN: MOV SP,#70H
LCALL INIT M1: JNB S1_LAB,M1 ;S1_LAB=1,原地执行
CLR S1_LAB
LCALL T_SEC
JNB F0,M1
CLR F0
LCALL T_MIN
JNB F0,M1
CLR F0
LCALL T_HOUR
JNB F0,M1
CLR F0
LCALL T_DAY
JNB F0,M1
CLR F0
LCALL T_MON
JNB F0,M1
CLR F0
LCALL T_YEAR
LJMP M1
INIT: MOV TMOD,#02H;计数器T0不受外部控制,定时方式,工作方式2。
MOV TH0,#06H;定时器的初值为6
SETB TR0;开始计数
SETB ET0;溢出中断允许
SETB EA;开中断
MOV MS50_BUF,#0;初始化清零
MOV S1_BUF,#0;初始化清零
CLR S1_LAB;初始化清零
RET
TO_ISR: PUSH PSW
PUSH ACC
INC MS50_BUF
MOV A,MS50_BUF
CLR C
SUBB A,#200;晶振是12MHZ,12分频后位1us,(256-6)*200=50ms
JC TS1
MOV MS50_BUF,#0
INC S1_BUF
MOV A,S1_BUF
CLR C
SUBB A,#20;50*20=1s
JC TS1
MOV S1_BUF,#0
SETB S1_LAB
TS1: POP ACC
POP PSW
RETI
END ;产生秒
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
T_SEC: MOV A,SEC_BUF
ADD A,#1
DA A ;十进制调整
CJNE A,#60H,T_SEC1;A不等于60,则转T_SEC1
T_SEC2: MOV SEC_BUF,#0;等于60,则SEC_BUF置0
SETB F0;F0置1
RET
T_SEC1: JNC T_SEC2;借位为0即A>60则转T_SEC2
CLR F0
MOV SEC_BUF,A
RET ;秒进分 T_MIN: MOV A,MIN_BUF
ADD A,#1
DA A
CJNE A,#60H,T_MIN1 T_MIN2: MOV MIN_BUF,#0
SETB F0
RET
T_MIN1: JNC T_MIN2
CLR F0
MOV MIN_BUF,A
RET ;分进时
T_HOUR: MOV A,HOUR_BUF
ADD A,#1
DA A
CJNE A,#24H,T_HOUR1 T_HOUR2:MOV HOUR_BUF,#0
SETB F0
RET
T_HOUR1:JNC T_HOUR2
CLR F0
MOV HOUR_BUF,A
RET ;小时进天 T_DAY: MOV A,YEA_BUF
LCALL BCD_TO_B ;BCD码转化为二进制
MOV B,#4
DIV AB
MOV A,B
JZ T_DAY2 ;闰年则转T_DAY2
MOV A,MON_BUF
T_DAY12:LCALL BCD_TO_B
DEC A ;月份参数减1
MOV DPTR,#MON_TAB
MOVC A,@A+DPTR
ADD A,#1;查出之后再加1
MOV B,A;本月那天转化为下个月的界限
MOV A,DAY_BUF
ADD A,#1;当前日参数加1
DA A
CJNE A,B,T_DAY11 T_DAY1: MOV DAY_BUF,#1
SETB F0
RET
T_DAY11:JNC T_DAY1
MOV DAY_BUF,A
CLR F0
RET
T_DAY2: MOV A,MON_BUF
CJNE A,#02H,T_DAY12;判断是否为2月,不是2月则转到T_DAY12
MOV B,#30H
T_DAY21:MOV A,DAY_BUF
ADD A,#1
DA A
CJNE A,B,T_DAY22 T_DAY23:MOV DAY_BUF,#1
SETB F0
RET
T_DAY22:JNC T_DAY23
MOV DAY_BUF,A
CLR F0
RET MON_TAB DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H;天进月
T_MON MOV A,MON_BUF
ADD A,#1
DA A
CJNE A,#12H,T_MON1 T_MON2: MOV MON_BUF,#0
SETB F0
RET
T_MON1: JNC T_MON2
CLR F0
MOV MON_BUF,A
RET ;月进年
T_YEAR: MOV A,YEA_BUF
ADD A,#1
DA A
RET ;年加1
BCD_TO_B:MOV R0,A
SWAP A
ANL A,#0FH
MOV B,#10
MUL A,B
MOV B,A
MOV A,R0
ANL A,#0FH
ADD A,B
RET