首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

各位帮忙看一下我的程序为什么不灵呀,是89c51控制WINDOND 29c020c 的程序[求助]

[建议]

我怀疑这与你的硬件电路有关,程序应该没有问题,但它是相对你的硬件而言的,最值得怀疑的是你有没有用锁存器锁地址单元,以前我出现过这种问题。如果没有锁地址单元,那你当然无法写入和擦除。[em18]

各位帮忙看一下我的程序为什么不灵呀,是89c51控制WINDOND 29c020c 的程序[求助]

各位高手们帮帮忙我想用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; while(1) 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; } } }[em20][em20][em20][em20]
另外引脚31 WE连接是否正确也很重要.
返回列表