📄 s3c9454_i2c.txt
字号:
;===============================================================================
;子程序:I2C开始
;===============================================================================
BUS_START: OR SCL,#SCL_BIT
NOP
NOP
OR SDA,#SDA_BIT
NOP
NOP
NOP
AND SDA,#~SDA_BIT
NOP
NOP
AND SCL,#~SCL_BIT
NOP
RET
;===============================================================================
;子程序:I2C停止
;===============================================================================
BUS_STOP: AND SDA,#~SDA_BIT
NOP
NOP
OR SCL,#SCL_BIT
NOP
NOP
NOP
OR SDA,#SDA_BIT
NOP
RET
;===============================================================================
;子程序:发送一位数据时SCL的状态
;===============================================================================
BUS_CLK: NOP
OR SCL,#SCL_BIT
NOP
NOP
NOP
AND SCL,#~SCL_BIT
NOP
RET
;===============================================================================
;子程序:主机应答
;===============================================================================
BAKASK: AND SDA,#~SDA_BIT
NOP
NOP
OR SCL,#SCL_BIT
NOP
NOP
NOP
AND SCL,#~SCL_BIT
NOP
NOP
OR SDA,#SDA_BIT
NOP
RET
;===============================================================================
;子程序:从机应答
;===============================================================================
ASK: AND P2CONH,#11110111B
LD R2,#100
OR SCL,#SCL_BIT
ASK1: DEC R2
CP R2,#0
JR EQ,ASK2
TM SDA,#SDA_BIT
JR NZ,ASK1
OR I2C_FLAG,#I2C_FLAG_BIT
OR P2CONH,#00001000B
AND SCL,#~SCL_BIT
RET
ASK2: AND I2C_FLAG,#~I2C_FLAG_BIT
OR P2CONH,#00001000B
RET
;===============================================================================
;子程序:传输8位数据
;===============================================================================
WRITE_8BIT: LD R2,#0
RCF
WRITE0: RLC R0
JR C,WRITE1
AND SDA,#~SDA_BIT
JR WRITE2
WRITE1: OR SDA,#SDA_BIT
WRITE2: CALL BUS_CLK
INC R2
CP R2,#8
JR ULT,WRITE0
RET
;===============================================================================
;子程序:读8位数据
;===============================================================================
READ_8BIT: LD R2,#0
AND P2CONH,#11110111B
NOP
READ0:
NOP
OR SCL,#SCL_BIT
NOP
TM SDA,#SDA_BIT
JR Z,READ1
SCF
RLC R0
JR READ2
READ1: RCF
RLC R0
READ2: AND SCL,#~SCL_BIT
INC R2
CP R2,#8
JR ULT,READ0
NOP
NOP
OR P2CONH,#00001000B ;PEESDA
OR SDA,#SDA_BIT
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -