📄 153.dt
字号:
INCLUDE "EM78P153.INC"
INCLUDE "MACRO.DT"
ON_OFF_UP EQU 7
CHOOSE_UP EQU 6
MAYBE_POWER_DOWN EQU 5
MAYBE_CHOOSE_DOWN EQU 4
ON_OFF_DOWN EQU 3
CHOOSE_DOWN EQU 2
POWER EQU 6
CLOSE EQU 7
;MOV_DATA EQU P6^2
/***************位定义**********************************************************************************************/
/*扫描子程序标志位(位为1时有效)
7 6 5 4 3 2 1 0
键盘子程序 第1位数码管 第2位数码管 第3位数码管 第4位数码管 LED显示(温度) 继电器 温度超标时LED的闪烁位
*/
FLAG_CH EQU 11H
/*档位标志位
7 6 5 4 3 2 1 0
定时关机标志位 关/开 第5档 第4档 第3档 第2档 第1档 温度
*/
FLAG_PW EQU 12H
;KEY_UP标志位
FLAG_KEY EQU 13H
;按键被按下的计时数据16ms
DELAY_5MS0 EQU 14H
DELAY_5MS1 EQU 10H
IOC6_BACKUP EQU 15H
IOCD_BACKUP EQU 16H
;定时关机标志位
;第1位数码管数据存储器
LED8_DATA1 EQU 18H
;第2位数码管数据存储器
LED8_DATA2 EQU 19H
LED_CHANGE EQU 1AH
LED_CLEAR EQU 1BH
;第3位数码管数据存储器
LED8_DATA3 EQU 20H
;第4位数码管数据存储器与3相同
KEY_DOWN_DATA EQU 21H
LED_DATA EQU 22H
LED_CH_DATA EQU 23H
LED8_BACKUP EQU 24H
TIMER_S EQU 25H
TIMER_MIN EQU 26H
TIMER_2H EQU 27H
TIMER_4H EQU 28H
RL_CONT EQU 29H
WEN_KONG_FLAG EQU 2AH
KEY_CHANGE EQU 2BH
DELAY_ON EQU 2CH
DELAY_OFF EQU 2DH
DELAY_FRIST EQU 2EH
FLAG_1S EQU 2FH
KEY_164 EQU 1CH
/*****************<PROGRAM STAR>***********************************************************************************/
ORG 0X000
JMP INIT
ORG 008H
JMP TCC_INT
/************中断服务子程序****************************************************************************************/
TCC_INT:
CLR RF
MOV A,@0X82 ;重赋TCC初值(8ms)
MOV TCC,A
;1s计时时间判断
DJZ TIMER_S ;1SDELAY TIMER_S=125
JMP OUT_TCC
LMD TIMER_S,@250
BS FLAG_1S,1
;-----------------------------------------------
COUNT_MIN:
DJZ TIMER_MIN
JMP OUT_TCC
LMD TIMER_MIN,@60
;------------------------------------------------
;若工作在1--4档则2小时后关机,若工作在5档则4小时后关机
JBC FLAG_PW,5
JMP PW_T
DJZ TIMER_2H
JMP OUT_TCC
BS FLAG_PW,CLOSE
JMP OUT_TCC
PW_T:
DJZ TIMER_4H
JMP OUT_TCC
BS FLAG_PW,CLOSE
OUT_TCC:
RETI
/**************<INIT>**********************************************************************************************/
INIT:
MOV A,@00000000B
IOW IOCF
MOV A,@00000000B
IOW IOCE
MOV A,@00000000B
IOW IOC5
MOV A,@0XFF
MOV P5,A
BS P6,0
BC P6,7
MOV A,@01111000B
IOW IOC6
BS P6,0
MOV A,@0x00
CONTW
DISI
;-------------------------------------------------------------------------
mov A,@0x10
mov RSR,A
CLR_LOOP:
clr r0
inc RSR
jbc RSR,5
jbs RSR,4
jmp CLR_LOOP
;------------------------------------------------------------------------------
MOV A,@0X05 ;分频器给TCC,分频比为1:64
CONTW
MOV A,@01H ;使能TCC中断
IOW IOCF
CLR RF ;清除TCC溢出标志位
MOV A,@0X82 ;赋TCC初值(8ms)
MOV TCC,A
;程序开始时总是扫描键盘子程序
BS FLAG_CH ,7
LMD TIMER_S,@250
LMD TIMER_MIN,@60
LMD TIMER_2H,@120
LMD TIMER_4H,@240
LMD KEY_DOWN_DATA,@6
LMD LED_CH_DATA,@0x1f
LMD LED8_DATA1,@0X00
LMD LED8_DATA2,@0X00
LMD LED8_DATA3,@0X00
LMD LED_DATA,@0X00
LMD DELAY_OFF,@5
/***************MAIN**********************************************************************************************/
/*通过判断标志位FLAG_CH来确定该执行的子程序*/
MAIN:
JBC FLAG_PW,CLOSE
JMP INIT
JBC FLAG_CH,7
JMP JDQ_OUT
JBC FLAG_CH,6
JMP LED8_1
JBC FLAG_CH,5
JMP LED8_2
JBC FLAG_CH,4
JMP LED8_3
JBC FLAG_CH,3
JMP LED8_4
JBC FLAG_CH,2
JMP KEY_SCAN
JBC FLAG_CH,1
JMP LED_CTRL
JMP MAIN
/**************************************************************************/
/*******************************************************************************/
;检查继电器输出
JDQ_OUT:
; CALL CLR_IC164
JBS KEY_CHANGE,1
JMP JDQ_CTLR
JBS FLAG_PW,6 ;是否已经开机
JMP P_OFF
;1档不做延时5s输出外,其他各档延时5s后正常输出
JMP FRIST_POWER
P_OFF: ;还没有开机
BC P6,7
JMP OUT_POWER
FRIST_POWER:
BC P6,7
JBC FLAG_PW,1
JMP PW_11
JMP PW_5S
PW_11:
BS P6,7
LMD DELAY_ON,@25
LMD DELAY_OFF,@5
CLR KEY_CHANGE
JMP JDQ_CTLR
PW_5S: ;延时5s后输出
JBS FLAG_1S,1
JMP OUT_POWER
BC FLAG_1S,1
DJZ DELAY_OFF
JMP OUT_POWER
BS P6,7
CLR KEY_CHANGE
JBC FLAG_PW,2
JMP PW_21
JBC FLAG_PW,3
JMP PW_31
JBC FLAG_PW,4
JMP PW_41
JBC FLAG_PW,5
JMP PW_51
PW_21:
LMD DELAY_ON,@20
LMD DELAY_OFF,@5
JMP JDQ_CTLR
PW_31:
LMD DELAY_ON,@15
LMD DELAY_OFF,@15
JMP JDQ_CTLR
PW_41:
LMD DELAY_ON,@10
LMD DELAY_OFF,@15
JMP JDQ_CTLR
PW_51:
LMD DELAY_ON,@3
LMD DELAY_OFF,@15
JMP JDQ_CTLR
;1S到则检查继电器输出
JDQ_CTLR:
JBS FLAG_1S,1
JMP OUT_POWER
BC FLAG_1S,1
;温度检测
JBC WEN_KONG_FLAG,1
JMP WEN_CTRL
JBC FLAG_PW,1
JMP PW_1
JBC FLAG_PW,2
JMP PW_3
JBC FLAG_PW,3
JMP PW_5
JBC FLAG_PW,4
JMP PW_5
JBC FLAG_PW,5
JMP PW_5
;-------------------------------------
WEN_CTRL:
JBC FLAG_PW,1
JMP PW_3
JBC FLAG_PW,2
JMP PW_4
JBC FLAG_PW,3
JMP PW_5
JBC FLAG_PW,4
JMP PW_5
JMP PW_5
;----------------------------------------------
PW_1:
JBS P6,7
JMP OFF_1
DJZ DELAY_ON
JMP OUT_POWER
LMD DELAY_ON,@25
BC P6,7
JMP OUT_POWER
OFF_1:
DJZ DELAY_OFF
JMP OUT_POWER
LMD DELAY_OFF,@5
BS P6,7
JMP OUT_POWER
;-------------------------------------------
PW_2:
JBS P6,7
JMP OFF_2
DJZ DELAY_ON
JMP OUT_POWER
LMD DELAY_ON,@20
BC P6,7
JMP OUT_POWER
OFF_2:
DJZ DELAY_OFF
JMP OUT_POWER
LMD DELAY_OFF,@5
BS P6,7
JMP OUT_POWER
;-------------------------------------
PW_3:
JBS P6,7
JMP OFF_3
DJZ DELAY_ON
JMP OUT_POWER
LMD DELAY_ON,@15
BC P6,7
JMP OUT_POWER
OFF_3:
DJZ DELAY_OFF
JMP OUT_POWER
LMD DELAY_OFF,@15
BS P6,7
JMP OUT_POWER
;-----------------------------------
PW_4:
JBS P6,7
JMP OFF_4
DJZ DELAY_ON
JMP OUT_POWER
LMD DELAY_ON,@10
BC P6,7
JMP OUT_POWER
OFF_4:
DJZ DELAY_OFF
JMP OUT_POWER
LMD DELAY_OFF,@15
BS P6,7
JMP OUT_POWER
;---------------------------------
PW_5:
JBS P6,7
JMP OFF_5
DJZ DELAY_ON
JMP OUT_POWER
LMD DELAY_ON,@3
BC P6,7
JMP OUT_POWER
OFF_5:
DJZ DELAY_OFF
JMP OUT_POWER
LMD DELAY_OFF,@15
BS P6,7
JMP OUT_POWER
OUT_POWER:
CLR FLAG_CH
BS FLAG_CH,6
JMP MAIN
/***************************************************************************************/
KEY_SCAN:
;备份寄存器
IOR IOCD
MOV IOCD_BACKUP,A
IOR IOC6
MOV IOC6_BACKUP,A
;开关按键扫描
MOV A,@00100000B
IOW IOC6
MOV A,@11011111B
IOW IOCD
BC P6,2
;判断按键是否已经松开,没有松开则不进行键盘扫描,为1则没有松开
JBC FLAG_KEY,ON_OFF_UP
JMP KEY_UP_ON_OFF
JBC FLAG_KEY,CHOOSE_UP
JMP KEY_UP_CHOOSE
;判断开关键是否被按下
JBC P6,5
JMP NO_POWER_KEY
DJZ KEY_DOWN_DATA
JMP OUT_KEY
LMD KEY_DOWN_DATA,@6
;开关键被按下
BS FLAG_KEY,ON_OFF_UP ;按键松开标志
JBC FLAG_PW,POWER ;原来的工作状态
JMP CLAER_6
;还没有工作
CLR FLAG_PW
BS FLAG_PW,POWER
BS FLAG_PW,1
BS KEY_CHANGE,1
LMD DELAY_OFF,@5
ENI
JMP POWER_ON
;已经处在工作状态
CLAER_6:
;CLR FLAG_PW
BC FLAG_PW,POWER
BS KEY_CHANGE,1
LMD DELAY_OFF,@5
JMP POWER_OFF
;开关键没有被按下,判断是否已经开机,若没有开始则跳出键盘扫描,若已经开机则扫描选择按键是否被按下
NO_POWER_KEY:
JBS FLAG_PW,POWER
JMP O_K
JMP CHOOSE_KEY
O_K:
LMD KEY_DOWN_DATA,@6
JMP OUT_KEY
;-------------------------------------------------------------------------
;判断选择按键有没有被按下
CHOOSE_KEY:
;将QD脚置0
/* MOV A,IOCD_BACKUP
IOW IOCD
MOV A,@00000000B
IOW IOC6
MOV A,@0XFF
MOV P5,A
LMD KEY_164,@00010000b
MOV A,@8
MOV RL_CONT,A
LP_KEY:
JBS KEY_164,0
JMP CLR_KEY
JMP SET_KEY
CLR_KEY:
BC P6,2
JMP GO_KEY
SET_KEY:
BS P6,2
GO_KEY:
NOP
BC P6,1
NOP
nop
nop
nop
nop
BS P6,1
RRC KEY_164
DJZ RL_CONT
JMP LP_KEY*/
MOV A,@11111111B
IOW IOC6
MOV A,@00000000B
IOW IOCD
JBS P6,2
JMP _KEY
JMP __KEY
_KEY:
LMD KEY_DOWN_DATA,@6
JMP OUT_KEY
__KEY:
DJZ KEY_DOWN_DATA
JMP OUT_KEY
LMD KEY_DOWN_DATA,@6
BS FLAG_KEY,CHOOSE_UP
CH_PW:
JBS FLAG_PW,1
JMP NEXT_P2
CLR FLAG_PW
BS FLAG_PW,POWER
BS FLAG_PW,2
BS KEY_CHANGE,1
LMD DELAY_OFF,@5
JMP POWER_2
NEXT_P2:
JBS FLAG_PW,2
JMP NEXT_P3
CLR FLAG_PW
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -