dnf怎么过得幸运魔锤:93c46的读写

来源:百度文库 编辑:高考问答 时间:2024/04/29 05:22:47
下面是一段用at89c51读写at93c46的程序,但是读写都不好用,请各位高手给指点指点,问题出现在哪里了?
///////////////////////////////////////////////////////93c46
void ewen() ////////ewen and ewds
{
unsigned int i;
unsigned char indata;
CS=1;
indata=0x98; //10011***

for (i=0;i<10;i++)
{
if(indata&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
indata<<=1;
}

CS=0;
}

void ewds() //ewds
{
unsigned int i;
unsigned char indata;
CS=1;
indata=0x80; //10000***

for (i=0;i<10;i++)
{
if(indata&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
indata<<=1;
}

CS=0;
}

unsigned char readdata(unsigned char saddress) ///////////read 93c46
{
unsigned char i,j,k;

CS=1;
sdata=0xc0;
for(i=0;i<=2;i++) //110
{
if(sdata&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
sdata<<=1;

}

saddress<<=1;
for(j=0;j<7;j++) //a0---a6
{
if(saddress&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
saddress<<=1;
}

for(k=0;k<=7;k++) //send sk ,then read data.
{
SK=1;
sdata<<=1;
if(DO)
{
sdata|=0x1;
}
else
{
sdata&=0xfe;
}
SK=0;

}
DO=1;
CS=0;
return sdata;

}
void writedata(unsigned char saddress,unsigned char sdata) //write 93c46
{
//unsigned char saddress;

unsigned char i,j,k;
//allowflag=1;
ewen();
CS=1;
wdata=0xa0;
for(k=0;k<3;k++) //101
{
if(wdata&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
wdata<<=1;
}

saddress<<=1; //a0---a6
for(i=0;i<7;i++)
{
if(saddress&0x80) DI=1;
else DI=0;
SK=1;
SK=0;
saddress<<=1;
}

for(j=0;j<=7;j++)
{
if(sdata&0x80) DI=1;
else DI=0;

SK=1;
SK=0;
sdata<<=1;
}
CS=0;
CS=1;
delay10ms();
CS=0;
ewds();

}

////////////////////////////////////////////////////////
就是想用93c46的地址0和1来存储时间秒和分