⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at45db081.h

📁 Flash 存储器
💻 H
字号:
/*======================45DB081管脚定义============================*/
sbit AT45D_CS  = P3^0;
sbit AT45D_SCK = P3^1;
sbit AT45D_SI  = P3^2;
sbit AT45D_SO  = P3^3;

void delay(unsigned char i)
{
 while(i--);
}
/*-------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------*/
SPI_WriteBits(unsigned char byte,unsigned char num_of_bits)
{
  unsigned char count;
  byte=byte<<(8-num_of_bits);
 for(count=0;count<num_of_bits;count++)
   { AT45D_SCK=0;
       byte<<=1;
     AT45D_SI=CY;

     AT45D_SCK=1;

    }
}

// SPI_SK下降沿数据有效 -\_
unsigned char SPI_ReadByte()
{
  unsigned char count,byte;
  for(count=0;count<8;count++)
     {  AT45D_SCK=1;

          byte<<=1;
        AT45D_SCK=0;

        if(AT45D_SO) byte++;

     }
  return(byte);
}


//Main Memory Page to Buffer 1 Transfer
void PageToBuffer1(unsigned int page)
{
  AT45D_SCK=1;  //??  start


  AT45D_CS=0;  //start

//send  8  bit opcode, Main Memory Page to Buffer 1 Transfer: 0x53
  SPI_WriteBits(0x53,8);

// fill 3 sk,don't care.
  SPI_WriteBits(0x00,3);

//send  12 bit address to 45D081
       SPI_WriteBits( (unsigned char)(page>>8) , 4 );
       SPI_WriteBits( (unsigned char)(page)    , 8 );

// fill 9 sk,don't care.
       SPI_WriteBits( 0x00 , 4 );
       SPI_WriteBits( 0x00 , 5 );

//total 32 bit
  AT45D_CS=1;  //  end
  delay(200);

}

//
unsigned char ReadDataFromBuffer1(unsigned int address)
{
 unsigned char i;
  AT45D_SCK=1;  //??  start


  AT45D_CS=0;  //start

//send  8  bit opcode:0x54
  SPI_WriteBits(0x54,8);

// fill 15 sk,don't care.
  SPI_WriteBits(0x00,8);
  SPI_WriteBits(0x00,7);

//send  9 bit address to 45D081 buffer1
       SPI_WriteBits( (unsigned char)(address>>8) , 1 );
       SPI_WriteBits( (unsigned char)(address)    , 8 );

//fill 8 bits blank
       SPI_WriteBits( 0x00 , 8 );

// receive data
       i=SPI_ReadByte() ;

AT45D_CS=1;  //  end
 return(i);
}



//Write Buffer 1 to Main Memory Page Program with Built-In Erase

void Buffer1toPage(unsigned int page)
{
  AT45D_SCK=1;  //??  start


  AT45D_CS=0;  //start

//send  8  bit opcode, Buffer 1 to Main Memory Page: 0x83
  SPI_WriteBits(0x83,8);

// fill 3 sk,don't care.
  SPI_WriteBits(0x00,3);

//send  12 bit address to 45D081
       SPI_WriteBits( (unsigned char)(page>>8) , 4 );
       SPI_WriteBits( (unsigned char)(page)    , 8 );

// fill 9 sk,don't care.
       SPI_WriteBits( 0x00 , 4 );
       SPI_WriteBits( 0x00 , 5 );

//total 32 bit
  AT45D_CS=1;  //  end

  delay(200);
}

//

void WriteDataToBuffer1(unsigned int address,unsigned char dat)
{
  AT45D_SCK=1;  //??  start


  AT45D_CS=0;  //start

//send  8  bit opcode, Data to Buffer 1 : 0x84
  SPI_WriteBits(0x84,8);

// fill 15 sk,don't care.
  SPI_WriteBits(0x00,8);
  SPI_WriteBits(0x00,7);

//send  9 bit address to 45D081 buffer1
       SPI_WriteBits( (unsigned char)(address>>8) , 1 );
       SPI_WriteBits( (unsigned char)(address)    , 8 );


// send 8 bit dat to buffer1
       SPI_WriteBits( dat , 8 );

   AT45D_CS=1;  //  end

   delay(200);
}

//从45D里读一个字

 unsigned int ReadIntFromAT45D(unsigned int page,unsigned char addr)
{
  unsigned int m;
  unsigned char a;
  PageToBuffer1(page);
  a=ReadDataFromBuffer1(addr);
  m=a;
  m<<=8;
  a=ReadDataFromBuffer1(addr+1);
  m=m+a;
  return(m);
}


//向45D里写一个字

void WriteIntToAT45D(unsigned int page,unsigned char addr,unsigned int a)
{
//  unsigned  int Mark;
  unsigned char m;
  PageToBuffer1(page);
  m=(char)a;
  WriteDataToBuffer1(addr+1,m);
  m=(char)(a>>8);
  WriteDataToBuffer1(addr,m);
  Buffer1toPage(page);
}

//从45D里读一个字节
unsigned char ReadCharFromAT45D(unsigned int page,unsigned char addr)
{
  unsigned char a;
  PageToBuffer1(page);
  a=ReadDataFromBuffer1(addr);
  return(a);
}


//向45D里写一个字节
void WriteCharToAT45D(unsigned int page,unsigned char addr,unsigned int a)
{
 // unsigned  char Mark;
//  unsigned char m;
  PageToBuffer1(page);
  WriteDataToBuffer1(addr,a);
  Buffer1toPage(page);
 }
 //以页为单位写入数据
 void W_Page(unsigned int page,unsigned char count,unsigned int *dat)
 {
  unsigned char i;
  for(i=0;i<count;i++)
     WriteIntToAT45D(page,i,*(dat+i));
 }
  //以页为单位读出数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -