📄 24c08.asm
字号:
sclk24 bit p3.0
sda24 bit p3.1
count1 equ 20h
count2 equ 21h
org 0000h
ljmp i2c_start
org 0030h
i2c_start:
start:
mov r1,#50h
mov count1,#6
mov count2,#0
;lcall i2c_w
lcall i2c_r
ajmp $
i2c_w:
mov dptr,#tab
mov a,#0
movc a,@a+dptr
mov dptr,#0
Lcall WT24
lcall delay
lcall delay
lcall delay
i2c_w1:
mov dptr,#tab
inc count2
mov a,count2
movc a,@a+dptr
mov dph,#0
mov dpl,count2
Lcall WT24
lcall delay
lcall delay
lcall delay
lcall delay
djnz count1,i2c_w1
ret
i2c_r:
mov dptr,#0h
lcall RD24
i2c_r1:
mov @r1,a
inc r1
inc dptr
lcall RD24
djnz count1,i2c_r1
ret
;mov a,#12
;MOV B,#40h
;lcall WT24
;lcall RD24
;ajmp $
;------------------------------------------------------
;读24C08子程序
;------------------------------------------------------
RD24: ;PUSH ACC ;读24C08子程序。
SETB SDA24
CLR SCLK24
CALL START24
MOV A,#0A0H
CALL SHIFT8
CALL ACK
;POP ACC ;放地址
mov a,dpl
CALL SHIFT8
CALL ACK
CALL START24
MOV A,#0A1H
CALL SHIFT8
CALL ACK
SETB SDA24
MOV R7,#8
CLR A
SETB SDA24
lcall DELAY
RD000: RL A
SETB SCLK24
MOV C,SDA24
MOV ACC.0,C
CLR SCLK24
lcall DELAY
DJNZ R7,RD000
RET
;--------------------------------------------------
;写入24C08程序
;--------------------------------------------------
WT24: PUSH ACC
SETB SDA24
CLR SCLK24
CALL START24
MOV A,#0A0H
CALL SHIFT8
CALL ACK
;POP ACC ;放地址
mov a,dpl
CALL SHIFT8
CALL ACK
POP ACC
CALL SHIFT8
CALL ACK
CALL STOP
CALL DELAY2
RET
; -----------------------------------------------
;开始条件
;------------------------------------------------
START24:
CLR SDA24
SETB SDA24
SETB SCLK24
CLR SDA24
CLR SCLK24
RET
;----------------------------------------------
;停止条件
;----------------------------------------------
STOP:
CLR SDA24
SETB SCLK24
SETB SDA24
RET
;---------------------------------------------
;应答信号
;---------------------------------------------
ACK:
SETB SCLK24
CLR SCLK24
RET
;--------------------------------------------
;读,写8个字节数据
;--------------------------------------------
SHIFT8: MOV R7,#8
SH01: RLC A
MOV SDA24,C
SETB SCLK24
CLR SCLK24
DJNZ R7,SH01
RET
;--------------------------------------------
;读写延时子程序,(24MHz晶体)
;-------------------------------------------
DELAY2:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
delay:
mov r6,#10h
delay_1:
mov r5,#0fah
djnz r5,$
djnz r6,delay_1
ret
tab:
db 40h,0a3h,0f4h,0a3h,0a8h,0a8h,18h,19h
db 38h,03dh,12h,022h,08h,38h,18h,19h
db 40h,0adh,0f4h,23h,88h,38h,18h,19h
db 38h,33h,12h,022h,08h,38h,18h,19h
db 40h,23h,0f4h,23h,88h,38h,18h,19h
db 38h,33h,12h,022h,08h,38h,18h,19h
db 40h,23h,0f4h,23h,88h,38h,18h,19h
db 38h,33h,12h,067h,08h,38h,18h,19h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -