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

📄 iic.asm

📁 ELAN IR接收
💻 ASM
字号:
include "Iic.inc"
include "chip.inc"
include "Key.inc"

public	mcu_iic_send, chk_iic_send, mcu_iic_recv
public  delay_10us, delay_3us
extern  delayX64us, delay_4us, lcd_wr_data

		org	790	
chk_iic_send:	PROC
		jbs	rec_is,	0x7
		ret
		
		;decide current key is power_key
		mov	a,	@POWER_KEY
		sub	a,	ir_data_low
		jbc	status,	z
		jmp	send_power_key
		
		mov	a,	@0x01
		mov     iic_sendcom, a
		mov	a,	ir_data_low
		mov	iic_senddata, a
		call	mcu_iic_send
		clr	rec_is			;清除接收成功标志
		jmp	end_chk_iic_send
		
	send_power_key:		
		jbs	pwr_on_off,	0x00
		jmp	power_on	
		jmp	power_off

	power_off:
		jbc	curr_play_state, 0x00
		jmp	clr_rec_is_flag

		jbc	usb_status, 0x00
		jmp	clr_rec_is_flag
		
		mov	a,	@0x01
		mov     iic_sendcom, a
		mov	a,	ir_data_low
		mov	iic_senddata, a
		call	mcu_iic_send

		bs	ctrl_port,	dmp_pin	
		mov	a,	@0x00
		mov	pwr_on_off, a
		;不允许检查密码
		mov	a,	@0x00
		mov	en_password_chk, a
	clr_rec_is_flag:	
		clr	rec_is
		jmp	end_chk_iic_send
	power_on:
		bc	ctrl_port,	dmp_pin
		mov	a,	@0x01
		mov	pwr_on_off, a
		;不允许检查密码
		mov	a,	@0x00
		mov	en_password_chk, a		
		clr	rec_is

		;为了LCD开电后初始化
		mov	a,	@lcd_init_flag
		mov	rec_is,	a
	end_chk_iic_send:	
		ret
		ENDP
		
delay_10us:	PROC
		mov	a,	@0x60
		mov	iic_counter,	a
	cycle_10us:
		djz	iic_counter
		jmp	cycle_10us
		ret
		ENDP

delay_3us:	PROC
		mov	a,	@0x60
		mov	iic_counter, 	a
	cycle_3us:
		djz	iic_counter
		jmp	cycle_3us
		ret
		ENDP

wwj_delay_10us:	PROC
		mov	a,	@0x20
		mov	wwj_iic_counter, a
	wwj_cycle_10us:
		djz	wwj_iic_counter
		jmp	wwj_cycle_10us
		ret
		ENDP

wwj_delay_3us:	PROC
		mov	a,	@0x08
		mov	wwj_iic_counter, a
	wwj_cycle_3us:
		djz	wwj_iic_counter
		jmp	wwj_cycle_3us
		ret
		ENDP		
		
mcu_iic_send:	PROC
		;send start condition	
		bs	cs_port,	IIC_CS
		bc	clk_port,	IIC_CLK
		call	wwj_delay_3us
		bs	clk_port,	iic_clk
		call	wwj_delay_10us
		bc	cs_port,	IIC_CS
		call	wwj_delay_3us		
		

		;send send flag 0xff
		mov	a,	@0x08
		mov	wwj_iic_val,	a
	send_send_flag:	
		bs	data_port,	IIC_DATA
		call	wwj_delay_3us	
		bc	clk_port,	IIC_CLK
		call	wwj_delay_3us
		bs	clk_port,	IIC_CLK
		call	wwj_delay_10us
		djz	wwj_iic_val
		jmp	send_send_flag
		
	iic_start_send:
		;send iic command
		mov	a,	@0x08
		mov	wwj_iic_val, a
	send_iic_command:
		jbs	iic_sendcom,	0x07
		jmp	send_command_data0
		jmp	send_command_data1
	send_iic_command_cycly:
		call	wwj_delay_3us
		bc	clk_port,	IIC_CLK
		call	wwj_delay_3us
		bs	clk_port,	IIC_CLK
		call	wwj_delay_10us
		rlc	iic_sendcom
		djz	wwj_iic_val
		jmp	send_iic_command

		;send iic data
		mov	a,	@0x08
		mov	wwj_iic_val,	a
	send_iic_data:
		jbs	iic_senddata,	0x07
		jmp	send_data_data0
		jmp	send_data_data1
	send_iic_data_cycle:
		call	wwj_delay_3us
		bc	clk_port,	iic_clk
		call	wwj_delay_3us
		bs	clk_port,	iic_clk
		call	wwj_delay_10us	
		rlc	iic_senddata
		djz	wwj_iic_val
		jmp	send_iic_data		

		bs	clk_port,	iic_clk
		call	wwj_delay_3us
		bs	data_port,	IIC_DATA
		call	wwj_delay_3us
		bs	cs_port,	IIC_CS
		call	wwj_delay_3us
		jmp	end_mcu_iic_send
		
	send_command_data0:
		bc	data_port,	iic_data
		jmp	send_iic_command_cycly
	send_command_data1:
		bs	data_port,	iic_data
		jmp	send_iic_command_cycly		

	send_data_data0:
		bc	data_port,	iic_data
		jmp	send_iic_data_cycle
	send_data_data1:
		bs	data_port,	iic_data
		jmp	send_iic_data_cycle
		
	end_mcu_iic_send:
		ret
		ENDP	

mcu_iic_recv:	PROC
		;disi
		;send start condition	
		clr	iic_recvdata
		bs	cs_port,	IIC_CS
		call	delay_3us
		call	delay_3us
		bc	clk_port,	IIC_CLK
		call	delay_3us
		call	delay_3us
		bs	clk_port,	iic_clk
		call	delay_10us
		bc	cs_port,	IIC_CS
		call	delay_3us
		call	delay_3us

		;send iic recv index
		mov	a,	@0x08
		mov	iic_val,	a
	recv_iic_index:
		jbs	iic_recvindex,	0x07
		jmp	recv_index_data0
		jmp	recv_index_data1
	recv_iic_index_cycly:
		bc	clk_port,	IIC_CLK
		call	delay_3us
		call	delay_3us
		bs	clk_port,	iic_clk
		call	delay_10us
		rlc	iic_recvindex
		djz	iic_val
		jmp	recv_iic_index

		;set p5_2 to input
		call	delay_3us
		call	delay_3us
		ior	ioc5
		or	a,	@0x04	
		iow	IOC5
		call	delay_3us
		call	delay_3us

		;chk recv enable
		bc	clk_port,	iic_clk
		call	delay_3us
		call	delay_3us
		bs 	clk_port,	IIC_CLK
		call	delay_10us
		jbs	data_port,	iic_data
		jmp	iic_recv_end_proc

		;chk recv enable
		bc	clk_port,	iic_clk
		call	delay_3us
		call	delay_3us
		bs 	clk_port,	IIC_CLK
		call	delay_10us
		jbc	data_port,	iic_data
		jmp	iic_recv_end_proc		

		;recv iic data
		mov	a,	@0x08
		mov	iic_val,	a
	recv_iic_data:
		rlc	iic_recvdata
		bc	clk_port,	iic_clk
		call	delay_3us
		call	delay_3us
		bs 	clk_port,	IIC_CLK
		call	delay_10us
		jbs	data_port,	iic_data
		jmp	recv_data_data0
		jmp	recv_data_data1
	recv_iic_data_cycle:	
		djz	iic_val
		jmp	recv_iic_data	

		bc	clk_port,	IIC_CLK
		call	delay_10us
		bs 	clk_port,	IIC_CLK
		call	delay_10us

		mov	a,	@0x01
		mov	is_iic_recved, a

	iic_recv_end_proc:	
		;set p5_2 output
		call	delay_3us
		call	delay_3us
		ior	ioc5
		and	a,	@0xfb	
		iow	IOC5
		call	delay_3us
		call	delay_3us

		bs	clk_port,	iic_clk
		call	delay_3us
		call	delay_3us
		bs	data_port,	IIC_DATA
		call	delay_3us
		call	delay_3us
		bs	cs_port,	IIC_CS
		call	delay_3us
		call	delay_3us
		jmp	end_mcu_iic_recv
		
	recv_index_data0:
		bc	data_port,	iic_data
		jmp	recv_iic_index_cycly
	recv_index_data1:
		bs	data_port,	iic_data
		jmp	recv_iic_index_cycly		

	recv_data_data0:
		mov	a,	@0xfe
		and	iic_recvdata, a
		jmp	recv_iic_data_cycle
	recv_data_data1:
		mov	a,	@0x01
		or	iic_recvdata, a
		jmp	recv_iic_data_cycle
	end_mcu_iic_recv:
		;eni
		ret
		ENDP	

⌨️ 快捷键说明

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