📄 ʱ
字号:
;********************************
; 时间音量处理
;********************************
;入口: DPTR 时间地址
; JXH 键序号 21~108
;出口: YLDX 音量大小
;--------------------------------
PROC SJYLCL
SJYLCL:
PUSH PSW
PUSH ACC
SETB RS1
CLR RS0 ;2工作区
;-----------
LCALL QSJCL ;取时间R7R6R5R4
LCALL DSJCL ;读时间R3R2R1R0
LCALL SWJF ;四位减法
LCALL YLCBCL ;音量查表处理
MOV DPTR,#TAB_YLXXB ;音量线性表
MOVC A,@A+DPTR ;线性处理
LCALL YLXZCL ;音量修正处理
MOV YLDX,A ;音量大小
;-----------
POP ACC
POP PSW
RET
include "软件陷阱.asm"
;########################################################
;********************************
; 取时间处理(现在)
;********************************
QSJCL:
CLR ET2
PUSH 0CDH ;TH2
PUSH 0DH ;1区R5
PUSH 0EH ;1区R6
PUSH 0FH ;1区R7
SETB ET2
POP ACC
MOV R7,A
POP ACC
MOV R6,A
POP ACC
MOV R5,A
POP ACC
MOV R4,A
RET
include "软件陷阱.asm"
;********************************
; 读时间处理(过去)
;********************************
DSJCL:
MOVX A,@DPTR
INC DPL
MOV R3,A
MOVX A,@DPTR
INC DPL
MOV R2,A
MOVX A,@DPTR
INC DPL
MOV R1,A
MOVX A,@DPTR
MOV R0,A
RET
include "软件陷阱.asm"
;********************************
; 四位减法
;********************************
;入口: 被减数 R7R6R5R4 下点时间
; 减数 R3R2R1R0 上点时间
;出口: 差 R3R2R1R0 时间差
;--------------------------------
SWJF:
CLR C
MOV A,R4
SUBB A,R0
MOV R0,A
MOV A,R5
SUBB A,R1
MOV R1,A
MOV A,R6
SUBB A,R2
MOV R2,A
MOV A,R7
SUBB A,R3
MOV R3,A
RET
include "软件陷阱.asm"
;********************************
; 音量查表处理
;********************************
;出口: A 音量大小 0~255
;--------------------------------
YLCBCL:
JC YLCBCL0 ;超时
CJNE R3,#0,YLCBCL0 ;超时
CJNE R2,#0,YLCBCL0 ;超时
CJNE R1,#0FFH,YLCBCL1
CJNE R0,#0FFH,YLCBCL1
YLCBCL0:
;超时:
MOV A,#1 ;最小音量
LJMP YLCBCL3
include "软件陷阱.asm"
;---------------------
YLCBCL1:
;0000-FFFE
CJNE R1,#0,YLCBCL2
CJNE R0,#0,YLCBCL2
;0000
MOV A,#127 ;最大音量
LJMP YLCBCL3
include "软件陷阱.asm"
;---------------------
YLCBCL2:
;0001-FFFE
LCALL YLCB ;音量查表
YLCBCL3:
RET
include "软件陷阱.asm"
;########################################################
;********************************
; 音量查表(折半查找)
;********************************
;入口: R1R0 音量时间0001-FFFE
;出口: A 音量大小
;--------------------------------
; R7 上边界
; R6 中靠下
; R5 下边界
; R3 查表数据高位
; R2 查表数据低位
; R1 时间高位
; R0 时间低位
;--------------------------------
YLCB:
MOV R7,#255
MOV R6,#127
MOV R5,#0
YLCB1:
MOV DPTR,#TAB_INYLB
;-----DPTR+R6
MOV A,R6
ADD A,DPL
MOV DPL,A
MOV A,#0
ADDC A,DPH ;进位
MOV DPH,A
;-----查表数据放入R3R2
MOV A,R6 ;数据放于#TAB_INYLB+R6+R6
MOVC A,@A+DPTR
MOV R3,A
MOV A,R6
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
;-----比较大小
MOV A,R1
CJNE A,13H,YLCB2 ;R3 (2工作区)
MOV A,R0 ;=
CJNE A,12H,YLCB2 ;R2 (2工作区)
LJMP YLCB5 ;=
include "软件陷阱.asm"
YLCB2: ;-----判断大小
MOV A,R6 ;中点
JNC YLCB3
;-----R1R0<R3R2
MOV R7,A ;中点-->上边界
ADD A,R5 ;新中点=(中点+下边界)/2
LJMP YLCB4
include "软件陷阱.asm"
YLCB3: ;------R1R0>R3R2
MOV R5,A ;中点-->下边界
ADD A,R7 ;新中点=(中点+上边界)/2
YLCB4: ;-----求新中点
RRC A ;新中点=(中点+边界)/2
MOV R6,A ;新中点
CJNE A,15H,YLCB1 ;中点=下边界? (15H:2工作区R5)
YLCB5: ;-----中点=下边界 (R1R0=R3R2)
CLR C
MOV A,#0
SUBB A,R6 ;查表得到的音量
;-----查找完毕
RET
include "软件陷阱.asm"
;########################################################
;********************************
; 音量修正处理
;********************************
;入口: A 音量大小 0~255(0~127)
; JXH 键序号 21~108
;出口: A 音量大小 1~127
;--------------------------------
YLXZCL:
PUSH B
MOV B,A ;音量
MOV A,JXH ;键序号(21~108)
;不能够调整修正系数-----
;MOV DPTR,#TAB_YLXZB
;MOVC A,@A+DPTR ;修正系数
;-----------------------
LJMP LOOP111
CLR EA
LCALL SZT1
LCALL FSSJ
LJMP $
;************************************************
; 设置T1 (调试通过)
;************************************************
SZT1:
MOV TMOD,#22H ;定时方式2,自动再装的8位定时器
MOV TH1,#0F3H ;晶振=36MHz,波特率=7200
MOV TL1,#0F3H
MOV SCON,#40H ;串口方式1,8位UART,波特率受T1控制
SETB REN ;允许接收
CLR ES ;不允许串口中断
SETB PT1 ;PT1不低于PS
CLR PS ;PS低于PT1
CLR ET1 ;禁止T1中断
SETB TR1 ;起动T1
RET
;************************************************
; 发送数据
;************************************************
FSSJ:
MOV DPTR,#0280H ;IN 首址
MOV R7,#128 ;数量
FSSJ1:
MOVX A,@DPTR
INC DPTR
LCALL FS ;发送
DJNZ R7,FSSJ1
RET
;************************************************
; 发送一个数据
;************************************************
FS:
MOV SBUF,A
JNB TI,$
CLR TI
RET
;************************************************
LOOP111:
;能够调整修正系数-------
MOV DPTR,#EXRAM_ADD
ADD A,DPL
MOV DPL,A
MOV A,#0
ADDC A,DPH
MOV DPH,A
MOVX A,@DPTR ;修正系数
LOOP112:;-----------------------
XCH A,B
LCALL CSXZ ;参数修正
POP B
RET
include "软件陷阱.asm"
;********************************
END
;########################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -