我送你几个子程序,你慢慢看吧。 我要提醒你的是:用显波器测一下晶振……
bit writebyte(unsigned char sbyte) /* 送一个字节 */
{
unsigned char wi,aa,wsbyte;
bit nop,returnbit;
wsbyte=sbyte;
aa=0x80;
for(wi=0;wi<8;wi++)
{
x_scl=0;
wsbyte=sbyte&aa;
if(wsbyte==0)
x_sda=0;
else
x_sda=1;
aa=aa>>1;
x_scl=1;
nop=0;
}
x_scl=0;
x_sda=1;
if(x_sda==0)
returnbit=0; /*write success*/
else
returnbit=1;
x_scl=1;
nop=0;
x_scl=0;
return returnbit;
}
bit x1243w(unsigned char slabyte,char highaddr,char lowaddr,char rwdata)
{ /* 送四个字节,一个命令包含四个字节 */
bit xreturnbit;
x_sda=1;
x_scl=1;
x_sda=0; /* start */
xreturnbit=1;
if(writebyte(slabyte)==0)
if(writebyte(highaddr)==0)
if(writebyte(lowaddr)==0)
if(writebyte(rwdata)==0)
xreturnbit=0; /* 送数据成功 */
x_sda=0;
x_scl=1;
x_sda=1; /*stop*/
return(xreturnbit);
}
char x1243read(unsigned char slabyte,char highaddr,char lowaddr) /* 读出一个字
节 */
{
unsigned char readvalue;
char wi;
x_sda=1;
x_scl=1;
x_sda=0; /* start */
if(writebyte(slabyte)==0) /* 虚写... */
if(writebyte(highaddr)==0)
if(writebyte(lowaddr)==0)
{
x_scl=1;
x_sda=0;
slabyte=slabyte|0x01;
if(writebyte(slabyte)==0)
{
x_scl=0;
readvalue=0;
for(wi=0;wi<7;wi++) /* 读出8位数据 */
{
x_scl=1;
if(x_sda==1)
readvalue=readvalue|0x01;
readvalue=readvalue<<1;
x_scl=0;
}
x_scl=1;
if(x_sda==1)
readvalue=readvalue|0x01;
}
}
x_scl=0;
x_sda=0;
x_scl=1;
x_sda=1;/*stop*/
return readvalue;
}
发表时间:2001年12月21日13:04:00