📄 153.dt
字号:
INCLUDE "EM78P153.INC"
;INCLUDE "MACRO.DT"
KEY1 EQU 1
KEY2 EQU 2
KEY3 EQU 3
KEY_DOWN EQU 6
KEY_UP EQU 7
/***************位定义**********************************************************************************************/
/*扫描子程序标志位(位为1时有效)
7 6 5 4 3 2 1 0
KEY_UP KEY_DOWN ------------ -------- KEY3 KEY2 KEY1 ----- -
*/
FLAG_KEY EQU 11H
DELAY_MS0 EQU 12H
DELAY_CONT EQU 13H
LP_CONT EQU 14H
ACT_CONT EQU 15H
KEY_MAYBE_DOWN_CONT EQU 16H
DELAY_MS1 EQU 17H
/*****************<PROGRAM STAR>***********************************************************************************/
ORG 0X000
JMP INIT
ORG 008H
JMP TCC_INT
/************中断服务子程序****************************************************************************************/
TCC_INT:
CLR RF
MOV A,@0X82 ;重赋TCC初值(8ms)
MOV TCC,A
/********KEY_SCAN***********************/
JBC FLAG_KEY,KEY_UP
JMP CHECK
JBC P5,1
JMP MAYBE_DOWN
JBC P5,2
JMP MAYBE_DOWN
JBC P5,3
JMP MAYBE_DOWN
MOV A,@2
MOV KEY_MAYBE_DOWN_CONT,A
JMP OUT_TCC
MAYBE_DOWN:
DJZ KEY_MAYBE_DOWN_CONT
JMP OUT_TCC
MOV A,@2
MOV KEY_MAYBE_DOWN_CONT,A
BS FLAG_KEY,KEY_UP
BS FLAG_KEY,KEY_DOWN
JBC P5,1
BS FLAG_KEY,KEY3
JBC P5,2
BS FLAG_KEY,KEY2
JBC P5,3
BS FLAG_KEY,KEY1
CHECK:
JBC P5,1
JMP OUT_TCC
JBC P5,2
JMP OUT_TCC
JBC P5,3
JMP OUT_TCC
BC FLAG_KEY,KEY_UP
OUT_TCC:
RETI
/**************<INIT>**********************************************************************************************/
INIT:
/*IOCF-中断屏蔽寄存器
7 6 5 4 3 2 1 0
- - - - - EXIE ICIE TCIE
EXIF:0:EXIF中断屏蔽 ICIE:0:ICIF中断屏蔽 TCIE: 0:TCIF中断屏蔽
1:EXIF中断允许 1:IEIF中断允许 1:TCIF中断允许
*/
MOV A,@00000000B
IOW IOCF
/*IOCE-WDT控制寄存器
7 6 5 4 3 2 1 0
WDTE EIS - - - - - -
WDTE:0:WDT禁止 EIS(P60/INT功能控制位):0:P60为双向I/O管脚
1:WDT使能 1:INT外部中断引脚
*/
MOV A,@00000000B
IOW IOCE
;I/O端口控制寄存器 1:I/O引脚为高阻状态(输入) 0:引脚为输出
MOV A,@11111110B
IOW IOC5
CLR P5
MOV A,@11111001B
IOW IOC6
BC P6,1
BC P6,2
/*IOCD-上拉控制寄存器
7 6 5 4 3 2 1 0
PH7 PH6 PH5 PH4 - PH2 PH1 PH0
0:内部上拉使能
1:内部上拉禁止
分别对应P6口的各个引脚
*/
;MOV A,@00000110B
;IOW IOCD
/*CONT-控制寄存器
7 6 5 4 3 2 1 0
- INT TS TE PAB PSR2 PSR1 PSR0
PSR2~PSR0:TCC/WDT预分频器位
PSR2 | PSR1 | PSR0 | TCC Rate | WDT Rate
------------------------------------------------------
0 | 0 | 0 | 1:2 | 1:1
------------------------------------------------------
0 | 0 | 1 | 1:4 | 1:2
------------------------------------------------------
0 | 1 | 0 | 1:8 | 1:4
------------------------------------------------------
0 | 1 | 1 | 1:16 | 1:8
------------------------------------------------------
1 | 0 | 0 | 1:32 | 1:16
------------------------------------------------------
1 | 0 | 1 | 1:64 | 1:32
------------------------------------------------------
1 | 1 | 0 | 1:128 | 1:64
------------------------------------------------------
1 | 1 | 1 | 1:256 | 1:128
PAB(预分频分配位) 0:TCC 1:WDT
TE (TCC信号边沿选择位) 0:上升沿加1 1:下降沿加1
TS (TCC信号源选择位) 0:内部指令周期时钟 1:外部输入信号
INT (中断使能标志位) 0:由DISI指令或硬件中断屏蔽 1:由ENI/RETI指令屏蔽
*/
MOV A,@0x00
CONTW
DISI
CLR FLAG_KEY
MOV A,@2
MOV KEY_MAYBE_DOWN_CONT,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
/***************MAIN**********************************************************************************************/
/*通过判断标志位FLAG_CH来确定该执行的子程序*/
MAIN:
JBC FLAG_KEY,KEY1
JMP ACTIVE1
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JBC FLAG_KEY,KEY3
JMP ACTIVE3
JMP MAIN
/******************************************************************************/
/*LED1 1S内闪亮4次,然后LED2闪亮4次 */
ACTIVE1:
BC P6,1
BC P6,2
BC FLAG_KEY,KEY1
BC FLAG_KEY,KEY2
BC FLAG_KEY,KEY3
MOV A,@6
MOV LP_CONT,A
ACTIVE1_LP1:
BS P6,1
MOV A,@4
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JBC FLAG_KEY,KEY3
JMP ACTIVE3
BC P6,1
MOV A,@4
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JBC FLAG_KEY,KEY3
JMP ACTIVE3
DJZ LP_CONT
JMP ACTIVE1_LP1
BC P6,1
MOV A,@6
MOV LP_CONT,A
ACTIVE1_LP2:
BS 6,2
MOV A,@4
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JBC FLAG_KEY,KEY3
JMP ACTIVE3
BC P6,2
MOV A,@4
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JBC FLAG_KEY,KEY3
JMP ACTIVE3
DJZ LP_CONT
JMP ACTIVE1_LP2
JMP ACTIVE1
/**********************************************************************/
ACTIVE2:
BC P6,1
BC P6,2
BC FLAG_KEY,KEY1
BC FLAG_KEY,KEY2
BC FLAG_KEY,KEY3
BS P6,1
MOV A,@20
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY1
JMP ACTIVE1
JBC FLAG_KEY,KEY3
JMP ACTIVE3
BC P6,1
BS P6,2
MOV A,@20
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY1
JMP ACTIVE1
JBC FLAG_KEY,KEY3
JMP ACTIVE3
JMP ACTIVE2
/*****************************************************************************/
ACTIVE3:
BC P6,1
BC P6,2
BC FLAG_KEY,KEY1
BC FLAG_KEY,KEY2
BC FLAG_KEY,KEY3
BS P6,1
BS P6,2
MOV A,@20
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY1
JMP ACTIVE1
JBC FLAG_KEY,KEY2
JMP ACTIVE2
BC P6,1
BC P6,2
MOV A,@20
MOV DELAY_CONT,A
CALL DELAY
BC FLAG_KEY,KEY_DOWN
JBC FLAG_KEY,KEY1
JMP ACTIVE1
JBC FLAG_KEY,KEY2
JMP ACTIVE2
JMP ACTIVE3
;---------------------------------------------------------
;----10MS
DELAY:
JBC FLAG_KEY,KEY_DOWN
JMP OUT
MOV A,@20
MOV DELAY_MS1,A
L_MS:
MOV A,@200
MOV DELAY_MS0,A
LOOP_D:
NOP
NOP
NOP
DJZ DELAY_MS0
JMP LOOP_D
DJZ DELAY_MS1
JMP L_MS
DJZ DELAY_CONT
JMP DELAY
OUT:
RET
;--------------------------------------------------------------------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -