📄 stemper.a51
字号:
ORG 0000H
AJMP MAIN
ORG 000BH
AjMP T0INT
ORG 001BH
AJMP T1INT
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#11H
MOV TH0,#3CH ;设置T0定时器100MS中断
MOV TL0,#0B0H ;
MOV TH1,#3CH ;设置T1定时器100MS中断
MOV TL1,#0B0H ;
SETB P3.4 ;关闭打码指示
CLR P3.3 ;开启加温指示
SETB P3.2 ;关闭打码输出
CLR P3.5 ;开启停止指示
MOV R2,#0 ;清T0软计数器
MOV R3,#0 ;清T1软计数器
SETB EA ;开总中断
SETB ET0 ;允许T0中断
SETB ET1 ;允许T1中断
SETB TR0 ;开启T0定时器
START: JNB P3.1,QIDONG ;判断开始信号是否有效
AJMP START
QIDONG: ACALL D10MS ;延时10毫秒去除干扰
JNB P3.1,START0 ;再次判断信号是否有效
AJMP START ;否则返回
START0: JNB P3.1,$ ;若开始信号持续则等待
SETB P3.5 ;否则关闭停止指示
CLR P3.4 ;开启打码指示
CLR P3.2 ;开启打码输出
ACALL D100MS ;延时100毫秒,防止在停止范围不启动
START1: JB P3.0,START2 ;判断停止A信号是否有效
JNB P3.0,START3 ;判断停止B信号是否有效
START2: JB P3.0,START2 ;
ACALL D10MS ;延时去抖
JB P3.0,START0 ;再次判断
SETB P3.2 ;关闭打码输出
SETB P3.4 ;关闭打码指示
CLR P3.5 ;开启停止指示
AJMP START
START3: JNB P3.0,START3 ;
ACALL D10MS ;延时去抖
JNB P3.0,START0 ;再次判断
SETB P3.2 ;关闭打码输出
SETB P3.4 ;关闭打码指示
CLR P3.5 ;开启停止指示
AJMP START
T0INT: CLR TR0 ;关闭T0定时器
INC R2 ;将计数器加一
MOV A,R2 ;送累加器
CJNE A,#5,NEXT ;判断是否等于5
MOV R2,#0 ;
SETB P3.3 ;取反加热管输出
MOV TH1,#3CH ;设置T1定时器100MS中断
MOV TL1,#0B0H ;
SETB TR1 ;开启T1定时器
RETI
NEXT: MOV TH0,#3CH ;设置T0定时器100MS中断
MOV TL0,#0B0H ;
SETB TR0 ;开启T0定时器
RETI
T1INT: CLR TR1 ;关闭T0定时器
INC R3 ;将计数器加一
MOV A,R3 ;送累加器
CJNE A,#6,NEXT1 ;判断是否等于5
MOV R3,#0 ;等于则清零计数器
CLR P3.3 ;取反加热管输出
MOV TH0,#3CH ;设置T0定时器100MS中断
MOV TL0,#0B0H ;
SETB TR0 ;开启T0定时器
RETI
NEXT1: MOV TH1,#3CH ;设置T1定时器100MS中断
MOV TL1,#0B0H ;
SETB TR1 ;开启T1定时器
RETI
D10MS: MOV R6,#10 ;
DEL0: MOV R5,#250 ;
DEL1: DJNZ R5,DEL1 ;
DJNZ R6,DEL0 ;
RET
D100MS: MOV R4,#10 ;
DEL2: ACALL D10MS ;
DJNZ R4,DEL2 ;
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -