📄 i2c2408.asm
字号:
SCL BIT P3.4
SDA BIT P3.5
;**************************************
;以下为写PT2314各个控制数据的程序
;***************************************
PT2314_WR:
LCALL START
MOV A,#PT2314_ADD
LCALL SENDDATE
ACALL ASKW
MOV A,PT2314_MSB
ACALL SENDDATE
ACALL ASKW
ACALL STOP
RET
;************************************
;以上为写PT2314各个控制数据到写的程序
;************************************
;以下为I2C总线的各个控制信号
;**************************************
;写存储器时等待ASK信号
ASKW: ACALL DELAY
SETB SDA ;释放SDA_P总线
ACALL DELAY
SETB SCL
WAITASKW: MOV C,SDA
JC WAITASKW
;LCALL DELAY10
CLR SCL
CLR SDA
RET
;**********************************
;MCU作为从器件不应答
NOASK: SETB SDA
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
CLR SDA
RET
;-----------------------------------
;启动信号
START: SETB SCL
SETB SDA
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL
RET
;---------------------------
;停止信号
STOP: CLR SCL
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
;---------------------------------
;读数据到总线上,A作为移位输出寄存器
SENDDATE: MOV R2,#8
LOOPW: RLC A
MOV SDA,C
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
DJNZ R2,LOOPW
CLR SDA
RET
;--------------------------------
;读24C08子程序。
RD24: PUSH ACC
SETB SDA
CLR SCL
CALL START
MOV A,#0A0H
CALL SENDDATE
CALL ASKW
POP ACC
CALL SENDDATE
CALL ASKW
CALL START
MOV A,#0A1H
CALL SENDDATE
CALL ASKW
SETB SDA
MOV R7,#8
CLR A
SETB SDA
RD000: RL A
SETB SCL
MOV C,SDA
MOV ACC.0,C
CLR SCL
DJNZ R7,RD000
RET
;-------------------------------
;写入24C02程序:
WT24: PUSH ACC
SETB SDA
CLR SCL
CALL START
MOV A,#0A0H
CALL SENDDATE
CALL ASKW
POP ACC
CALL SENDDATE
CALL ASKW
MOV A,B
CALL SENDDATE
CALL ASKW
CALL STOP
CALL DELAY
RET
; -------------------------------
DELAY: NOP
NOP
NOP
NOP
RET
;***********************************
;以上为I2C总线的各个控制信号
;************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -