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

📄 main.asm

📁 Holtek audio decoder , headset 参考范例
💻 ASM
📖 第 1 页 / 共 2 页
字号:
EXIT_AUDIO_INT_ISR:
		MOV		A,isr_play_bp		;restone bp
		MOV		BP,A
		MOV		A,isr_play_tblp		;restore TBLP
		MOV		TBLP,A
		MOV		A,isr_play_mp0		;restore MP0
		MOV		MP0,A
		MOV		A,isr_play_mp1		;restore MP1
		MOV		MP1,A
		MOV		A,isr_play_status	;restore STATUS
		MOV		STATUS,A
		MOV		A,isr_play_acc		;restore ACC      		
		
		RETI

;***************************************************************
;		RECORD_INT_ISR
;		1. 8Khz
;		
;***************************************************************
RECORD_INT_ISR:
		MOV		isr_rec_acc,A		;save ACC
		MOV		A,STATUS
		MOV		isr_rec_status,A	;save status
		MOV		A,MP1
		MOV		isr_rec_mp1,A		;save mp1
		MOV		A,MP0 
		MOV		isr_rec_mp0,A		;save mp0
		MOV		A,TBLP
		MOV		isr_rec_tblp,A		;save TBLP
		MOV		A,BP
		MOV		isr_rec_bp,A		;save bp

		clr	BP
		
RECORD_My_Function:	

	;-----------------------------------------------------------
	; Here to add your another code !!

	;cpl PB		
		
EXIT_RECORD_INT_ISR:
		MOV		A,isr_rec_bp		;restone bp
		MOV		BP,A
		MOV		A,isr_rec_tblp		;restore TBLP
		MOV		TBLP,A
		MOV		A,isr_rec_mp0		;restore MP0
		MOV		MP0,A
		MOV		A,isr_rec_mp1		;restore MP1
		MOV		MP1,A
		MOV		A,isr_rec_status	;restore STATUS
		MOV		STATUS,A
		MOV		A,isr_rec_acc		;restore ACC   	     		
		
		RETI
		
;***************************************************************
;		Timer_0_ISR
;		1.Timer time = 21.2 ms
;		2.Do this procedure is 3.6ms
;***************************************************************
Timer_0_ISR:	
		clr		TMR0C.4
		MOV		isr_tmr0_acc,A		;save ACC
		MOV		A,STATUS
		MOV		isr_tmr0_status,A	;save status
		MOV		A,MP1
		MOV		isr_tmr0_mp1,A		;save mp1
		MOV		A,MP0
		MOV		isr_tmr0_mp0,A		;save mp0
		MOV		A,TBLP
		MOV		isr_tmr0_tblp,A		;save TBLP
		MOV		A,BP
		MOV		isr_tmr0_bp,A		;save bp
		
		clr	BP		
		
Timer_0_My_Function:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP		
		clr wdt
		
Timer_0_ISR_END:	
		MOV		A,isr_tmr0_bp		;restone bp
		MOV		BP,A		
		MOV		A,isr_tmr0_tblp		;restore TBLP
		MOV		TBLP,A
		MOV		A,isr_tmr0_mp0		;restore MP0
		MOV		MP0,A
		MOV		A,isr_tmr0_mp1		;restore MP1
		MOV		MP1,A
		MOV		A,isr_tmr0_status	;restore STATUS
		MOV		STATUS,A
		MOV		A,isr_tmr0_acc		;restore ACC
		SET		TMR0C.4			;start timer0

		RETI

;***************************************************************
;		Timer_1_ISR
;		1.Timer time = 21.2 ms
;		2.Do this procedure is 3.6ms
;***************************************************************
Timer_1_ISR:
		CLR		TMR1C.4

		MOV		isr_tmr1_acc,A		;save ACC
		MOV		A,STATUS
		MOV		isr_tmr1_status,A	;save status
		MOV		A,MP1
		MOV		isr_tmr1_mp1,A		;save mp1
		MOV		A,MP0
		MOV		isr_tmr1_mp0,A		;save mp0
		MOV		A,TBLP
		MOV		isr_tmr1_tblp,A		;save TBLP
		MOV		A,BP
		MOV		isr_tmr1_bp,A		;save bp
				
		clr	BP		
		
		clr wdt	


		MOV		A,isr_tmr1_bp		;restone bp
		MOV		BP,A
		MOV		A,isr_tmr1_tblp		;restore TBLP
		MOV		TBLP,A
		MOV		A,isr_tmr1_mp0		;restore MP0
		MOV		MP0,A
		MOV		A,isr_tmr1_mp1		;restore MP1
		MOV		MP1,A
		MOV		A,isr_tmr1_status	;restore STATUS
		MOV		STATUS,A
		MOV		A,isr_tmr1_acc		;restore ACC

Timer_1_ISR_End:
		SET		TMR1C.4
		RETI

;***************************************************************
;
;
;
;***************************************************************
Delay_20ms:
		clr wdt
			mov		a,075H
			mov		Delay_1,a
			mov		a,0FFH
			mov		Delay_2,a
Delay_20ms_Wait:
		clr wdt
			SDZ		Delay_2
			JMP		Delay_20ms_Wait
			SDZ		Delay_1
			JMP		Delay_20ms_Wait
			RET

Delay_5ms:
		clr wdt
			mov		a,03AH
			mov		Delay_1,a
			mov		a,0FFH
			mov		Delay_2,a
Delay_5ms_Wait:
		clr wdt
			SDZ		Delay_2
			JMP		Delay_5ms_Wait
			SDZ		Delay_1
			JMP		Delay_5ms_Wait
			RET


Delay 	PROC
		clr wdt
		MOV		A,0FFH
		MOV		Delay_1,A
		MOV		Delay_2,A

Wait:
		clr wdt
		SDZ		Delay_2
		JMP		Wait
		SDZ		Delay_1
		JMP		Wait
		RET

Delay	ENDP

;***************************************************************
;		Key_Debounced Module
;		Key_Defined : bits want to detect
;		Key_Process : set the bit when proces
;		Key_CheckIn : set the bit if detect a pressed key first
;		Key_Counter : i th  bit pressed
;		If supportc key press continuously,  do not set Key_Process (Ex: INC,DEC Volume)
;		If supportc key press continuously,  should set Key_Process (Ex: Mute,Play,Stop)
;***************************************************************
#define		UseReportID	1
IF	UseMediaKey
Key_Debounced:
				clr wdt	
	       	mov		a,VIOP
		cpl		acc
		mov		PortC_Data,a

		mov		a,Key_Defined
		and		a,PortC_Data
		sz		z
		jmp		Key_Debounced_ClearReg	;//no key pressed


Key_Debounced_Detect_In:		
		kmov		Key_Temp,PortC_Data
		clr		Key_Counter
Key_Debounced_Detect:		
		clr		C
		RRC		Key_Temp
		sz		C
		jmp		Key_Debounced_Detect_End
		inc		Key_Counter
		mov		a,8
		;xor		a,Key_Temp
		xor		a,Key_Counter
		sz		z
		jmp		Key_Debounced_Detect_End
		jmp		Key_Debounced_Detect
Key_Debounced_Detect_End:
		mov		a,Key_Counter
		;call		GetPipeBit
		
		xor		a,Key_CheckIn
		snz		z
		jmp		Key_Debounced_SetCheckIn
		
		;check process
		mov		a,Key_Process
		xor		a,Key_CheckIn
		sz		z
		jmp		Key_Debounced_End
		jmp		Key_Debounced_Process		
		
;jmp Key_Debounced_End if N/A
		nop
		nop
		nop
Key_Debounced_Process:
		clr wdt	
		mov	a,Key_Counter
		addm	a,pcl
		jmp	Key_Debounced_PA0
		jmp	Key_Debounced_Process_Dec 
		jmp	Key_Debounced_Process_Inc
		jmp	Key_Debounced_Process_Mute
		jmp	Key_Debounced_PA4
		jmp	Key_Debounced_PA5
		jmp	Key_Debounced_PA6
		jmp	Key_Debounced_PA7

Key_Debounced_SetCheckIn:
		mov	Key_CheckIn,a
		clr	Key_Process
		kmov	Key_IncCounter,Const_Counter
		kmov	Key_DecCounter,Const_Counter
		jmp	Key_Debounced_End

Key_Debounced_ClearReg:
		clr		acc
		xor		a,Key_CheckIn
		sz		z
		jmp		Key_Debounced_End
		jmp		Key_Debounced_ClearReg_2
;		clr		acc
;		xor		a,Key_Process
;		snz		z
;		jmp		Key_Debounced_ClearReg_2
;		jmp		Key_Debounced_End

Key_Debounced_ClearReg_2:
		clr		Key_CheckIn
		clr		Key_Process

Key_Debounced_ClearReg_1:
		;CALL		FIFO1_WR_CHECK
		;SNZ		bFlag_FIFO_Ready
		JMP		Key_Debounced_End
		
;----------------------------------





;----------------------------------

		nop				
		
Key_Debounced_My_Function:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		nop
		
		
		jmp		Key_Debounced_End	

Key_Debounced_End:
		clr wdt	
		ret
;=========================Process
Key_Debounced_Process_Mute:
		clr wdt	

;----------------------------------





;----------------------------------

		nop
		kmov	Key_Process,Key_CheckIn
		jmp	Key_Debounced_End
Key_Debounced_Process_Dec:
		clr wdt	
		sdz	Key_DecCounter
		jmp	Key_Debounced_End

;----------------------------------





;----------------------------------

		nop
		kmov	Key_DecCounter,Const_Counter
		nop
		jmp	Key_Debounced_End

Key_Debounced_Process_Inc:
		clr wdt	
		sdz	Key_IncCounter
		jmp	Key_Debounced_End

;----------------------------------





;----------------------------------

		nop
		kmov	Key_IncCounter,Const_Counter
		nop
		jmp	Key_Debounced_End


;===============================================================
;		User Add Some Key Debounced Code
;===============================================================
Key_Debounced_PA0:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA4:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA5:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA6:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA7:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End


ENDIF


wait_about_1s:
	;;;*******************************************
	;;;delay 1S 255*255*3*16*0.3333333=1.04S
	;;;*******************************************
		clr wdt	
		clr		Delay_1
		clr		Delay_2
		kmov		Delay_3,16
	wait_about_1s_loop:
		clr wdt	
		sdz		Delay_1
		jmp		wait_about_1s_loop
		sdz		Delay_2
		jmp		wait_about_1s_loop
		sdz		Delay_3
		jmp		wait_about_1s_loop
		clr wdt	
		nop
	ret	


Public  IRQ_counter
Public	FIFO_TEMP
Public	TX_FIFO_STACK
Public	RX_FIFO_STACK
Public	TX_FIFO_ADDR
Public	TX_FIFO_ADDR1
Public	RX_FIFO_ADDR
Public	RX_FIFO_ADDR1
Public	FIFO_COUNTER
Public	ADC_FIFO_COUNTER
Public	DAC_FIFO_COUNTER
Public	TX_FIFO_ADDR_temp
Public	RX_FIFO_ADDR_temp
Public  RX_FIFO_Status
Public	TX_key_code
Public	channel_1
Public  channel_2

Public  bFlag_IRQ_Flag
Public	bFlag_IRQ_Flag2
Public	bFlag_TX_FIFO
Public	bFlag_TX_FIFO_Select
Public	bFlag_TX_FIFO_Select1
Public	bFlag_RX_FIFO_Select
Public	bFlag_RX_FIFO_Select1
Public	bFlag_TX_Mode
Public	bFlag_RX_Mode
Public  bFlag_RX_SPI_ok
Public  bFlag_8k_fast
Public	bFlag_End_SPI_Operation

Public	temp_num
Public	table_data
Public	COMMAND_L
Public	COMMAND_H
Public	RF_number

Public  TX_ADDRESS_Select
Public  RX_ADDRESS_Select
Public	nRF_ADDR_value

Public	Delay_1
Public	Delay_2
Public	Delay_3

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -