本帖最后由 相信哥咯 于 2011-7-24 22:42 编辑
我以前写的一个51的读写24c02,51读引脚前要先置1,貌似你没
org 0000h
ajmp main
main:
scl equ p2.0;
sda equ p2.1;
fs:
lcall start;
mov a,#0a0h;
lcall send;
lcall check;
jb f0,fs;
mov a,#00h;
lcall send;
lcall check;
jb f0,fs;
mov a,#03fh;
lcall send;
lcall check;
jb f0,fs;
lcall stop;
lcall delay;
fs2:
lcall start;
mov a,#0a0h;
lcall send;
lcall check;
jb f0,fs2;
mov a,#00h;
lcall send;
lcall check;
jb f0,fs2;
lcall start;
mov a,#0a1h;
lcall send;
lcall check;
jb f0,fs2;
lcall rev;
lcall nack;
lcall stop;
last:
clr p2.7;
mov p3,r2;
ajmp $;
start:
setb scl;
nop;
setb sda;
nop;
nop;
nop;
nop;
nop;
clr sda;
nop;
nop;
nop;
nop;
nop;
clr scl;
nop;
ret;
stop:
clr sda;
nop;
nop;
setb scl;
nop;
nop;
nop;
nop;
nop;
setb sda;
nop;
nop;
nop;
nop;
nop;
ret;
nack:
setb sda;
setb scl;
nop;
nop;
nop;
nop;
nop;
clr scl;
clr sda;
nop;
ret;
send:
mov r0,#08h;
wlp:rlc a
jc wr1;
sjmp wr00;
wlp1:
djnz r0,wlp;
nop;
ret;
wr1:
setb sda;
nop;
setb scl;
nop;
nop;
nop;
nop;
nop;
clr scl;
sjmp wlp1;
wr00:
clr sda;
nop;
setb scl;
nop;
nop;
nop;
nop;
nop;
clr scl;
sjmp wlp1;
rev:
mov r0,#08h;
rlp:
setb sda
setb scl;
mov c,sda;
mov a,r2;
rlc a;
mov r2,a;
clr scl;
djnz r0,rlp;
ret;
check:
setb sda;
setb scl;
clr f0;
mov c,sda;
jnc cend;
setb f0;
cend:
clr scl;
ret;
delay:mov r6,#0ffh;
d1:mov r7,#0ffh;
d2:djnz r7,d2;
djnz r6,d1;
ret;
end; |