导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助:STC单片机读写W29c011A的问题,请大家帮忙

* 66080: 求助:STC单片机读写W29c011A的问题,请大家帮忙

   qhzhou0818 
qhzhou0818发表的帖子 

 求助:STC单片机读写W29c011A的问题,请大家帮忙
//晶振22.1184M
//STC89C58RD+
#include " " 
#define uchar unsigned char
 #define uint  unsigned int  
#define RAM_ADDR  0x0000 //外部ram 首地址 
 #define FLASH_ADDR  0x8000    //flash 首地址
  sbit CE=P2^7; 
void select_segment(uchar seg) 

     P1&=0xfc;
     switch(seg) 
     { 
        case 0: P1|=0x00; break; // 29c011 a16a15= 00 00000-0ffff 
        case 1: P1|=0x01; break; // 29c011 a16a15= 01 10000-1ffff 
        case 2: P1|=0x02; break; // 29c011 a16a15= 10 20000-2ffff 
        case 3: P1|=0x03; break; // 29c011 a16a15= 11 30000-3ffff 
    } 

void erase()//整片擦除
{
     select_segment(0);/*必须写到第0段*/ 
     CE=1;
     XBYTE[0xd555]=0xaa; 
     XBYTE[0xaaaa]=0x55; 
     XBYTE[0xd555]=0x80; 
     XBYTE[0xd555]=0xAA;
     XBYTE[0xaAAA]=0x55;  
     XBYTE[0xd555]=0x10; 
     CE=0;
     Delay_ms(20);
     _nop_();

void protect() //解除保护

     select_segment(0);/*必须写到第0段*/  
     CE=1;
     XBYTE[0x5555+0x8000]=0xaa; //p2.7脚为芯片w29c011a使能信号,高电平有效
     XBYTE[0x2aaa+0x8000]=0x55; 
     XBYTE[0x5555+0x8000]=0xa0; 
     CE=0; 
}
void write_data(uint m_addr,uint s_sector,uint acount) //写数据

     u int data addraa; /* addraa 为内存地址,addrbb 为29C040地址 */ 
     u int data i,j;  
     bit flag;
     addraa=m_addr;   
     for(j=acount;j>  0;j--) 
     { 
      CE=1;             //?
     select_segment(s_sector/256);
     protect(); //解除保护 
     CE=1;
     for(i=0;i  <128;i++,addraa++) 
     {     
      CE=1;
       XBYTE[addraa]=i;    // 
     }
//翻转位判断写入完成  
        --addraa;
     ACC=127;
     flag=ACC^7;  
      while(1)
      {
       ACC=XBYTE[addraa];
       if(ACC^7==flag) break;
      // flag=ACC^7; 
       }  
  
     CE=0;
     s_sector++; 
     }      

void Read(uint r_addr)//读数据
{
       uchar i;
     uint Data;

     CE=1;
     _nop_();_nop_();_nop_();_nop_();_nop_();
     for(i=0;i  <128;i++)
     {
     Data=XBYTE[r_addr+i];                     //从flash中读数据
     XBYTE[RAM_ADDR+0x0200+i]=Data;  //写入ram
     }
     CE=0;
   }

void main(void)
{
   erase();
  //write_data(FLASH_ADDR,0,1);
  //Read(FLASH_ADDR);
while(1)
 {
  write_data(FLASH_ADDR,0,1);//写flash
  Read(FLASH_ADDR); //读flash
  SendtoPC();          //发给上位机 
 }
}

/*
读出来的都是FF,应该是没写进去,请大家帮忙,谢谢!
*/



发表时间:2009年4月13日0:51:12

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[求助]求ATT7022B的应用笔记急需ATT7022B的应用笔记,求求求求求求求求求求求求求求求求
[下一篇帖子]:电热管,传感器,仪表[upload=gif]uploadfile/2009-4-12_17-14-1