各位高手们帮帮忙我想用AT89C51读写WINDOND 29c020c FAlse为什么只能读它的内容,其它的写操作,擦除和读ID都不灵呢!帮助指点一下.谢了
我的邮箱是shijian0423@51.net
如方便的说请帮修改一下
#include
#include
sbit ce=P1^5; //29C020C 的片选线
sbit a16=P1^1; //29C020C 的地16根地址线
sbit a17=P1^2; //29C020C 的地17根地址线
unsigned char xdata da[65535];
//发一BIT数到串口
void send(unsigned char a)
{
SBUF=a;
while(!TI);
TI=0;
}
//延时10ms
void ys10ms()
{
unsigned char i,j;
for(j=0;i<20;j++)
for(i=0;i<250;i++);
}
//片擦除
void erase()
{
a16=0;
a17=0;
ce=0;
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0x80;
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0x10;
ys10ms();
}
//读ID号
void id()
{
unsigned char i,j,l,k;
a16=0;
a17=0;
ce=0;
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0x80;
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0x60;
ys10ms();
i=da[0x0];
j=da[0x1];
k=da[0x2];
a16=1;
a17=1;
l=da[0xfff2];
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0xf0;
ys10ms();
ce=1;
send(i);
send(j);
send(k);
send(l);
}
void main()
{
unsigned int i,j,k;
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TR1=1;
ce=0;
WR=1;
RD=0;
a16=0;
a17=0;
while(1)
if(RI)
{
i=SBUF;
RI=0;
switch (i)
{
//循环写16进制数99到WINDOND 29C020C
case 1:
for(k=0,j=0;j<2048;j++)
{
P1&=0xf9;
P1|=(k/65536)<<1;
da[0x5555]=0xaa;
da[0x2aaa]=0x55;
da[0x5555]=0xa0;
for(i=0;i<128;i++,k++)
{
ce=0;
da[k]=0x99;
ce=1;
}
ys10ms();
}
break;
case 2:
//循环读29C020C 中的数据并发到串口
for(k=0;k<65536;k++)
{
P1&=0xf9;
P1|=(k/65536)<<1;
ce=0;
send(da[k]);
ce=1;
}
break;
case 3:
//片擦除操作
erase();
break;
case 4:
//读出片的ID号
id();
break;
case 5:
send(5);
break;
case 6:
send(6);
break;
case 7:
send(7);
break;
case 8:
send(8);
break;
case 9:
send(9);
break;
}
}
} |