管脚定义如下。用的STC11F16XE
P0 接地址低8位 同时P0 也接数据口。
P2口接的地址高8位。
sfr DataOut=0x80; //定义P0口接SST39VF040的数据线
sfr Address7_0=0x80; //定义P0口接SST39VF040的地址线 A0…A7
sfr Address15_8=0xa0; //定义P2口接SST39VF040的地址线A8…A15
sbit Address16=P1^0; //定义P3.2接SST39VF040的地址线A16
sbit Address17=P1^1; //定义P3.3接SST39VF040的地址线A17
sbit Address18=P1^2; //定义P3.4接SST39VF040的地址线A18
sbit Sst39vf040_Ce=P3^5; //定义P3.5接SST39VF040的片选线线CE
sbit Sst39vf040_We=P3^6; //定义P3.6接SST39VF040的写使能线WE
sbit Sst39vf040_Oe=P3^7; //定义P3.7接SST39VF040的读使能线OE
sbit ALE =P4^5;
void Chip_Erase(void)
{
Sst39vf040_Ce=1;
Sst39vf040_Oe=0;
Sst39vf040_We=1;
Address18=0;
Address17=0;
Address16=0;
ALE=1;
Address7_0=0x55;
ALE=0;
Address15_8=0x55;
Sst39vf040_Ce=0;
Sst39vf040_Oe=1;
Sst39vf040_We=0;
DataOut=0xaa;
Delay1us(20);
Sst39vf040_We=1;
ALE=1;
Address7_0=0xaa;
ALE=0;
Address15_8=0x2a;
Delay1us(20);
Sst39vf040_We=0;
DataOut=0x55;
Delay1us(20);
Sst39vf040_We=1;
ALE=1;
Address7_0=0x55;
ALE=0;
Address15_8=0x55;
Delay1us(20);
Sst39vf040_We=0;
DataOut=0x80;
Delay1us(20);
Sst39vf040_We=1;
Delay1us(20);
Sst39vf040_We=0;
DataOut=0xaa;
Delay1us(20);
Sst39vf040_We=1;
ALE=1;
Address7_0=0xaa;
ALE=0;
Address15_8=0x2a;
Delay1us(20);
Sst39vf040_We=0;
DataOut=0x55;
Delay1us(20);
Sst39vf040_We=1;
ALE=1;
Address7_0=0x55;
ALE=0;
Address15_8=0x55;
Delay1us(20);
Sst39vf040_We=0;
DataOut=0x10;
Delay1us(20);
Sst39vf040_We=1;
while(!Wait_Data_Pulling());
}
这个擦除程序有问题么?为何擦除不了。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>