📄 24cxx.asm
字号:
SCL BIT P1.5
SDA BIT P1.4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
MAIN: MOV SP, #60H
MOV R1, #30H
MOV R2, #00H
;-------------写单字节
LCALL START_BIT
MOV A, #0A0H ;器件寻址
LCALL WRITE0
LCALL ASK
MOV A, #00H ;内部单元寻址
LCALL WRITE0
LCALL ASK
MOV A, #77H ;单字节写入
LCALL WRITE0
LCALL ASK
LCALL STOP_BIT
LCALL DELAY_C02
;------------读单字节
LCALL START_BIT
MOV A, #0A0H ;器件寻址
LCALL WRITE0
LCALL ASK
MOV A, #00H ;内部单元寻址
LCALL WRITE0
LCALL ASK
LCALL START_BIT ;再发起始位
MOV A, #0A1H ;发读信号
LCALL WRITE0
LCALL ASK
;读数据
LCALL READ0
MOV @R1, A ;存数据
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: ;CLR SCL
NOP
NOP
;;SETB SDA
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
;---------------------------------------
DELAY_C02: MOV R4, #10H
DELAY_1:MOV R3, #00H
DJNZ R3, $
DJNZ R4, DELAY_1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -