📄 ң
字号:
#include <def.inc>
ORG 0000H
LJMP START
ORG 0003H
CLR EX0
CLR EX1
RETI
ORG 000BH
JMP INT_T0
ORG 0013H
CLR EX0
CLR EX1
RETI
;-------- T0 中断 ----------
INT_T0: JNB TI, INT_T0A
MOV TL0, #DATA_TL0_5mS ; T0 = 5mS
MOV TH0, #DATA_TH0_5mS
SETB CLICK5mS
CLR IR
RETI
INT_T0A: MOV TL0, #DATA_TL0_13uS ; T0 = 13uS
MOV TH0, #DATA_TH0_13uS
JB P3.1, INT_T0B
CPL IR
RETI
INT_T0B: CLR IR
RETI
;-------- 主程序 ----------
;--------- 重置堆栈 -------------
START: MOV SP, #NEWSP
;---------- 端口初始化 -----------
;IO初始化
MOV P1M0, #00000000B ;推挽:P1.6
MOV P1M1, #01000000B
MOV P3M0, #00000000B ;推挽:P3.1
MOV P3M1, #00000010B
CLR IR
SETB P3.1
;--------- 定时器设置 ------------
MOV TMOD, #21h ; C/T0 mode is 1 and C/T1 'S MOD is 2
MOV TL0, #DATA_TL0_5mS ;初值
MOV TH0, #DATA_TH0_5mS
SETB TR0 ;启动
MOV PCON, #10000000B ;设置波特率
MOV TH1, #DATA_TH1
SETB TR1
;--------- 串口设置 ------------
MOV SCON, #01000000B ;设置串口工作方式,只发送,不接收
;--------- 中断设置 -------------
MOV IE, #10000010B ; 开放C/T0
;--------- 变量初始化 ------------
; MOV POWLED, #10
SETB TI ;串口空闲
;--------- 变量初始化 ------------
MOV CMD, #NO_CMD
CLR CLICK5mS
MOV COUNT_KEY, #N_KEY ;重置统计次数和初值
MOV COUNT_K_OFF1, #Kn_ORG
MOV COUNT_K_ON1, #Kn_ORG
MOV COUNT_K_OFF2, #Kn_ORG
MOV COUNT_K_ON2, #Kn_ORG
MOV COUNT_K_MODE, #Kn_ORG
INI: MOV PWCH, #PWCH_DATA
MOV PWCL, #PWCL_DATA
;--------- 主循环 --------------
MAINLOOP: ;MOV PCON, #IDLE
;NOP
JBC CLICK5mS, TASK_5mS ;如果5mS到, 则执行5mS任务
MOV A, CMD
CJNE A, #NO_CMD, TASK_CMD ;如果指令非空, 则执行指令
JMP MAINLOOP
TASK_CMD: JNB TI, $
CLR TI
MOV TH0, #DATA_TH0_13uS
MOV TL0, #DATA_TL0_13uS
MOV SBUF, CMD
MOV CMD, #NO_CMD
MOV PWCH, #PWCH_DATA
MOV PWCL, #PWCL_DATA
JMP MAINLOOP
;-----------------------------------------------
EXIT_5mSA: JMP EXIT_5mS
;-------- TASK5mS --------------------------
TASK_5mS: SETB LED
DJNZ POWLED, T5mS_0
CLR LED
MOV POWLED, #200
T5mS_0: JB K_OFF1, T5mS_1 ;统计按键,按下则+1
INC COUNT_K_OFF1
T5mS_1: JB K_ON1, T5mS_2
INC COUNT_K_ON1
T5mS_2: JB K_OFF2, T5mS_3
INC COUNT_K_OFF2
T5mS_3: JB K_ON2, T5mS_4
INC COUNT_K_ON2
T5mS_4: JB K_MODE, T5mS_5
INC COUNT_K_MODE
T5mS_5: DJNZ COUNT_KEY, EXIT_5mSA ;没到统计次数,则退出
STA_KEY CMD_OFF1, COUNT_K_OFF1, STA_OFF1 ;CMD<=按键值
STA_KEY CMD_ON1, COUNT_K_ON1, STA_ON1
STA_KEY CMD_OFF2, COUNT_K_OFF2, STA_OFF2
STA_KEY CMD_ON2, COUNT_K_ON2, STA_ON2
STA_KEY CMD_MODE, COUNT_K_MODE, STA_MODE
MOV COUNT_KEY, #N_KEY ;重置统计次数和初值
MOV COUNT_K_OFF1, #Kn_ORG
MOV COUNT_K_ON1, #Kn_ORG
MOV COUNT_K_OFF2, #Kn_ORG
MOV COUNT_K_ON2, #Kn_ORG
MOV COUNT_K_MODE, #Kn_ORG
DJNZ PWCL, EXIT_5mS
DJNZ PWCH, EXIT_5mS
SETB EX0
SETB EX1
SETB LED
MOV PCON, #POWDN
NOP
JMP INI
EXIT_5mS: JMP MAINLOOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -