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

📄 93c46.c

📁 93C46 EEPROM的读写程序
💻 C
字号:
#include <reg51.h>
#include <intrins.h>

#define	UCHAR unsigned char
#define	UINT unsigned int

#define	NOP()	_nop_()
#define	NOP_2()	{NOP();NOP();}
#define	NOP_5()	{NOP_2();NOP_2();NOP();}

sbit	LED=P2^7;

sbit	AT93C46_CS=P2^0;
sbit	AT93C46_CLK=P2^1;
sbit	AT93C46_DI=P2^2;
sbit	AT93C46_DO=P2^3;


#define	OPCODE_READ		0x80
#define	OPCODE_WRITE	0x40
#define	OPCODE_ERASE	0xC0
#define	OPCODE_EWEN		0x30
#define	OPCODE_EWDS		0x00
#define	OPCODE_ERAL		0x20
#define	OPCODE_WRAL		0x10

UINT AT93C46_READ(UCHAR ADDRESS)
{
	UCHAR i;
	UCHAR Command;
	UINT  ReadData;

	AT93C46_CS=0;
	AT93C46_CLK=0;
	AT93C46_DI=1;
	AT93C46_CS=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;

	Command=OPCODE_READ+ADDRESS;
	for(i=0;i<8;i++)
	{
	if(Command&0x80)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	Command<<=1;	
	}

	ReadData=0;
	for(i=0;i<16;i++)
	{
	ReadData<<=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	AT93C46_DO=1;
	if(AT93C46_DO)
		ReadData++;
	}
	AT93C46_CS=0;
	return	 ReadData;
}

void AT93C46_WRITE(UCHAR ADDRESS,UINT DAT)
{
	UCHAR i;
	UCHAR Command;

	AT93C46_CS=0;
	AT93C46_CLK=0;
	AT93C46_DI=1;
	AT93C46_CS=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;

	Command=OPCODE_WRITE+ADDRESS;

	for(i=0;i<8;i++)
	{
	if(Command&0x80)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	Command<<=1;
	}

	for(i=0;i<16;i++)
	{
	if(DAT&0x8000)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	DAT<<=1;		
	}

	AT93C46_CS=0;
	NOP_5();
	AT93C46_CS=1;
	AT93C46_DO=1;
	while(!AT93C46_DO);
	AT93C46_CS=0;	
}

void AT93C46_ERASE(UCHAR ADDRESS)
{
	UCHAR i;
	UCHAR Command;

	AT93C46_CS=0;
	AT93C46_CLK=0;
	AT93C46_DI=1;
	AT93C46_CS=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	
	Command=OPCODE_ERASE+ADDRESS;
	for(i=0;i<8;i++)
	{
	if(Command&0x80)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	Command<<=1;
	}
	
	AT93C46_CS=0;
	NOP_5();
	AT93C46_CS=1;
	AT93C46_DO=1;
	while(!AT93C46_DO);
	AT93C46_CS=0;	
}

void AT93C46_EWENDIS(bit EWFlag)
{
	UCHAR i;
	UCHAR Command;

	AT93C46_CS=0;
	AT93C46_CLK=0;
	AT93C46_DI=1;
	AT93C46_CS=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	
	if(EWFlag)
		Command=OPCODE_EWEN;
	else
		Command=OPCODE_EWDS;

	for(i=0;i<8;i++)
	{
	if(Command&0x80)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	Command<<=1;
	}
	AT93C46_CS=0;
}

void AT93C46_ERASEALL(void)
{
	UCHAR i;
	UCHAR Command;

	AT93C46_CS=0;
	AT93C46_CLK=0;
	AT93C46_DI=1;
	AT93C46_CS=1;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	
	Command=OPCODE_ERAL;
	for(i=0;i<8;i++)
	{
	if(Command&0x80)
		AT93C46_DI=1;
	else
		AT93C46_DI=0;
	AT93C46_CLK=1;
	NOP_5();
	AT93C46_CLK=0;
	Command<<=1;
	}
	
	AT93C46_CS=0;
	NOP_5();
	AT93C46_CS=1;
	AT93C46_DO=1;
	while(!AT93C46_DO);
	AT93C46_CS=0;	
}

void main(void)
{
	UINT	i,j=10;

	while(j--)
	{
	LED=0;
	for(i=0;i<5000;i++);
	LED=1;
	for(i=0;i<3000;i++);
	}

	AT93C46_EWENDIS(1);

	AT93C46_ERASEALL();

	AT93C46_ERASE(1);

	AT93C46_WRITE(1,0x5656);

   	if(AT93C46_READ(1)==0x5656)
		LED=0;
	while(1);
}

⌨️ 快捷键说明

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