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

📄 new0001.asm

📁 接收红外遥控,控制2314
💻 ASM
字号:


;************************************************************************
;									*
;			minyunhua write 				*
;			QQ:121758163					*
;									*
;************************************************************************


.include        "C:\OPENice\Include\Reg\s3c9498.reg"
.include	"user_def.reg"
.include	"ram.reg"

.ifdef	M1988_3VCD
.include	"3vcd_key.reg"
.endif

.ifdef	M1988_3CDMP3
.include	"3cdmp3_key.reg"
.endif

.ifdef	M1988_DVD
.include	"dvd_key.reg"
.endif

.include	"io.reg"






		ORG	0000H
		VECTOR	00H,INIT_9498
INIT_9498:
		
		tcm     P1INT,#01H	    ;判断是否是外部中断0
		jp	Z,I_INT0			;外部中断0
        	tcm     TCCON,#01H
		jp	Z,TIMER1_INIT		;时间溢出中断C
		IRET
;****************************************************************
;			外部中断0
;****************************************************************

I_INT0:
.ifdef TEXT_40K
		SET_POP
		jp	ex_int_ret
.endif
		clr             time_delay
		clr             time_delay1
		IS_STATE_FIRST_9M
		jp		Z,state_first
		IS_STATE_SECN_2M
		jp		Z,state_third
		SET_FIRST_9M
		jp             ex_int_ret

		ORG 003CH
		DB 0FFH
		DB 0FFH ; 
		DB 0C7H ;
                DB 0FFH ; 
                
		
state_first:
		cp		time_count,#55H
		jp		UGT,error_return
		cp		time_count,#32H
		jp		ULT,error_return
		SET_SECN_2M
		CLR_FIRST_9M
		ld		remote_bit_count,#20H
		jp       ex_int_ret
state_third:
		cp		time_count,#12H
		jr		UGT,error_return
		cp		time_count,#02H
		jr		ULT,error_return
		sub		time_count,#08H
		rrc     remote_cmd_code1
		rrc     remote_cmd_code0
		rrc     remote_sys_code1
		rrc     remote_sys_code0
		dec	remote_bit_count
		jr	nz,ex_int_ret
set_ok:
		SET_DATA_OK
		SET_IR_KEY_IS_DOWN
error_return:
		CLR_SECN_2M
		SET_FIRST_9M
ex_int_ret:
		clr             time_count
		and	P1INT,#11111110B
		IRET
;****************************************************
;---------------ext int end----------------
;****************************************************





		ORG	0100H
RESET:
		DI
		ld 	BTCON,#10100011b 	; Disable Watch-dog
		ld	SP,#0C0H
		ld      TCNTSEL,#02H
        	ld      CLKCON,#00011000B
        	ld      TCCON,#00101110B    ;fxx/8
        	ld      TCDATA,#0C8H		;8/8=1US 1*200=200US
		ld	R0,#0A0H
CLR_RAM:
		dec	R0
		clr	@R0
		cp	R0,#00H
		jr	NE,CLR_RAM
		call	IO_INIT
		EI
		ld	EQ_RAM,#044H
		ld	volume_val,#20H
		ld	PT2258_VOL,#14H
		SET_REMOTE
.ifdef TEXT_40K
		CLR_REMOTE
		SET_POWER
.endif
		ld	FUNCTION_STAT,#Function_Vcd
		call	DELAY_200MS

MAIN:	
	;*********************************************************
	;		invalid	when current_key is 0ffh
	;*********************************************************
				;POWER_IS_LOW
				;jp	Z,no_delay_150ms
.ifdef		TEXT_40K
		call	Send_40K

		;call	DELAY_200MS
		;CLR_POP
		jp	MAIN
		
no_delay_150ms:

.endif
		call	Get_Key
		call	power_key_par
		call	EQ_key_par
		call	volume_key_par
		cp	FUNCTION_STAT,#Function_Vcd
		jp	NE,MAIN
		KEY_VALID_IS_LOW
		jp	Z,MAIN
		ld	ACC_SEN_VAL,Current_Key
		call	REMOTE_SEND_CODE
        	jp	MAIN





;			时间C溢出中断
;****************************************************************
TIMER1_INIT:
		
		inc		DELAY_200US_VAL
		inc             time_count
		inc		KEY_DELAY1
		cp		KEY_DELAY1,#125
		jp		ULT,next_even1
		clr		KEY_DELAY1
		inc		KEY_DELAY
next_even1:
		inc             time_delay
		cp		time_delay,#1EH
		jp		ULT,return_t_int
		inc             time_delay1
		clr		time_delay
		cp		time_delay1,#12H
		jp		ULT,return_t_int
		clr             time_delay1
		clr             time_delay
		and		STATE_ALL,#0FCH
		CLR_IR_KEY_IS_DOWN
return_t_int:	
               
		and	TCCON,#0FEH
		IRET
;****************************************************************
;			中断结束
;****************************************************************




		
.IF 0
IO_INIT		PROC
.ENDIF
IO_INIT:
 		ld	P0,#00H
		ld	P0CON,#00101010B
		clr     P1
		ld	P1CONH,#10101111B
		ld	P1CONL,#11111000B

		
		ld	P1INT,#00001000B	;ENABLE INT1 INT0 

.ifdef	TEXT_40K
		ld	P1CONL,#11111001B

		ld	P1INT,#00001100B
.endif
		clr	P2
		ld	P2CONH,#10101000B
		ld	P2CONL,#10101010B
		clr	P3
		ld	P3,#00H
		ld	P3CON,#10101010B
		;A/D
		;ld	ADCON,#00100010B


		
 		RET
.IF 0
IO_INIT		ENDP
.ENDIF




			
 ;*********************************************************
.IF 0
volume_key_par	proc
.ENDIF
volume_key_par:
		POWER_IS_LOW
		jp	Z,vol_ret

		KEY_VALID_IS_LOW
		jp	Z,vol_ret

		cp	Current_Key,#IR_VOL_DEC_KEY
		jp	NE,vol_dec_ir_fun
vol_inc_fun:
		;音量加
		cp	PT2258_VOL,#3cH
		jp	UGE,show_volu
		inc	PT2258_VOL
		jp	vol_fun
vol_dec_ir_fun:
		cp	Current_Key,#IR_VOL_INC_KEY
		jp	Z,vol_dec_fun
		;clr	show_volume
vol_mute:		
		cp	Current_Key,#IR_MUTE_KEY
		jp	Z,vol_mute_fun
		RET
vol_mute_fun:
		XOR_MUTE
		CLR_KEY_VALID
		MUTE_IS_LOW
		jp	Z,noshow_mute_icon
		call	DELAY_200MS
		call	PT2314_MUTE
		RET
noshow_mute_icon:
		call	PT2314_NOMUTE
mute_ret:
		RET	
vol_dec_fun:
		;音量减
		cp	PT2258_VOL,#00H
		jp	Z,show_volu
		dec	PT2258_VOL
vol_fun:
		clr	PT2314_REP
con_send_2258:
		cp	PT2314_REP,#10
		jp	uge,show_volu
		inc	PT2314_REP
		call	Pt2258_Send
		cp	ACC_RET_VAL,#00h
		jp	z,con_send_2258
show_volu:
		MUTE_IS_LOW
		jp	Z,vol_ret
		call	PT2314_NOMUTE
		CLR_MUTE
		CLR_KEY_VALID
vol_ret:
		RET	
 ;*********************************************************



 ;*********************************************************
.IF 0
Check_Channel	proc
.ENDIF
Check_Channel:
		POWER_IS_LOW
		jp	Z,set_volume_ret

		SET_MUTE
		ld	ACC_SEN_VAL,#1
		call	Delay_50ms

		CLR_TAPE
		CLR_CD
		CLR_RADIO
		CLR_AUX

		
		cp	FUNCTION_STAT,#Function_Radio
		jp	NE,sel_tape_channel
		and	EQ_RAM,#0FCH
		SET_RADIO
		
		jp	sel_channel
sel_tape_channel:
		cp	FUNCTION_STAT,#Function_Tape
		jp	NE,sel_vcd_channel
		and	EQ_RAM,#0FCH
		or	EQ_RAM,#02H
		SET_TAPE
		
		jp	sel_channel
sel_vcd_channel:
		cp	FUNCTION_STAT,#Function_Vcd
		jp	NE,sel_aux_channel
		and	EQ_RAM,#0FCH
		or	EQ_RAM,#01H
		SET_CD
		
		ld	ACC_SEN_VAL,#10
		call	Delay_50ms
		jp	sel_channel
sel_aux_channel:
		cp	FUNCTION_STAT,#Function_Aux
		jp	ne,sel_channel
		SET_AUX
		
		and	EQ_RAM,#0fch
		or	EQ_RAM,#03h
sel_channel:

		clr	PT2314_REP
con_send:
		ld	ACC_SEN_VAL,#10
		call	Delay_50ms

		ld	ACC_SEN_VAL,#0C0H
		call	PT2314_SEND
		inc	PT2314_REP
		cp	ACC_RET_VAL,#0
		jp	ne,send_next
		cp	PT2314_REP,#10
		jp	ult,con_send
send_next:

			
		ld	ACC_SEN_VAL,#0E0H
		call	PT2314_SEND
		call	Pt2258_Send
	
		ld	ACC_SEN_VAL,EQ_RAM
		call	PT2314_SEND
		call	SEND_EQ_VAL
		
		ld	ACC_SEN_VAL,#15
		call	Delay_50ms
			
		CLR_MUTE
set_volume_ret:
		RET
;*******************************************************************

.IF 0
power_key_par	proc
.ENDIF
power_key_par:
		KEY_VALID_IS_LOW
		jp	Z,power_ret
		cp	Current_Key,#IR_POWER_KEY
		jp	NE,power_ret
		CLR_KEY_VALID
		clr	FUNCTION_STAT
		SET_MUTE
		
		CLR_FLAT
		CLR_POP
		CLR_ROCK
		CLR_JAZZ

		
		
		ld	ACC_SEN_VAL,#5
		call	Delay_50ms
		
		CLR_TAPE
		CLR_CD
		CLR_RADIO
		CLR_AUX

		XOR_POWER
		POWER_IS_LOW
		jp	Z,power_ret
		ld	PT2258_VOL,#14h
		ld	ACC_SEN_VAL,#5
		call	Delay_50ms
power_ret:
		RET
;*******************************************************************

;**********************************************************************
.IF 0
Get_Remote_Key	PROC
.ENDIF
;**********************************************************************
Get_Remote_Key:
		ld	Current_Key,#0FFH
		IR_KEY_DOWN_IS_LOW
		jp	Z,get_rem_key
		ld	Current_Key,Current_Key_Bak
get_rem_key:
		DATA_OK_IS_HIGH
		jp	Z,get_ir_key
		RET
get_ir_key:
		CLR_DATA_OK
		COM	remote_cmd_code0
		ld	REMOTE_CODE_BAK,remote_cmd_code0
		cp	remote_cmd_code0,remote_cmd_code1
		jp	Z,get_code
		RET	
get_code:
		ld	Current_Key,REMOTE_CODE_BAK
		ld	Current_Key_Bak,Current_Key
		RET
;**********************************************************************






;**********************************************************************
.IF 0
Get_Key		PROC
.ENDIF
;**********************************************************************
Get_Key:
		ld	PREVIOUS_KEY,Current_Key

		cp	PREVIOUS_KEY,#0FFH
		jp	NZ,NO_CLR_KEY_DELAY
		clr	KEY_DELAY
		CLR_REP_KEY
	
NO_CLR_KEY_DELAY:
		

		call	Get_Remote_Key
		cp	Current_Key,#0FFH
		jp	EQ,search_ad_key
		call	Get_Vol_Key
		jp	IS_OK
search_ad_key:
		call	Get_AD_Key

		;call	Get_AD2_Key

		call	Get_Vol_Key
		cp	Current_Key,#0FFH
		jp	NE,IS_OK

		ld	PREVIOUS_KEY,Current_Key
IS_OK:
		CLR_KEY_VALID
		cp	Current_Key,PREVIOUS_KEY
		jp	EQ,RET_KEY_FAIL
		SET_KEY_VALID
RET_KEY_FAIL:
		RET
;**********************************************************************










;**********************************************************************
.IF 0
Get_Vol_Key	PROC
.ENDIF
;**********************************************************************
Get_Vol_Key:

		
;-----------------------------------------------------------------------		
JUD_VOL_INC_KEY:
		cp	Current_Key,#IR_VOL_INC_KEY
		jp	NE,V_UP_K_I
		ld	PREVIOUS_KEY,Current_Key;为使后面的按键为无效
		cp	KEY_DELAY,#TIME_500MS
		jp	ULT,JUD_VOL_DEC_KEY
		ld	Current_Key,#IR_VOL_INC_KEY;
		ld	PREVIOUS_KEY,#0FFH
		clr	KEY_DELAY
		SET_REP_KEY
		RET
V_UP_K_I:
		cp	PREVIOUS_KEY,#IR_VOL_INC_KEY
		jp	NE,JUD_VOL_DEC_KEY
		
		REP_KEY_IS_DOWN
		jp	Z,JUD_VOL_DEC_KEY
		ld	PREVIOUS_KEY,#0FFH
		SET_REP_KEY
		ld	Current_Key,#IR_VOL_INC_KEY
		RET
;-----------------------------------------------------------------------		
JUD_VOL_DEC_KEY:
		cp	Current_Key,#IR_VOL_DEC_KEY
		jp	NE,V_DOWN_K_I
		ld	PREVIOUS_KEY,Current_Key;为使后面的按键为无效
		cp	KEY_DELAY,#TIME_500MS
		jp	ULT,JUD_VOL_DEC_KEY_RET
		ld	Current_Key,#IR_VOL_DEC_KEY;
		ld	PREVIOUS_KEY,#0FFH
		clr	KEY_DELAY
		SET_REP_KEY

		RET
V_DOWN_K_I:
		cp	PREVIOUS_KEY,#IR_VOL_DEC_KEY
		jp	NE,JUD_VOL_DEC_KEY_RET
		REP_KEY_IS_DOWN
		jp	Z,JUD_VOL_DEC_KEY_RET
		ld	PREVIOUS_KEY,#0FFH
		SET_REP_KEY
		ld	Current_Key,#IR_VOL_DEC_KEY
JUD_VOL_DEC_KEY_RET:
		RET
;**********************************************************************





.include	"time.asm"

.ifdef	M1988_3VCD
.include	"3vcd_ad.asm"
.endif

.ifdef	M1988_3CDMP3
.include	"3cdmp3_ad.asm"
.endif

.ifdef	M1988_DVD
.include	"dvd_ad.asm"
.endif

.include	"3314.asm"
.include	"remote.asm"
			


			

		END

⌨️ 快捷键说明

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