求助:哪位DX给个AT45D041的程序给我参考一下,我写的不好使,但还看不出问题
uchar inbyt(void)//read 1 byte from at45d041
{
uchar data i,j,k;
k=0;
for (i=0;i <8;i++)
{
IC_SCK=0;
j=IC_SO;
k=(k < <1)|j;
IC_SCK=1;
}
return (k);
}
//------------------------------------------------
void outbyt(uchar dat)//write 1 byte to at45d041
{
uchar data i,j;
for (i=0;i <8;i++)
{
IC_SCK=0; j=dat&0x80; dat=dat < <1;
if(j==0x80){IC_SI=1;IC_SCK=1;}
else {IC_SI=0;IC_SCK=1;}
}
//IC_SI=0;
}
void Rdbuffer(uchar number,uchar *p,bytes,uint offset)//读取缓冲区数据
(缓冲区名,存放数据首地址,字节数,偏移地址)
{ uchar dat[5],i; //
if (number==1)dat[0]=0x54;
else dat[0]=0x56;
dat[1]=0;
if (offset> 255)dat[2]=1;
else dat[2]=0;
dat[3]=(char)(offset&0x00ff);
dat[4]=0;
IC_CS=0;
for (i=0;i <5;i++)
{
outbyt(dat[i]);
}
for (i=0;i <bytes;i++)
{
*p=inbyt();p++;
}
IC_CS=1;
}
void Wrbuffer(uchar number,uchar *p,bytes,uint offset)//写数据到缓冲区
参数:缓冲区名,写数据的起始地址,字节数,偏移地址
{
uchar dat[4],i;
if (number==1)dat[0]=0x84;
else dat[0]=0x87;
dat[1]=0;
if (offset> 255)dat[2]=1;
else dat[2]=0;
dat[3]=(char)(offset&0x00ff);
IC_CS=0;
for (i=0;i <4;i++)
{
outbyt(dat[i]);
}
for (i=0;i <bytes;i++)
{
outbyt(*p);p++;
}
IC_CS=1;
}
发表时间:2004年8月18日14:36:21