📄 8.asm
字号:
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到定时器0中断处理程序处
ORG 30H
START:
MOV TMOD,#00000001B ;定时0工作于方式1(16位)
MOV TH0,#0B1H
MOV TL0,#0E0H ;设定定时时间20ms
SETB TR0 ;定时器0开关打开
SETB ET0 ;打开开定时/计数器0允许
SETB EA ;打开总中断允许
MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
MOV 30H,#0 ;30H-33H为显示内容,初始为0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV R3,#50 ;计溢出次数50×20ms=1S
DISAGAIN:
MOV R4,#4
MOV R1,#30H
MOV R2,#10000000B
LOOP:
MOV A,@R1 ;
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P2,R2 ;选择数码管
MOV P0,A ;送到P0口数码管显示
LCALL DELAY ;显示延时
MOV A,R2 ;R2的值移位
RR A
MOV R2,A
INC R1
DJNZ R4,LOOP ;扫描完4个否?
LJMP DISAGAIN ;重新开始扫描
DELAY:
MOV R6,#4
D1: MOV R7,#100
D2: DJNZ R7,D2
DJNZ R6,D1
RET
TIME0: PUSH PSW
MOV TH0,#0B1H
MOV TL0,#0E0H ;重置定时时间20ms
DJNZ R3,TRUESC;不到1S退出中断程序
MOV R3,#50 ;重新赋溢出计数值
INC 30H ;P2口左移
MOV A,30H
CJNE A,#10,TRUESC
MOV 30H,#0
INC 31H
MOV A,31H
CJNE A,#6,TRUESC
MOV 31H,#0
INC 32H
MOV A,32H
CJNE A,#10,TRUESC
MOV 32H,#0
INC 33H
MOV A,33H
CJNE A,#6,TRUESC
MOV 33H,#0
TRUESC: POP PSW
RETI
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
DB 99H,92H,82H,0F8H,80H,90H ;4,5,6,7,8,9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -