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

📄 at45db081.c

📁 这个是我设计的采用c8051f330为核心的测温系统源码
💻 C
字号:
#include "at45db081.h"


void SendSPIByte(uchar ch)//finish
{
		SPIF = 0;
		SPI0DAT = ch;
		while (SPIF == 0);	 // wait for data transfer to be completed   				       	
} 
uchar GetSPIByte(void)//finish
{
        SPIF = 0;
		SPI0DAT = 0;
		while (SPIF == 0);
		return  SPI0DAT;                   // read data from SPI
}
/*
BUFFER_1_READ
BUFFER_2_READ
*/
void FlashBufferRead(uint addr, uchar choice, uint len, uchar * buffer)//finish
{
	uint i;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte(0);
	SendSPIByte((uchar)(addr>>8));
	SendSPIByte((uchar)addr);
	SendSPIByte(0);
	for(i=0;i<len;i++)
		buffer[i]=GetSPIByte();
	DF_CHIP_NOSELECT  	
}
/*
BUFFER_1_WRITE
BUFFER_2_WRITE
*/
void FlashBufferWrite(uint addr, uchar choice, uint len, uchar * buffer)//finish
{
	uint i;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte(0);
	SendSPIByte((uchar)(addr>>8));
	SendSPIByte((uchar)addr);
	for(i=0;i<len;i++)
		SendSPIByte(buffer[i]);
	DF_CHIP_NOSELECT
}
uchar ReadStatus()//finish
{
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(STATUS_REGISTER);
	status=GetSPIByte();
	DF_CHIP_NOSELECT
	return status;
}
/*
PAGE_TO_B1_XFER
PAGE_TO_B2_XFER
*/
void PageToBuffer(uchar choice,uint page)//finish
{
	//DF_RDY_BUSY
	uchar status;
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte((uchar)(page<<1));
	SendSPIByte(0);
	DF_CHIP_NOSELECT	
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}	
}
void PageRead(uint page, uint addr, uint len, uchar * buffer)//finish
{
	uint i;
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(MAIN_MEMORY_PAGE_READ);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte(((uchar)(page<<1)|(uchar)(addr>>8)));
	SendSPIByte((uchar)(addr));
	SendSPIByte(0);
	SendSPIByte(0);
	SendSPIByte(0);
	SendSPIByte(0);
	for(i=0;i<len;i++)
		buffer[i]=GetSPIByte();
	DF_CHIP_NOSELECT
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}
	
}
/*
PAGE_TO_B1_COMP
PAGE_TO_B2_COMP
*/
bit PageToBufferComp(uchar choice, uint page)
{
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte((uchar)(page<<1));
	SendSPIByte(0);
	DF_CHIP_NOSELECT
	DF_RDY_BUSY
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}
	return (status&0x40)?1:0;
}
/*
B1_TO_PAGE_WITH_ERASE
B2_TO_PAGE_WITH_ERASE
*/
void BufferToPageWithErase(uchar choice, uint page)//finish
{
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte((uchar)(page<<1));
	SendSPIByte(0);
	DF_CHIP_NOSELECT
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}	
}
/*
B1_TO_PAGE_WITHOUT_ERASE
B2_TO_PAGE_WITHOUT_ERASE
*/
void BufferToPageWithOutErase(uchar choice, uint page)
{	
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte((uchar)(page<<1));
	SendSPIByte(0);
	DF_CHIP_NOSELECT
		status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}	
}
/*
PAGE_PROG_THROUGH_B1
PAGE_PROG_THROUGH_B2
*/
void PageProgViaBuffer(uchar choice, uint page, uint addr,uint len,uchar* buffer)
{
	uint i;
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte(((uchar)(page<<1)|(uchar)(addr>>8)));
	SendSPIByte((uchar)(addr));
	for(i=0;i<len;i++)
		SendSPIByte(buffer[i]);
	DF_CHIP_NOSELECT
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}	
}
/*
AUTO_PAGE_REWRITE_THROUGH_B1
AUTO_PAGE_REWRITE_THROUGH_B2
*/
void AutoPageRewiteViaBuffer(uchar choice, uint page)
{
	uchar status;
	//DF_RDY_BUSY
	DF_CHIP_SELECT
	SendSPIByte(choice);
	SendSPIByte((uchar)(page>>7));
	SendSPIByte((uchar)(page<<1));
	SendSPIByte(0);
	DF_CHIP_NOSELECT
	status=ReadStatus();
	while(!(status&0x80))
	{
		status=ReadStatus();
	}	
}

⌨️ 快捷键说明

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