⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad0.asm

📁 完整功放的控制程序
💻 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 + -