24read.asm
来自「MCS51系列单片机采用普通I/O实现I2C接口」· 汇编 代码 · 共 114 行
ASM
114 行
SCL BIT P1.5
SDA BIT P1.4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
MAIN: MOV SP,#60H
MOV R0, #30H ;------------读单字节
MOV R2,#00H
XX: LCALL START_BIT
MOV A, #0A0H ;器件寻址
LCALL WRITE0
LCALL ASK
MOV A, R2 ;内部单元寻址
LCALL WRITE0
LCALL ASK
LCALL START_BIT ;再发起始位
MOV A, #0A1H ;发读信号
LCALL WRITE0
LCALL ASK
;读数据
LCALL READ0
MOV @R0, A ;存数据
INC R0
INC R2
CJNE R2,#10H,XX
SJMP $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------起始位
START_BIT: SETB SCL
NOP
SETB SDA
NOP
CLR SDA
NOP
CLR SCL
RET
;--------------------------------停止位
STOP_BIT: CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
RET
;-----------------------------------从应答
ASK: NOP
NOP
CLR SCL
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
REP: NOP
NOP
MOV C, SDA ;保存应答位
JC REP
CLR SCL
RET
;------------------------------------写入
WRITE0: MOV R7, #8
WRITE0_1: CLR SCL
RLC A
MOV SDA, C
NOP
NOP
SETB SCL
DJNZ R7, WRITE0_1
CLR SCL
RET
;------------------------------------读出
READ0: MOV R7, #8
READ0_1:
MOV P1, #0FFH
CLR SCL
NOP
NOP
MOV C, SDA
RLC A
NOP
NOP
SETB SCL
DJNZ R7, READ0_1
RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?