📄 yss215.asm
字号:
ORG 0
SJMP STAR
ORG 0013H
LJMP XW
ORG 001BH
LJMP TLSTART
ORG 30H
STAR:; CLR RS0 ;主程序,初始化,等待中断
;CLR RS1
MOV SP,#30H
MOV TMOD,#10H
SETB PX1 ;外中断优先级高
CLR IT1 ;外中断申请信号;低电平
MOV IE,#8CH ;开中断
MOV TH1,#3CH ;设置定时器中断次数初值
MOV TL1,#0B0H
MOV 40H,#2
MOV 20H,#80H
MOV 70H,#40 ;秒
MOV 71H,#58 ;分
MOV 72H,#23 ;时
MOV 73H,#4 ;天
MOV 74H,#6 ;月
MOV 75H,#08 ;年
MOV 76H,#20 ;年
SETB P3.3
SETB P3.4
SETB TR1
E01: SJMP E01 ;等待溢出
;;;;;;;;;;;;;;;;;;
XW: PUSH ACC ;外中断
MOV A,20H ;移动标志位并修改内容
JB ACC.6,E60
RL A
MOV 20H,A
SJMP E20
E60:MOV 20H,#1
E20:JNB P3.4,E20 ;检测JIA下降沿;等待变成1
E30:JB P3.4,E30 ;等待变成0
JB P3.3,E37 ;JIA下降沿时,若P3.3为1,退出子程序
; MOV A,20H
JB 20H.6,E36
JB 20H.5,E35
JB 20H.4,E34
JB 20H.3,E33
JB 20H.2,E32
JB 20H.1,E31
INC 70H ;修改秒
MOV A,70H
CJNE A,#60,BTOD
MOV 70H,#0
SJMP BTOD
E31:INC 71H ;修改分
MOV A,71H
CJNE A,#60,BTOD
MOV 71H,#0
SJMP BTOD
E32: INC 72H ;修改时
MOV A,72H
CJNE A,#24,BTOD
MOV 72H,#0
SJMP BTOD
E33: SJMP YUE ; 跳转YUE,修改天
E34:INC 74H ;修改月
MOV A,74H
CJNE A,#13,BTOD
MOV 74H,#1
SJMP BTOD
E35:INC 75H ;修改低年
MOV A,75H
CJNE A,#100,BTOD
MOV 75H,#0
SJMP BTOD
E36:INC 76H ;修改高年
MOV A,76H
CJNE A,#100,BTOD
MOV 76H,#0
BTOD:ACALL BTOD5
ACALL DISP
SJMP E20
E37:POP ACC
RETI
;;;;;;;;;;;;;;;
AA:MOV 73H,#1 ;中间跳转
SJMP BTOD
;;;;;;;;;;;;;;;
YUE: MOV A,74H
CJNE A,#2,SS
MOV A,75H
CJNE A,#0,ss1;判断75H内是0,向下执行
MOV A,76H ;76H,即检验能否被400除
MOV B,#4
DIV AB
MOV A,B
JZ ss2
SJMP ss3
ss1:MOV A,75H ;75H不为0,验证75H能否被4整除
MOV B,#4
DIV AB
MOV A,B
JZ ss2
SJMP ss3
ss2:INC 73H ;闰年时二月
MOV A,73H
CJNE A,#30,BTOD
SJMP AA
ss3: INC 73H ;平年时二月
MOV A,73H
CJNE A,#29,BTOD
SJMP AA
SS: MOV A,74H ;除二月其它月
ACALL seg7
INC 73H
CJNE A,73H,BTOD
SJMP AA
;;;;;;;;;;;;;;;
BTOD5: MOV R0,#70H ;数据转换子程序
MOV R1,#50H
BTOD1: MOV A,@R0
MOV B,#10
DIV AB
MOV @R1,B
SWAP A
ORL A,@R1
MOV @R1,A
INC R1
INC R0
CJNE R0,#77H,BTOD1
RET
;;;;;;;;;;;;;;;;
DISP: MOV R1,#50H ;显示子程序
MOV A,@R1
MOV P1,A ;显示秒
CLR P3.2
SETB P3.2
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示分
CLR P3.1
SETB P3.1 ;产生锁存信号
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示时
CLR P3.0
SETB P3.0 ;产生锁存信号
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示天
CLR P2.2
SETB P2.2 ;产生锁存信号
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示月
CLR P2.1
SETB P2.1 ;产生锁存信号
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示年
CLR P2.0
SETB P2.0 ;产生锁存信号
NOP
INC R1
MOV A,@R1
MOV P1,A ;显示年
CLR P2.3
SETB P2.3 ;产生锁存信号
NOP
RET
;;;;;;;;;;;;
TLSTART: ;SETB RS1 ;定时中断
;CLR RS0
PUSH ACC
MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ 40H,E50
MOV 40H,#2
ACALL BTOD5
INC 70H ;够1秒
MOV A,70H
CJNE A,#60,BTOD2
MOV 70H,#0
INC 71H ;够1分
MOV A,71H
CJNE A,#60,BTOD2
MOV 71H,#0
INC 72H ;够1小时
MOV A,72H
CJNE A,#24,BTOD2
MOV 72H,#0
;;;;;;;;;;;
SJMP YUEE ;跳到YUEE 判断修改天
;;;;;;;;;;;;
BB:MOV 73H,#1 ;中间跳转
;SJMP CC
;;;;;;;;;;
CC:INC 74H ;够1月
MOV A,74H
CJNE A,#13,BTOD2
MOV 74H,#1
INC 75H ;够1年
MOV A,75H
CJNE A,#100,BTOD2
MOV 75H,#0
INC 76H ;够100年
MOV A,76H
CJNE A,#100,BTOD2
MOV 76H,#0
BTOD2:ACALL BTOD5
ACALL DISP
E50: CLR RS0
CLR RS1
POP ACC
RETI
;;;;;;;;;;;;;;
YUEE:MOV A,74H
CJNE A,#2,KK
MOV A,75H
CJNE A,#0,kk1; 75H为0向下执行
MOV A,76H ; 看76H,即检验能否被400整除
MOV B,#4
DIV AB
MOV A,B
JZ kk2
SJMP kk3
kk1:MOV A,75H ;75H不为0 ,只验证75H能不能被4整除
MOV B,#4
DIV AB
MOV A,B
JZ kk2
SJMP kk3
kk2:INC 73H ;闰年时二月
MOV A,73H
CJNE A,#30,BTOD2
SJMP BB
kk3: INC 73H ;平年时二月
MOV A,73H
CJNE A,#29,BTOD2
SJMP BB
KK: MOV A,74H ;除二月其它月
ACALL SEG7
INC 73H
CJNE A,73H,BTOD2
SJMP BB
;;;;;;;;;;;;;;;;;
SEG7:MOVC A,@A+PC
RET
TAB: DB 32,28,32,31,32,31,32,32,31,32,31,32
;;;;;;;;;;;;;;;;;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -