📄 touchkey_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 + -