📄 dsh.dt
字号:
/*************************************************************/
/* 用EM78P153S编写一个定时程序 */
/*功能:初始显示:00;第一次按下K显示:05 ,步进为5直到20; */
/*再按一下,显示00;再按同上循环显示。 */
/*注:以上动作只能在3S内有效,3S后进入定时,并每一分钟减1 显示*/
/***************位定义*******************/
Z EQU 2
C EQU 0
TCIE EQU 0
OUT EQU 0 ;P50 输出
KEY EQU 1 ;P51 输入
V0 EQU 2 ;P52 输出
V1 EQU 3 ;P53 输出
T3 EQU 1 ;FLAG.1,3S定时标志位
T5 EQU 2 ;FLAG.2,5M定时标志位
T10 EQU 3 ;FLAG.3,10M定时标志位
T15 EQU 4 ;FLAG.4,15M定时标志位
T20 EQU 5 ;FLAG.5,20M定时标志位
T01 EQU 6 ;FLAG.6,1M定时标志位
H0 EQU 7 ;FLAG.7,回零标志位
/*************寄存器定义*****************/
TCC EQU 01H
PC EQU 02H
STATUS EQU 03H
DDR5 EQU 05H
DDR6 EQU 06H
P5 EQU 05H
P6 EQU 06H
IOCE EQU 0EH
RF EQU 0FH
IOCF EQU 0FH
;-------------------------------------------
XH EQU 10H ;显示缓冲器
FLAG0 EQU 11H ;标志位寄存器
T1MH EQU 12H ;1M定时存器
T1ML EQU 13H
T3SL EQU 14H ;3S定时寄存器
T3SH EQU 15H
TT5M EQU 16H ;5M定时寄存器
TT10M EQU 17H ;10M定时寄存器
TT15M EQU 18H ;15M定时寄存器
TT20M EQU 19H ;20M定时 寄存器
FLAG EQU 1AH
DEL1 EQU 1BH
DEL2 EQU 1CH
/**************************************/
ORG 000H
MOV A,@00H
IOW IOCE ;清看门狗
JMP MAIN
ORG 008H
JMP TCC_INT
/************中断服务子程序**************/
TCC_INT:
NOP
CLR RF
MOV A,@0X82 ;重赋TCC初值(8ms)
MOV TCC,A
JBC FLAG0,0 ;左右显示控制标志位
JMP XXR ;显右
CALL XL ;显左
JMP SM
XXR: CALL XR
SM: JBC FLAG,T3
CALL DEL3S ;3S定时
JBC FLAG,T5
CALL T5M ;5M定时
JBC FLAG,T10
CALL T10M ;10M定时
JBC FLAG,T15
CALL T15M ;15M定时
JBC FLAG,T20
CALL T20M ;20M定时
IOUT: RETI
/***************数码表0--9***************/
TAB:
ADD PC,A
RETL @0X88 ;0
RETL @0XF9 ;1
RETL @0X4C ;2
RETL @0X68 ;3
RETL @0X39 ;4
RETL @0X2A ;5
RETL @0X0A ;6
RETL @0XF8 ;7
RETL @0X08 ;8
RETL @0X28 ;9
RETL @0X88 ;10
RETL @0X88 ;11
RETL @0X88 ;12
RETL @0X88 ;13
RETL @0X88 ;14
RETL @0X88 ;15
/***************数显0-20****************/
TAB1:
ADD PC,A
RETL @00H ;0
RETL @01H ;1
RETL @02H ;2
RETL @03H ;3
RETL @04H ;4
RETL @05H ;5
RETL @06H ;6
RETL @07H ;7
RETL @08H ;8
RETL @09H ;9
RETL @10H ;10
RETL @11H ;11
RETL @12H ;12
RETL @13H ;13
RETL @14H ;14
RETL @15H ;15
RETL @16H ;16
RETL @17H ;17
RETL @18H ;18
RETL @19H ;19
RETL @20H ;20
;--------------------------------------10MS
D10MS: MOV A,@26
MOV DEL1,A
LP0: MOV A,@0FAH
MOV DEL2,A
LP1: DJZ DEL2
JMP LP1
DJZ DEL1
JMP LP0
RET
;----------------------------------------左显
XL: BS P5,V0
BC P5,V1
SWAPA XH
AND A,@0FH
CALL TAB
MOV P6,A
INC FLAG0 ;下一次显右
RET
;------------------------------------------右显
XR: BS P5,V1
BC P5,V0
MOV A,@0FH
AND A,XH
CALL TAB
MOV P6,A
INC FLAG0 ;下一次显左
RET
/*********************主程序*************************/
MAIN:
MOV A,@00000010B ;P50,P52,P53输出;P51输入
IOW DDR5
BS P5,V0
BS P5,V1
BC P5,OUT ;风扇禁止工作
MOV A,@00001000B ;P60-P62.P64-P67输出,P63输入
IOW DDR6
MOV A,@00H
MOV XH,A
CLR FLAG
CLR FLAG0
CLR DEL1
CLR DEL2
CLR T3SH
CLR T3SL
MOV A,@0X69 ;1分钟定时赋初值
MOV T1ML,A
MOV A,@0X18
MOV T1MH,A
MOV A,@5
MOV TT5M,A
MOV A,@10
MOV TT10M,A
MOV A,@15
MOV TT15M,A
MOV A,@20
MOV TT20M,A
MOV A,@0X05 ;分频器给TCC,分频比为1:64
CONTW
MOV A,@01H ;使能TCC中断
IOW IOCF
CLR RF ;清除TCC溢出标志位
MOV A,@0X82 ;赋TCC初值(8ms)
MOV TCC,A
ENI
;----------------------------------------------------------------
KEYSCAN:
JBC P5,1
JMP KEYSCAN
CALL D10MS
JBC P5,1
JMP KEYSCAN
JBS P5,1
JMP $-1
MOV A,@50H
MOV T3SL,A
MOV A,@01H
MOV T3SH,A
BS FLAG,T3 ;启动3S定时
JBC FLAG,H0 ;3S结束?
JMP HL ;3S后有键回零
BJ00: MOV A,@00H
XOR A,XH
JBS STATUS,Z
JMP BJ05
BS P5,OUT ;有健风扇工作
MOV A,@05H
MOV XH,A
BS FLAG,T5
BC FLAG,T10
BC FLAG,T15
BC FLAG,T20
JMP KEYSCAN
BJ05: MOV A,@05H
XOR A,XH
JBS STATUS,Z
JMP BJ10
BS P5,OUT ;有健风扇工作
MOV A,@10H
MOV XH,A
BC FLAG,T5
BS FLAG,T10
BC FLAG,T15
BC FLAG,T20
JMP KEYSCAN
BJ10: MOV A,@10H
XOR A,XH
JBS STATUS,Z
JMP BJ15
BS P5,OUT ;有健风扇工作
MOV A,@15H
MOV XH,A
BC FLAG,T5
BC FLAG,T10
BS FLAG,T15
BC FLAG,T20
JMP KEYSCAN
BJ15: MOV A,@15H
XOR A,XH
JBS STATUS,Z
JMP BJ20
BS P5,OUT ;有健风扇工作
MOV A,@20H
MOV XH,A
BC FLAG,T5
BC FLAG,T10
BC FLAG,T15
BS FLAG,T20
JMP KEYSCAN
BJ20: MOV A,@20H
XOR A,XH
JBS STATUS,Z
JMP HL
BS P5,OUT ;有健风扇工作
MOV A,@20H
MOV XH,A
BC FLAG,T5
BC FLAG,T10
BC FLAG,T15
BS FLAG,T20
JMP KEYSCAN
HL: CLR XH
BC FLAG,H0
BC FLAG,T5
BC FLAG,T10
BC FLAG,T15
BC FLAG,T20
BC P5,OUT
MOV A,@0X69
MOV T1ML,A
MOV A,@0X18
MOV T1MH,A
MOV A,@5
MOV TT5M,A
MOV A,@10
MOV TT10M,A
MOV A,@15
MOV TT15M,A
MOV A,@20
MOV TT20M,A
JMP KEYSCAN
;-------------------------------------3S
DEL3S: DJZ T3SL
JMP EXIT0
MOV A,@00H
XOR A,T3SH
JBC STATUS,Z
JMP DEL0
MOV A,@0FFH
MOV T3SL,A
DEC T3SH
JMP EXIT0
DEL0: BS FLAG,H0
BC FLAG,T3
EXIT0: RET
;------------------------------------1分钟
T1M: DJZ T1ML
JMP EXIT1
MOV A,@00H
XOR A,T1MH
JBC STATUS,Z
JMP T1M0
MOV A,@0FFH
MOV T1ML,A
DEC T1MH
JMP EXIT1
T1M0: BS FLAG,T01
MOV A,@0X69
MOV T1ML,A
MOV A,@0X18
MOV T1MH,A
EXIT1: RET
;------------------------------------5分钟
T5M: CALL T1M
JBS FLAG,T01
JMP T5M0
BC FLAG,T01
DJZ TT5M
JMP T5M0
BC FLAG,H0
BC FLAG,T5
BC P5,OUT
MOV A,@5
MOV TT5M,A
JMP T5M1
T5M0: MOV A,TT5M
MOV XH,A
JMP EXIT2
T5M1: CLR XH
EXIT2: RET
;-----------------------------------10分钟
T10M: CALL T1M
JBS FLAG,T01
JMP T10M0
BC FLAG,T01
DJZ TT10M
JMP T10M0
BC FLAG,H0
BC FLAG,T10
BC P5,OUT
MOV A,@10
MOV TT10M,A
JMP T10M1
T10M0: MOV A,TT10M
CALL TAB1
MOV XH,A
JMP EXIT3
T10M1: CLR XH
EXIT3: RET
;----------------------------------15分钟
T15M: CALL T1M
JBS FLAG,T01
JMP T15M0
BC FLAG,T01
DJZ TT15M
JMP T15M0
BC FLAG,H0
BC FLAG,T15
BC P5,OUT
MOV A,@15
MOV TT15M,A
JMP T15M1
T15M0: MOV A,TT15M
CALL TAB1
MOV XH,A
JMP EXIT4
T15M1: CLR XH
EXIT4: RET
;----------------------------------20分钟
T20M: CALL T1M
JBS FLAG,T01
JMP T20M0
BC FLAG,T01
DJZ TT20M
JMP T20M0
BC FLAG,H0
BC FLAG,T20
BC P5,OUT
MOV A,@20
MOV TT20M,A
JMP T20M1
T20M0: MOV A,TT20M
CALL TAB1
MOV XH,A
JMP EXIT5
T20M1: CLR XH
EXIT5: RET
;--------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -