[求助]请教用过w29c040的高手
此主题相关图片如下:
aduc812单片机可以扩展16M,w29c040有19位地址线,中8位和高3位用锁存器锁存
原理图,这样设计有没有什么问题?
我试着只写入64k的空间,为什么写不进去呢?而且擦除也不行。不过读到可以,读出来的数据是FF和F7,不知道是不是正确的?哪位高手能不能帮我看一下。
#include <aduc812.h>
#include <stdio.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define Flash_addr(a) XBYTE[a]
void delay(uint delay_count)
{
for(;delay_count> 0;delay_count--);
}
void Erase_Flash(void)
{
Flash_addr(0x5555) = 0xaa;
Flash_addr(0x2aaa) = 0x55;
Flash_addr(0x5555) = 0x80;
Flash_addr(0x5555) = 0xaa;
Flash_addr(0x2aaa) = 0x55;
Flash_addr(0x5555) = 0x10;
delay(1200);
}
void initial(void) //串行通信的初始设置
{
IE=0x00;
SCON = 0xD0 ; // 8bit, noparity, 1stopbit
TMOD = 0x20 ; // configure Timer1..
TH1 = 0xFD ; // ..for 9600baud..
PCON=0x00;
TR1 = 1 ;
TI=1;
}
main()
{
uint addr;
initial();
Erase_Flash();
//以下为把0xBB写入到存储器中
Flash_addr(0x5555) = 0xaa;
Flash_addr(0x2aaa) = 0x55;
Flash_addr(0x5555) = 0xa0;
for(addr=0;addr <0xFFFF;addr++){
Flash_addr(addr)=0xBB;
}
delay(1200);
for(addr=0;addr <0xFFFF;addr++){
printf("data=%04BX,",Flash_addr(addr));
printf("addr=%04X\n",addr);
}
while(1);
}
发表时间:2004年10月12日14:12:06