📄 计时器78.asm
字号:
ORG 0000H
SETB EX1;外部中断允许
CLR IT0 ;外部中断低电平有效
SETB PX1;优先级为高
MOV P0,#0C0H
LCALL 2000H
ORG 0013H
SETB P2.5
START: MOV A,P1 ;读取p0口的数据
JB ACC.0,JS ;计时
JB ACC.1,TZ ;停止
JB ACC.2,QL ;清零
SJMP START
;=================================================
;===================清零子程序====================
;=================================================
QL: MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
MOV R4,#0
MOV P0,#0C0H
MOV P2,#0FFH
SJMP START
;=================================================
;===================停止子程序====================
;=================================================
TZ: MOV DPTR,#NUMTAB;百分之一秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.4
CLR P2.0
MOV P0,A
CALL DELAY2
;-----------------
MOV DPTR,#NUMTAB;十分之一秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.3
CLR P2.4
MOV P0,A
CALL DELAY2
;-----------------
MOV DPTR,#NUMTAB;秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.2
CLR P2.3
MOV P0,A
CALL DELAY2
;-----------------
MOV DPTR,#NUMTAB;十秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.1
CLR P2.2
MOV P0,A
CALL DELAY2
;--------------------
MOV DPTR,#NUMTAB;分显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.0
CLR P2.1
MOV P0,A
CALL DELAY2
SJMP TZ
DELAY2: MOV R6,#500
DL1:MOV R7,#2
DJNZ R7,$
DJNZ R6,DL1
RET
;==============================================
;================开始子程序====================
;==============================================
JS: MOV R0,#00H ;百分之一秒
MOV R1,#00H ;十分之一秒
MOV R2,#00H ;秒
MOV R3,#00H ;十秒
MOV R4,#00H ;分
;----------------------------
L1:MOV DPTR,#NUMTAB;百分之一秒显示 2个周期即2us
MOV A,R0 ; 1us
MOVC A,@A+DPTR ; 2us
SETB P2.4
CLR P2.0 ; 1us
MOV P0,A ; 1us
CALL DELAY ; 共 7us
;-----------------
MOV DPTR,#NUMTAB;十分之一秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.3
CLR P2.4
MOV P0,A
CALL DELAY
;-----------------
MOV DPTR,#NUMTAB;秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.2
CLR P2.3
MOV P0,A
CALL DELAY
;-----------------
MOV DPTR,#NUMTAB;十秒显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.1
CLR P2.2
MOV P0,A
CALL DELAY
;--------------------
MOV DPTR,#NUMTAB;分显示
MOV A,R0
MOVC A,@A+DPTR
SETB P2.0
CLR P2.1
MOV P0,A
CALL DELAY
SJMP L1
;------------------------------------
DELAY: MOV R6,#20 ; 1us
DL2: MOV R7,#0F8H ;
DJNZ R7,$
DJNZ R6,DL2 ; 2us*495=990us
INC R0 ; 1us
CJNE R0,#10,L2; 2us 共4+7+990=1001us约为1ms
INC R1
MOV R0,#0
CJNE R1,#10,L2
INC R2
MOV R1,#0
CJNE R2,#10,L2
INC R3
MOV R2,#0
CJNE R3,#10,L2
INC R4
SETB P2.5
MOV R3,#0
CJNE R4,#10,L2
MOV R4,#0
L2:CJNE R3,#5,L9
CJNE R2,#9,L9
CLR P2.5
L9:RET
;段数码管各划的数字排列表
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;显示内容的对应代码
;0 1 2 3 4 5 6 7 8 9 ;显示内容
;--------------------------------------
ORG 2000H
L3: MOV P2,#00H
SETB P2.0
CLR P2.4
MOV P0,A
CALL DELAY1
SETB P2.1
CLR P2.0
MOV P0,A
CALL DELAY1
SETB P2.2
CLR P2.1
MOV P0,A
CALL DELAY1
SETB P2.3
CLR P2.2
MOV P0,A
CALL DELAY1
SETB P2.4
CLR P2.3
MOV P0,A
CALL DELAY1
SJMP L3
DELAY1: MOV R6,#10
DL3:MOV R7,#100
DJNZ R7,$
DJNZ R6,DL3
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -