📄 ad0.asm
字号:
;******************************* 频谱A/D子程序集0 ****************************
;比较器方式(16级)
;占用: ACC, R0, R1
;************* 外部变量说明 *****************************
BC_AD0 BIT P0.4 ;*** 4位电阻堆的D3脚 ***
BC_AD1 BIT P0.5 ;*** 4位电阻堆的D3脚 ***
BC_AD2 BIT P0.6 ;*** 4位电阻堆的D3脚 ***
BC_AD3 BIT P0.7 ;*** 4位电阻堆的D3脚 ***
;************* 外部变量说明 *****************************
BC_PC BIT P1.0 ;*** 分压脚 ***
BC_PB BIT P1.1 ;*** 分压脚 ***
BC_PA BIT P1.2 ;*** 分压脚 ***
BC_AD BIT P0.3 ;*** 声道的比较器输出脚 ***
;************ 公共变量定义 ******************
PUBLIC ADPRO
;************** 常数定义 ******************
;=============================== 公共子程序 (可被C调用) ===============================
;************* 频谱A/D子程序 **************
;******************************************
;调用该程序一次, 各通道的转换结果刷新一次
;占用: ACC, R0, R1
;每次采集完4个通道的值则返回
ADPRO:
MOV R0,#10H
MOV R1,#00H
P_100HZ:
SETB BC_PA ;100HZ
CLR BC_PB ;X5
SETB BC_PC
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L02 ;检测声道是否到位
MOV AD_IN+0, R1
LJMP ADPRO1
ADR_L02:
INC R1
DJNZ R0, P_100HZ
MOV AD_IN+0,#0FH ;检不到时为最高格数
;*****************************
ADPRO1: ;150HZ
MOV R0,#10H
MOV R1,#00H
P_150HZ:
SETB BC_PA ;150HZ
SETB BC_PB
CLR BC_PC ;X3
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L03 ;检测声道是否到位
MOV AD_IN+1, R1
LJMP ADPRO2
ADR_L03:
INC R1
DJNZ R0, P_150HZ
MOV AD_IN+1,#0FH ;检不到时为最高格数
;*****************************
ADPRO2:
MOV R0,#10H
MOV R1,#00H
P_400HZ:
SETB BC_PA ;400HZ
SETB BC_PB
SETB BC_PC ;X7
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L04 ;检测声道是否到位
MOV AD_IN+2, R1
LJMP ADPRO3
ADR_L04:
INC R1
DJNZ R0, P_400HZ
MOV AD_IN+2,#0FH ;检不到时为最高格数
;*****************************
ADPRO3:
MOV R0,#10H
MOV R1,#00H
P_1KHZ:
CLR BC_PA ;1KHZ
CLR BC_PB
SETB BC_PC ;X4
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L05 ;检测声道是否到位
MOV AD_IN+3, R1
LJMP ADPRO4
ADR_L05:
INC R1
DJNZ R0, P_1KHZ
MOV AD_IN+3,#0FH ;检不到时为最高格数
;*****************************
ADPRO4:
MOV R0,#10H
MOV R1,#00H
P_25KHZ:
CLR BC_PA ;2.5KHZ
SETB BC_PB
SETB BC_PC ;X6
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L06 ;检测声道是否到位
MOV AD_IN+4, R1
LJMP ADPRO5
ADR_L06:
INC R1
DJNZ R0, P_25KHZ
MOV AD_IN+4,#0FH ;检不到时为最高格数
;*****************************
ADPRO5:
MOV R0,#10H
MOV R1,#00H
P_83KHZ:
SETB BC_PA ;8.3KHZ
CLR BC_PB
CLR BC_PC ;X1
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L07 ;检测声道是否到位
MOV AD_IN+5, R1
LJMP ADPRO6
ADR_L07:
INC R1
DJNZ R0, P_83KHZ
MOV AD_IN+5,#0FH ;检不到时为最高格数
;*****************************
ADPRO6:
MOV R0,#10H
MOV R1,#00H
P_10KHZ:
CLR BC_PA ;10KHZ
SETB BC_PB ;X2
CLR BC_PC
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L08 ;检测声道是否到位
MOV AD_IN+6, R1
LJMP ADPRO7
ADR_L08:
INC R1
DJNZ R0, P_10KHZ
MOV AD_IN+6,#0FH ;检不到时为最高格数
;*****************************
ADPRO7:
MOV R0,#10H
MOV R1,#00H
P_12KHZ:
CLR BC_PA ;12KHZ
CLR BC_PB ;X2
CLR BC_PC
LCALL OUTPUT_VOL
MOV A, #09H ;该延时值需要调整!!!!!
DJNZ ACC, $
JB BC_AD, ADR_L09 ;检测声道是否到位
MOV AD_IN+7, R1
LJMP ADPRO8
ADR_L09:
INC R1
DJNZ R0, P_12KHZ
MOV AD_IN+7,#0FH ;检不到时为最高格数
ADPRO8:
;*****************************
RET
;*************************
OUTPUT_VOL:
MOV A, R1
MOV C, ACC.0
MOV BC_AD0, C
MOV C, ACC.1
MOV BC_AD1, C
MOV C, ACC.2
MOV BC_AD2, C
MOV C, ACC.3
MOV BC_AD3, C
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -