📄 定时器3.asm
字号:
Timecount EQU 40H;记时一秒循环20次的记数标志
FLAG EQU 41H;高低位片选的标志
SETFLAG EQU 42H;设置键的标志
PreCious EQU 43H;按键的缓冲内容
KEYFLAG EQU 44H;按键去抖的参考变量
BUF1 EQU 45H;高位显示数字的偏移量
BUF0 EQU 46H;低位显示数字的偏移量
ORG 0000H
AJMP START;主程序
ORG 000BH
AJMP TIMEINTTF0;定时器0的中断服务子程序
ORG 001BH
LJMP TIMEINTTF1;定时器1的中断服务子程序
ORG 0050H
START:MOV BUF1,#09H
MOV BUF0,#09H
MOV FLAG,#00H
MOV TIMECOUNT,#00H
MOV SETFLAG,#00H
MOV KEYFLAG,#0DH
MOV PreCious,#0FFH
;变量初始化
MOV TMOD,#11H ;选择定时器,工作模式
MOV SP,#60H
MOV IE,#00H
MOV TL1,#0B0H
MOV TH1,#3CH
MOV TL0,#0EFH
MOV TH0,#0CFH ;定时器初值
SETB EA
SETB ET1
SETB ET0
SETB TR0
SETB TR1 ;开中断
SETB P2.6
LOOP:MOV DPTR,#BCD ;主循环
LCALL BCDDISPLAY ;数码管显示
MOV R7,PreCious
LCALL KEYCHECK ;键盘查询
SJMP LOOP
BCDDISPLAY: ;数码管动态显示子程序
PUSH PSW
MOV PSW,#18H
MOV A,BUF0
MOVC A,@A+DPTR
MOV R0,A
MOV A,BUF1
MOVC A,@A+DPTR
MOV R1,A
MOV A,FLAG
JZ C00
MOV A,R0
MOV P0,A
SETB P2.5
CLR P2.4
SJMP C01 ;显示高位
C00:MOV A,R1
MOV P0,A
SETB P2.4
CLR P2.5 ;显示低位
C01:POP PSW
RET
KEYCHECK: ;键盘查询子程序
CJNE R7,#0EH,C011 ;K1是否按下(暂停键)
CPL TR1
MOV R7,#00H
RET
C011:MOV R7,PreCious
CJNE R7,#0DH,C014 ;K2是否按下(设置键)
INC SETFLAG
MOV PRECIOUS,#0FH
MOV R1,#SETFLAG
MOV A,@R1
JZ C015
CJNE @R1,#03H,C012 ;K2按3次,SETFLAG返回初值
MOV SETFLAG,#00H
SJMP C015
C012:CJNE @R1,#01H,C013 ;高位显示内容
MOV R1,#BUF1
SJMP C014
C013:CJNE @R1,#02H,C014 ;低位显示内容
MOV R1,#BUF0
C014:MOV A,SETFLAG
JZ C015
LCALL TIMESET ;时间设置
LCALL BcdDisplay ;数码管显示
SJMP C011
C015:RET
TIMESET: ;时间设置子程序
CJNE R7,#0BH,C031 ;K3是否按下(上)
INC @R1 ;显示内容加1
MOV PRECIOUS,#0FH
MOV A,@R1
CJNE A,#0AH,C032 ;加到9返回0
MOV @R1,#00H
SJMP C032
C031:CJNE R7,#07H,C032 ;K4是否按下(下)
DEC @R1 ;显示内容减1
MOV PRECIOUS,#0FH
MOV A,@R1
CJNE A,#0FFH,C032 ;减到0返回9
MOV @R1,#09H
C032:SETB P2.6
SETB TR1
RET
TIMEINTTF1:PUSH PSW
PUSH ACC
MOV TL1,#0B0H
MOV TH1,#3CH ;重装初值
INC TIMECOUNT
MOV A,TIMECOUNT
CJNE A,#14H,C045 ;计时20次,到达1秒钟
MOV TIMECOUNT,#00H ;置0,进行下次计时1秒
MOV A,SETFLAG
CJNE A,#00H,C045 ;判断是否在计时状态
MOV A,BUF0
JZ C043 ;低位减到0,转
DEC BUF0 ;时间显示减1秒
SJMP C045
C043:MOV A,BUF1
JZ C044 ;高位也减到0,转
DEC BUF1 ;高位减1
MOV BUF0,#09H ;低位变9
SJMP C045
C044:MOV BUF0,#00H
MOV BUF1,#00H
CLR P2.6 ;计时时间到,LED灯亮
CLR TR1 ;计时停止
C045:POP ACC
POP PSW
RETI
TIMEINTTF0:PUSH PSW
PUSH ACC
MOV PSW,#10H
MOV TL0,#0efH
MOV TH0,#0cfH ;重装初值
C050:MOV A,FLAG
CPL A
MOV FLAG,A
MOV A,P2
ANL A,#0FH
MOV R7,A
DEC KEYFLAG
MOV A,KEYFLAG
JNZ C052
MOV KEYFLAG,#0DH ;延时判断2次
MOV A,P2
ANL A,#0FH
XRL A,R7
JNZ C052
MOV PreCious,R7 ;按键去抖动
C052:POP ACC
POP PSW
RETI
BCD: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数码管显示代码
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -