📄 at45db081.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 + -