📄 times.asm
字号:
ORG 0000H
LJMP START
ORG 001BH ;定时计数器1中断入口地址
LJMP CLOCK
ORG 0030H
START:
MOV SP , #50H ;设置堆栈
MOV TL1 , #018H ;FOSC=6MHZ,则一个机器周期为2us
MOV TH1 , #0FCH ;3CB7H=155430 65536-15543=4993,下一个机器周期响应中断
MOV 20H , #13H ;一时存储单元,可设置起始时间,应小于24时
MOV 21H , #16H ;一分存储单元,可设置起始时间,应小于59分
MOV 22H , #22H ;一秒存储单元,可设置起始时间,应小于59秒
MOV 23H , #00H ;一位0.1秒存储单元
MOV 30H , #01H ;一时十位显存
MOV 31H , #02H ;一时个位显存
MOV 32H , #03H ;一分十位显存
MOV 33H , #04H ;一分个位显存
MOV 34H , #05H ;一秒十位显存
MOV 35H , #06H ;-秒个位显存
MOV IE , #10001000B ;开定时计数器1中断
MOV IP ,#00001000B ;中断优先级设计,可有可无
MOV TMOD ,#00010000B ; 定时计数器1工作在方式1
SETB TR1 ;启动T1
LOOP:
LCALL HEX2D
LCALL DIS ;显示
SJMP LOOP
HEX2D:
PUSH PSW
CLR RS0
CLR RS1
MOV R7 , #03H
MOV R1 , #30H
MOV R0 , #20H ;复位后默认工作寄存器组0
LOO_A:
MOV A , @R0
MOV B , #0AH
DIV AB
MOV @R1 , A
INC R1
MOV @R1 , B
INC R0
INC R1
DJNZ R7 , LOO_A
POP PSW
RET
DIS:
CLR C
PUSH PSW ;保护工作寄存器
PUSH ACC
SETB RS0 ; 换为工作寄存器组1
CLR RS1
MOV R0 , #30H ; 显示首地址
MOV R2 , #20H ; 位显控制信号
MOV DPTR , #TAB ; 把表首地址送DPTR
LS2: MOV A,R2
CPL A
MOV P1,A
MOV A , @R0 ; (R0)=(30H)
MOVC A , @A+DPTR ; 查表值送A
CPL A
;MOV P1, R2 ; R2=20H从高位开始
MOV P0,A
DELAY: MOV R4,#05H ;
LOO_P: MOV R5,#18H
LOOP1: NOP
NOP
DJNZ R5, LOOP1 ;第一次为56H-00H,以后为FFH-00H
DJNZ R4,LOO_P
MOV A,R2
RRC A ;带进位位右移一位
MOV R2 , A ;A值送R2,为下一位显示地址
INC R0 ;R0加1,30H+1=31H
JNZ LS2 ;累加器A内容不为0转移,显示下一位,循环
POP ACC
POP PSW ;恢复工作寄存器组0
RET
CLOCK: CLR TR1 ;单机器周期指令,2us
MOV TL1,#018H ;单机器周期指令,2us
MOV TH1,#0FCH ;恢复初值,单机器周期指令,2us
SETB TR1 ;单机器周期指令,2us
PUSH PSW
PUSH ACC
INC 23H ;0.1秒加1
MOV A,23H
CJNE A,#0AH,DONE ;1秒到了没?
MOV 23H,#00H ;清0.1秒
INC 22H ;秒存储单元
MOV A,22H
CJNE A,#3CH,DONE ;60秒到?
MOV 22H,#00H ;秒单元清零
INC 21H ;21H-分存储单元
MOV A,21H
CJNE A,#3CH,DONE ;60分到?
MOV 21H,#00H ;分单元清零
INC 20H ;20H-时存储单元
MOV A ,20H
CJNE A,#18H,DONE ;24小时到没?
MOV 20H,#00H ;时单元清零
DONE: POP ACC
POP PSW
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;共阳极 0~1~2~3~4~5
DB 82H,0F8H,80H,90H,88H,83H,0C6H ;6~7~8~9~A~B~C
DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH ;D~E~F~灭~P.~H~.~
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -