📄 i2cshiyan.txt
字号:
org 00h
vscl equ p3.0
vsda equ p3.1
mtd equ 30h
mrd equ 40h
slaw equ 3fh
slar equ 4fh
numbyt equ 3eh
subadr equ 4eh
ajmp start
start:jnb p1.2,key1
jnb p1.3,key2
jmp start
key1: lcall delay
jb p1.2,start
jnb p1.2,$
mov mtd,#4
lcall write
clr p1.4
mov r3,#0ffh
djnz r3,$
setb p1.4
jmp start
key2: lcall delay
jb p1.3,start
jnb p1.3,$
clr mrd
lcall read
lcall work
jmp start
work:mov r4,mrd
red:cpl p1.4
lcall delay1
djnz r4,red
ret
delay:mov r5,#20
d1:mov r6,#255
d2:djnz r6,$
djnz r5,d1
ret
delay1:mov r5,#30
d11:mov r6,#0ffh
d21:mov r7,#30h
djnz r7,$
djnz r6,d21
djnz r5,d11
ret
write:mov slaw ,#0a0h
mov subadr,#00h
mov numbyt,#1
lcall wrnbyt
ret
read:mov slaw,#0a0h
mov slar,#0a1h
mov subadr,#00h
mov numbyt,#1
lcall rdnbyt
ret
sta:setb vscl;启动IIC总线子程序
setb vsda
nop
nop
nop
nop
clr vsda
nop
nop
nop
nop
clr vscl
ret
stop:clr vsda;停止IIC总线子程序
nop
nop
nop
nop
setb vscl
nop
nop
nop
nop
setb vsda
ret
mack:clr vsda;应答位
setb vscl
nop
nop
nop
nop
clr vscl
clr vsda
ret
mnack:setb vsda;非应答位
setb vscl
nop
nop
nop
nop
clr vscl
clr vsda
ret
cack:setb vsda
setb vscl
clr f0
mov c,vsda
jnc cend
setb f0
cend:clr vscl
ret
wrbyt:mov r0,#08h
wlp:rlc a
jc wr1
ajmp wr0
wlp1:djnz r0,wlp
ret
wr1:setb vsda;发送‘1’程序段
setb vscl
nop
nop
nop
nop
clr vscl
clr vsda
ajmp wlp1
wr0:clr vsda
setb vscl
nop
nop
nop
nop
clr vscl
setb vsda
ajmp wlp1
rdbyt:mov r0,#08h
rlp:setb vsda
setb vscl
mov c,vsda
rlc a
clr vscl
mov r2,#10h
djnz r2,$
ret
wrnbyt:mov r3,numbyt
lcall sta
mov a,slaw
lcall wrbyt
lcall cack
jb f0,wrnbyt
mov r1,#mtd
wrda:mov a,@r1
lcall wrbyt
lcall cack
jb f0,wrnbyt
inc r1
djnz r3,wrda
lcall stop
ret
rdnbyt:mov r3,numbyt
lcall sta
mov a,slaw
lcall wrbyt
lcall cack
jb f0,rdnbyt
mov a,subadr
lcall wrbyt
lcall cack
jb f0,rdnbyt
lcall sta
mov a,slar
lcall wrbyt
lcall cack
jb f0,rdnbyt
mov r1,#mrd
rdn:lcall rdbyt
mov @r1,a
djnz r3,ack
lcall mnack
lcall stop
ret
ack:lcall mack
inc r1
sjmp rdn
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -