📄
字号:
;##############################################################
PROC WBZD0CL,DSQ0CL,WBZD1CL,DSQ1CL,CHZDCL,DSQ2CL
;********************************
; 外部中断0处理
;********************************
WBZD0CL:
include "软件陷阱.asm"
;********************************
; 定时器0处理
;********************************
; 采样键状态
;--------------------------------
;出口: JZTVA,JZTVB
;--------------------------------
DSQ0CL:
CLR TR0
RETI
include "软件陷阱.asm"
;********************************
; 外部中断1处理
;********************************
WBZD1CL:
include "软件陷阱.asm"
;********************************
; 定时器1处理
;********************************
DSQ1CL:
include "软件陷阱.asm"
;********************************
; 串行中断处理
;********************************
CHZDCL:
PUSH PSW
PUSH ACC
CLR RS1
SETB RS0
JB RI,CHZDCL1
;发送中断:
CLR TI
SETB BZ_FSWB ;发送完毕标志,1=完(预设)
JB BZ_TXD,CHZDCLE ;发送标志,1=无
CLR BZ_FSWB ;发送完毕标志,0=没完
MOV R1,TXD_OUT
MOVX A,@R1
MOV SBUF,A ;发送
LCALL SFSJCL ;发送数据处理
INC TXD_OUT
ANL TXD_OUT,#01111111B
MOV A,TXD_OUT
CJNE A,TXD_IN,CHZDCLE
SETB BZ_TXD ;发送标志,1=无
LJMP CHZDCLE
include "软件陷阱.asm"
CHZDCL1:;接收中断:
CLR RI
CLR BZ_RXD ;接收标志,0=有
MOV R1,RXD_IN
MOV A,SBUF
MOVX @R1,A ;接收
INC RXD_IN
ORL RXD_IN,#10000000B
CHZDCLE:
POP ACC
POP PSW
RETI
include "软件陷阱.asm"
;********************************
; T2定时中处理
;********************************
DSQ2CL:
PUSH PSW
CLR RS1
SETB RS0
CLR TF2 ;T2必需
INC R5
CJNE R5,#00H,T2A
INC R6
CJNE R6,#00H,T2A
INC R7
T2A:
POP PSW
RETI
include "软件陷阱.asm"
;********************************
END
;##############################################################
;##############################################################
;********************************
; 发送数据处理
;********************************
PROC SFSJCL
SFSJCL:
JB BZ_QDXZ,SFSJCL_END;启动修正标志,1=不起动
JB BZ_FSSJ,SFSJCL_END;发送数据标志,1=不需处理
PUSH PSW
PUSH ACC
SETB RS1
SETB RS0
;--------
MOV R2,A ;数据
MOV A,SFSJZT ;状态
CJNE A,#0,SFSJCL1
;-----启动阶段----
LCALL QDJDCL ;启动阶段处理
LJMP SFSJCL_E
include "软件陷阱.asm"
SFSJCL1:
CJNE A,#1,SFSJCL2
;-----增加阶段----
LCALL ZJJDCL ;增加阶段处理
LJMP SFSJCL_E
include "软件陷阱.asm"
SFSJCL2:
CJNE A,#2,SFSJCL3
;-----减小阶段----
LCALL JXJDCL ;减小阶段处理
LJMP SFSJCL_E
include "软件陷阱.asm"
SFSJCL3:
CJNE A,#3,SFSJCL4
;-----修改阶段----
LCALL XGJDCL ;修改阶段处理
LJMP SFSJCL_E
include "软件陷阱.asm"
SFSJCL4:
SFSJCL_ERR:
;-----错误-------
include "软件陷阱.asm"
SFSJCL_E:
;--------
POP ACC
POP PSW
SFSJCL_END:
RET
include "软件陷阱.asm"
;##############################################################
;********************************
; 启动阶段处理
;********************************
QDJDCL:
MOV A,SFSJML ;发送数据命令
CJNE A,#0,QDJDCL1
;-----命令------------------
MOV A,R2 ;数据
CJNE A,#90H,QDJDCL1A
MOV SFSJML,#1 ;准备接收键号
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL1A:
CJNE A,#80H,QDJDCL1B
MOV SFSJML,#1 ;准备接收键号
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL1B:
CJNE A,#0B0H,QDJDCL1C
MOV SFSJML,#3 ;准备接收踏板第2位
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL1C:
LJMP QDJDCL_ERR ;错误
include "软件陷阱.asm"
QDJDCL1:
CJNE A,#1,QDJDCL2
;-----键号------------------
MOV SFSJML,#2 ;准备接收力度
MOV A,R2 ;数据
CJNE A,#109,$+3
JNC QDJDCL_ERR ;错误,>20+88
CJNE A,#21,$+3
JC QDJDCL_ERR ;错误,<20+1
CJNE A,#29,$+3
JNC QDJDCL11
;--低键--
INC JSQDJ ;低键计数
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL11:
CJNE A,#101,$+3
JC QDJDCL12
;--高键--
INC JSQGJ ;高键计数
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL12:
;--中键--
LCALL QJSTC ;清计数退出
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL2:
CJNE A,#2,QDJDCL3
;-----力度------------------
MOV SFSJML,#0 ;准备接收下一个命令
MOV A,R2 ;数据
JNZ QDJDCL21
;--关--
DEC FJJS ;放键计数
MOV A,FJJS
JNZ QDJDCL_E ;键没放完
LCALL JPTJCL ;键盘统计处理
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL21:
CJNE A,#128,$+3
JNC QDJDCL_ERR ;错误
;--开--
INC FJJS ;放键计数+1
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL3:
CJNE A,#3,QDJDCL4
;-----踏板第2位-------------
MOV SFSJML,#4 ;准备接收踏板第3位
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL4:
CJNE A,#4,QDJDCL_ERR ;错误
;-----踏板开关--------------
LJMP QDJDCL_E
include "软件陷阱.asm"
QDJDCL_ERR:
;-----错误-----------------
include "软件陷阱.asm"
QDJDCL_E:
RET
include "软件陷阱.asm"
;********************************
; 键盘统计处理
;********************************
JPTJCL:
MOV A,JSQDJ ;低键计数
CJNE A,#2,JPTJCL_A
LJMP JPTJCL_B
JPTJCL_A:
CJNE A,#4,JPTJCL1
JPTJCL_B:
;--低键=1 or 2---------
MOV A,JSQGJ ;高键计数
CJNE A,#9,$+3
JC JPTJCL0 ;高键<5,无效
;--进增加--------- ;高键>=5 and 低键=1 or 2
LCALL QJSBTC ;清计数不退出
MOV SFSJZT,#1 ;状态,增加
SETB BZ_XZYL ;修正音量标志,1=修正
SETB BZ_YLZJ ;音量增加标志,1=增加
LJMP JPTJCL_E
include "软件陷阱.asm"
JPTJCL0:
;--无效---------------
LCALL QJSTC ;清计数退出
LJMP JPTJCL_E
include "软件陷阱.asm"
JPTJCL1:
;--低键<>1 or 2 --------
MOV A,JSQGJ ;高键计数
CJNE A,#2,JPTJCL1A
LJMP JPTJCL1B
JPTJCL1A:
CJNE A,#4,JPTJCL2
JPTJCL1B:
;--高键=1 or 2 ------
MOV A,JSQDJ ;低键计数
CJNE A,#9,$+3
JC JPTJCL0 ;低键<5,无效
;--进减小------- ;低键>=5 and 高键=1 or 2
LCALL QJSBTC ;清计数不退出
MOV SFSJZT,#2 ;状态,减小
SETB BZ_XZYL ;修正音量标志,1=修正
SETB BZ_YLJX ;音量减小标志,1=减小
LJMP JPTJCL_E
include "软件陷阱.asm"
JPTJCL2:
;--(低键and高键)<>1 or 2 ----
MOV A,JSQDJ ;低键计数
CJNE A,#9,$+3
JC JPTJCL0 ;低键<5,无效
;--低键>=4------
MOV A,JSQGJ ;高键计数
CJNE A,#9,$+3
JC JPTJCL0 ;高键<5,无效
;---恢复---------- ;低键>=5 and 高键>=5
LCALL QJSBTC ;清计数不退出
MOV SFSJZT,#3 ;状态,修改
SETB BZ_XZYL ;修正音量标志,1=修正
SETB BZ_YLHF ;音量恢复标志,1=恢复
LJMP JPTJCL_E
include "软件陷阱.asm"
JPTJCL_E:
RET
include "软件陷阱.asm"
;##############################################################
;********************************
; 增加阶段处理
;********************************
ZJJDCL:
MOV A,SFSJML ;发送数据命令
CJNE A,#0,ZJJDCL1
;-----命令--------
MOV A,R2 ;数据
CJNE A,#90H,ZJJDCL1A
MOV SFSJML,#1 ;准备接收键号
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL1A:
CJNE A,#80H,ZJJDCL1B
MOV SFSJML,#1 ;准备接收键号
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL1B:
CJNE A,#0B0H,ZJJDCL1C
MOV SFSJML,#3 ;准备接收踏板第2位
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL1C:
LJMP ZJJDCL_ERR ;错误
include "软件陷阱.asm"
ZJJDCL1:
CJNE A,#1,ZJJDCL2
;-----键号--------
MOV SFSJML,#2 ;准备接收力度
MOV A,R2 ;数据
MOV XGJH, A ;待修改键号
CJNE A,#109,$+3
JNC ZJJDCL_ERR ;错误,>20+88
CJNE A,#21,$+3
JC ZJJDCL_ERR ;错误,<20+1
CJNE A,#29,$+3
JNC ZJJDCL11
;--低键--
INC JSQDJ ;低键计数
INC SFSJJS ;数据计数
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL11:
CJNE A,#101,$+3
JC ZJJDCL12
;--高键--
INC JSQGJ ;高键计数
INC SFSJJS ;数据计数
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL12:
;--中键--
INC SFSJJS ;数据计数
MOV JSQDJ,#0 ;低键计数
MOV JSQGJ,#0 ;高键计数
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL2:
CJNE A,#2,ZJJDCL3
;-----力度--------
MOV SFSJML,#0 ;准备接收下一个命令
MOV A,R2 ;数据
JNZ ZJJDCL21
;--关--
DEC FJJS ;放键计数-1
MOV A,FJJS
JNZ ZJJDCL_E ;键没放完
LCALL ZJCL ;增加处理
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL21:
CJNE A,#128,$+3
JNC ZJJDCL_ERR ;错误
;--开--
INC FJJS ;放键计数+1
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL3:
CJNE A,#3,ZJJDCL4
;-----踏板第2位---
MOV SFSJML,#4 ;准备接收踏板第3位
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL4:
CJNE A,#4,ZJJDCL_ERR ;错误
;-----踏板开关----
LJMP ZJJDCL_E
include "软件陷阱.asm"
ZJJDCL_ERR:
;-----错误--------
include "软件陷阱.asm"
ZJJDCL_E:
RET
include "软件陷阱.asm"
;********************************
; 增加处理
;********************************
ZJCL:
MOV A,SFSJJS ;数据计数
CJNE A,#2,ZJCL1
;---单键-------------
LCALL LDZJ ;力度增加
LCALL QJSBTC ;清计数不退出
MOV SFSJZT,#1 ;状态
LJMP ZJCL_E
include "软件陷阱.asm"
ZJCL1:
;---多键------------------------
MOV A,JSQDJ ;低键计数
CJNE A,#5,$+3
JC ZJCL_10 ;低键<3键
MOV A,JSQGJ ;高键计数
CJNE A,#5,$+3
JC ZJCL_20 ;高键<3键
;---保存--------- ;低键>=3 and 高键)>=3
LCALL QJSBTC ;清计数不退出
MOV SFSJZT,#3 ;状态,修改
SETB BZ_XZYL ;修正音量标志,1=修正
SETB BZ_YLBC ;音量保存标志,1=保存
LJMP ZJCL_E
include "软件陷阱.asm"
ZJCL_10:
;--低键<3--------------------
MOV A,JSQGJ ;高键计数
CJNE A,#5,$+3
JC ZJCL_0 ;高键<3,无效
;---保持增加状态--- ;高键>=3 and 低键<=2
LCALL QJSBTC ;清计数不退出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -