s3c9454_i2c.txt
来自「s3c9454通过I2C总线读写24C02的子程序」· 文本 代码 · 共 125 行
TXT
125 行
;===============================================================================
;子程序: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 + =
减小字号Ctrl + -
显示快捷键?