导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→用过W29C040的进来看一下我的程序啊[原创][ajaxyynuaa]

 *第32813篇: 用过W29C040的进来看一下我的程序啊[原创]

  
楼 主:ajaxyynuaa 2005年7月5日17:15
 用过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的读写程序,从理论看,怎么也找不出错误所在,不知道是不是跟时序有关系,错误叫我非常莫名其妙

  
2楼:wjb444 2005年11月7日21:47
 你这样当然不行啦!
sst 39sf040不能这样写的,它只能把1-->  0,而不能0-->  1,只能先把一个块(4k)或整个芯片都擦掉,才能写进去的.
     还有你这样的接法也不行,对flash操作的时序很重要,只要你把线接对,就不用自己控制片选及读写了,你去看看汇编的单片机书就知道了,一句movx指令就会使ale,psen,wr,rd自动改变的

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:这里没有用过W29C040并且成功的呀?[原创]

[下一篇主题]:请教一下用PROTEL99SE 怎样覆铜,谢谢