用过W29C040的进来看一下我的程序啊[原创]
void flash1_r(void)
{
CE1=0;
P2=count_page; //A8-A15高地址
PRT1CF=0xff; //允许D为输出
P1=addl_flash; //A0-A7低地址
LE=1;
_nop_();
LE=0; //锁存地址
PRT1CF=0x00;//允许D为输入
P1=0xff;
OE=0; //读选通
_nop_();
tempf=P1;
OE=1;
CE1=1;
}
//写数据到指向的地址
void flash1_w(void)
{
CE1=0;
P2=count_page; //A8-A15高地址
PRT1CF=0xff; //允许D为输出
P1=addl_flash; //A0-A7低地址
LE=1;
_nop_();
LE=0; //锁存地址
P1=tempf;
tempt[0]=tempf;
WE=0; //锁存地址到flash
_nop_();
WE=1; //锁存数据到flash
PRT1CF=0x00;
P1=0xff; //允许D输入
CE1=1;
}
//***************************flash1串口发送**********************
void loop(void)
{
switch(count_sec) //选择flash存储的段
{
case 0: P3 &=0xf8; break; /* 29c040 a18a17a16= 000 00000-0ffff */
case 1: P3 &=0xf9;P3 |=0x01; break; /* 29c040 a18a17a16= 001 10000-1ffff */
case 2: P3 &=0xfa;P3 |=0x02; break; /* 29c040 a18a17a16= 010 20000-2ffff */
case 3: P3 &=0xfb;P3 |=0x03; break; /* 29c040 a18a17a16= 011 30000-3ffff */
case 4: P3 &=0xfc;P3 |=0x04; break; /* 29c040 a18a17a16= 100 40000-4ffff */
case 5: P3 &=0xfd;P3 |=0x05; break; /* 29c040 a18a17a16= 101 50000-5ffff */
case 6: P3 &=0xfe;P3 |=0x06; break; /* 29c040 a18a17a16= 110 60000-6ffff */
case 7: P3 |=0x07; break; /* 29c040 a18a17a16= 111 70000-7ffff */
}
//for(addl_flash=0;addl_flash <11;addl_flash++)
//{
flash1_r();
//tempf=ACC;
//tempt[addl_flash]=tempf;
//}
if(addl_flash==0)
{
count_page++;
if(count_page==0)
count_sec++;
}
if(count_sec> 7)
{
count_sec=0;
choose=1;
}
}
这个是我flash的读写程序,从理论看,怎么也找不出错误所在,不知道是不是跟时序有关系,错误叫我非常莫名其妙
发表时间:2005年7月5日17:15:47