📄 clock1.asm
字号:
;-----------------
;复位入口
ORG 0000H
LJMP START
;-----------------
;定时器0定时到,中断入口
ORG 000BH
LJMP CT_00
;-----------------
; 主程序
ORG 0030H
START:MOV SP,#50H ;置堆栈50h单元开始
MOV IE,#10000010B ;定时计数器中断开
MOV IP,#00000010B ;定时计数器1优先于0
MOV TMOD,#00000001B ;计数器1:方式2,定时器0:方式1
MOV TL0,#0F0H
MOV TH0,#0D8H ;定时器0定时10ms
MOV 2FH,#00H ;计数器0,中断次数标识
MOV 30H,#12
mov 31h,#34
mov 32h,#56
LCALL HEX2D
SETB TR0 ;定时计数器0启动工作
L00: LCALL DIS
LJMP L00
;-----------------
HEX2D:MOV R7,#03H
MOV R1,#40H
MOV R0,#30H
LOO_A:MOV A,@R0
MOV B,#10
DIV AB
MOV @R1,A
MOV A,B
INC R1
MOV @R1,A
INC R0
INC R1
DJNZ R7,LOO_A
RET
;-----------------
;显示子程序
DIS: PUSH PSW
SETB PSW.4
MOV R0,#40H ;指向显示缓冲区6字节
MOV R7,#40H ;数码管的字位码
MOV R3,#06H ;循环6次控制
LED0: MOV A,@R0 ;确定字形代码
MOV DPTR,#TAB ;字型译码表首址
MOVC A,@A+DPTR
MOV R1,#0DCH ;指向字形口
MOVX @R1,A ;输出字形代码
; INC R1 ;指向字位口
PUSH 10H
MOV R0,#0DDH
MOV A,R7 ;从最高位开始
RR A ;显示右移一位
MOV R7,A
MOVX @R0,A ;输出字位代码
MOV R4,#05H ;确定延时常数
ACALL DEYS ;调延时子程序
POP 10H
INC R0 ;修改显缓指针
DJNZ R3,LED0 ;循环演示
POP PSW
RET
;-----------------
;延时子程序
DEYS: PUSH 14H
DEY1: PUSH 14H
DJNZ R4,$
POP 14H
DJNZ R4,DEY1
POP 14H
DJNZ R4,DEYS
RET
;-----------------
;定时器0中断服务程序
CT_00:PUSH PSW
CLR PSW.4
CLR TR0
MOV TL0,#0F0H
MOV TH0,#0D8H ;重装初值,定时10ms
SETB TR0 ;定时计数器0启动工作
INC 2FH
MOV R0,#2FH
MOV R1,#32H ;指向时间(秒分时)缓冲区32H、31H、30H
CJNE @R0,#100,INTO ;1S未到,转
MOV @R0,#00H ;1S到,标识清零
INC 32H ;秒加
CJNE @R1,#60,INTO ;1分未到,转
MOV 32H,#00H ;秒清零
INC 31H ;分加
DEC R1 ;
CJNE @R1,#60,INTO ;
MOV 31H,#00H ;
INC 30H ;
DEC R1 ;
CJNE @R1,#24,INTO ;
MOV 30H,#00H ;
INTO: LCALL HEX2D
POP PSW
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -