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

📄 touchkey_iic.inc

📁 一个精简的IIC触摸按键读写子程序(作从机使用)
💻 INC
字号:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
F_I2C_Send PROC
	CLR		r_IICCount
  	CLR		b_ACK
L_LpCheckWriteAddrACK:	
;>>>>>>>>>>>>>>>>>>>>>>>>>
	INC		r_IICCount
	MOV		A,r_IICCount
	SUB		A,250				;
	SZ		C
	JMP		L_EndI2CSend
;>>>>>>>>>>>>>>>>>>>>>>>>>
	CALL	F_I2C_DetectStart	;测开始
	CALL	F_Receivebyt
	MOV		A,r_ReadByte
	SUB		A,058H				;测控制地址(0101 1xx0),方向为写
	SNZ		Z
	JMP		L_LpCheckWriteAddrACK
	@SDAoutput
L_LpCheckSendACK:
	SNZ		p_SCL
	JMP		L_LpCheckSendACK
	SET		p_SDA				;应答	
;L_ReceiveAddr: 	
	CALL	F_Receivebyt		;接收内存地址	
L_ReceiveAddrACK:	
	CALL	F_Cack 				;测应答	
	SNZ		b_ACK
	JMP		L_ReceiveAddrACK
	SET		p_SCL
	@SCLinput	
	CLR		r_IICCount
L_LpCheckReadACK:	
;>>>>>>>>>>>>>>>>>>>>>>>>>
	INC		r_IICCount
	MOV		A,r_IICCount
	SUB		A,250				;
	SZ		C
	JMP		L_EndI2CSend
;>>>>>>>>>>>>>>>>>>>>>>>>>
	CALL	F_I2C_DetectStart	;测开始
	CALL	F_Receivebyt
	MOV		A,r_ReadByte
	SUB		A,059H				;测控制地址(0101 1xx1),方向为读
	SNZ		Z
  	JMP		L_LpCheckReadACK  	
;L_SendData: 	
	CALL	F_Sendbyt  			;送数据高字节	
L_SendDataHACK:	
	CALL	F_Cack 				;测应答	
	SNZ		b_ACK
	JMP		L_SendDataHACK
	SET		p_SCL
	@SCLinput	
	MOV		A,r_KeyValue
	MOV		r_WriteByte,A
	CALL	F_Sendbyt  			;送数据低字节  		
L_SendDataLACK:	
	CALL	F_Cack 				;测应答	
	SNZ		b_ACK
	JMP		L_SendDataLACK
	SET		p_SCL
	@SCLinput  
	CALL	F_I2C_DetectStop	;测停止	
L_EndI2CSend:	
	@SCLoutput
	CLR		p_SCL 
  	RET
F_I2C_Send ENDP
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
F_Sendbyt PROC 					;send byte
	@SCLoutput					;
	@SDAoutput		  			;
  	MOV		A,8
  	MOV		r_Count1,A
   	CLR		p_SCL 	
L_LpWriteBit: 	
  	SZ		r_WriteByte.7		;高位先发送
  	JMP		L_SetWriteBit
  	CLR		p_SDA
  	JMP		L_ShiftWriteBit	
L_SetWriteBit:
	SET		p_SDA
L_ShiftWriteBit:
	SET		p_SCL				;发送时钟脉冲
	CALL 	F_Nop
	CLR		p_SCL
	CALL 	F_Nop
	RL		r_WriteByte
	SDZ		r_Count1
	JMP		L_LpWriteBit
L_EndWrbyt:
	RET
F_Sendbyt ENDP
;&&&&&&&&I2C&&&&I2C&&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&&I2C&&&&&I2C&&&&&&&&
F_Receivebyt PROC				;receive byte
	@SCLoutput					;
	@SDAinput		  			;
  	MOV		A,8
  	MOV		r_Count1,A
  	CLR		p_SCL
L_LpReadBit: 	
	CALL 	F_Nop
	RL		r_ReadByte
	SET		p_SCL
	CALL 	F_Nop
	SZ		p_SDA
	JMP		L_SetReadBit
  	CLR		r_ReadByte.0		;高位先接收
  	JMP		L_ShiftReadBit	
L_SetReadBit:
	SET		r_ReadByte.0		;
L_ShiftReadBit:  
	CLR		p_SCL				;暂停从机发送,以处理数据
	CALL 	F_Nop
	SDZ		r_Count1
	JMP		L_LpReadBit	
	RET
F_Receivebyt ENDP
;&&&&&&&&I2C&&&&I2C&&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&&I2C&&&&&I2C&&&&&&&&
F_I2C_DetectStart PROC			;DETECT START	
	CLR		p_SCL	
	@SDAinput		  
	@SCLinput					;
L_LpStartCheckSCL:	
	SNZ		p_SCL				;等待释放SCL线
	JMP		L_LpStartCheckSCL	
	SNZ		p_SDA				
	JMP		L_LpStartCheckSCL	
L_LpStartCheckSDA:	
	SNZ		p_SCL
	JMP		L_LpStartCheckSCL
	SZ		p_SDA				
	JMP		L_LpStartCheckSDA		
	RET
F_I2C_DetectStart ENDP
;&&&&&&&&I2C&&&&I2C&&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&&I2C&&&&&I2C&&&&&&&&
F_I2C_DetectStop PROC			;测停止
	CLR		b_StopF2
	CLR		p_SCL		
	@SDAinput		  	
	@SCLinput					;
L_LpStopCheckSCL:
	SNZ		p_SCL				;等待释放SCL线
	JMP		L_LpStopCheckSCL
	SZ		p_SDA
	JMP		L_LpStopCheckSCL
L_LpStopCheckSDA:	
	SNZ		p_SCL				;
	JMP		L_EndDetectStop	
	SNZ		p_SDA
	JMP		L_LpStopCheckSDA
	SET		b_StopF2
L_EndDetectStop:	
	RET 		  
F_I2C_DetectStop ENDP
;&&&&&&&&I2C&&&&I2C&&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&I2C&&&&&I2C&&&&&I2C&&&&&&&&
F_Cack PROC						;检查SDA线(应答)
	@SCLinput					;			
	@SDAinput		  			;释放SCL线,SDA线 
L_LpCheckCack:
  	SNZ		p_SCL
  	JMP		L_LpCheckCack		
	CLR		b_ACK
	SNZ		p_SDA
	SET		b_ACK				;SDA线为高,置位ACK		
	@SCLoutput
	NOP
  	CLR		p_SCL 
  	RET
F_Cack ENDP
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
F_Nop PROC
	NOP
	RET
F_Nop ENDP
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

⌨️ 快捷键说明

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