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

📄 seprom.c

📁 Atmel 24c04 eeprom 读写程序
💻 C
字号:
		/*************************************************************
		 *				Serial EEPROM READ & WRITE					 *
		 *************************************************************/

#define 	UINT        unsigned int
#define 	UCHAR		unsigned char
#include <W77E58.H>
#include <INTRINS.H>

	sbit SCLK   = P1^5;
	sbit SDAT   = P1^4;
	sbit ALOD   = P1^2;
	sbit ACLK   = P1^1;
	sbit ADAT   = P1^0;

#define		BSTART	   {SDAT=1;SCLK=1;awhile();\
						SDAT=0;awhile();\
						SCLK=0;}

#define		BSTOP	   {SDAT=0;awhile();\
						SCLK=1;awhile();\
						SDAT=1;}

#define		BOUT(B)	   {SDAT=B;awhile();\
						SCLK=1;awhile();\
						SCLK=0;awhile();}

#define		BIN(BUF)   {SDAT=1;awhile();\
						SCLK=1;awhile();\
						BUF|=SDAT;awhile();\
						SCLK=0;}

#define		ABOUT(B)   {ACLK=1;ADAT=B;awhile();\
						ACLK=0;awhile();}

extern  bit  EEWRDIS,EEBLANK; 

/****************************************************************************/
void awhile(void)
{
	_nop_();
	_nop_();
	_nop_();
}

/*****************************************************************************/
void ee_write(UINT xdata *dp,UINT addr,UCHAR n)
{
	UCHAR i;
	
	do{
		while(EEWRDIS);
		i=addr>>8;
		i=(i & 0x07)<<1;
		BSTART
		transmit(0xa0|i);
		transmit((UCHAR)addr);
		for(i=0;i<8;i++)
		{
			if(n){
				transmit(*dp);
				transmit(*dp>>8);
				dp++;n--;
			}
			else
				break;
		}
		BSTOP
		EEWRDIS=1;
		addr+=16;
	}while(n);
}

void ee_write_char(UCHAR *dp,UINT addr,UCHAR n)
{
	UCHAR i;
	
	do{
		while(EEWRDIS);
		i=addr>>8;
		i=(i & 0x07)<<1;
		BSTART
		transmit(0xa0|i);
		transmit((UCHAR)addr);
		for(i=0;i<16;i++)
		{
			if(n){
				transmit(*dp);
				dp++;n--;
			}
			else
				break;
		}
		BSTOP
		EEWRDIS=1;
		addr+=16;
	}while(n);
}

void protect(UINT xdata *dp,UINT addr)
{
	UCHAR i;
	
	while(EEWRDIS);
	i=addr>>8;
	i=(i & 0x07)<<1;
	BSTART
	transmit(0xa0|i);
	transmit((UCHAR)addr);
	for(i=0;i<8;i++)
	{
		transmit(*dp);
		transmit(*dp>>8);
		dp++;
	}
	BSTOP
}

UCHAR ee_read(UINT xdata *dp,UINT addr,UCHAR n)
{
	data UCHAR i;
	
	while(EEWRDIS);
	i=addr>>8;
	i=(i & 0x07)<<1;
	BSTART
	transmit(0xa0|i);
	transmit((UCHAR)addr);
	BSTART
	transmit(0xa1|i);
	for(i=0;i<n;i++)
	{
		*dp=receive(1);
		*dp|=receive(1)<<8;
		dp++;
	}
	receive(0);
	BSTOP
	return((UCHAR)*(dp-n) & (UCHAR)(*(dp-n)>>8));
}

UCHAR ee_read_char(UCHAR *dp,UINT addr,UCHAR n)
{
	UCHAR i;
	
	while(EEWRDIS);
	i=addr>>8;
	i=(i & 0x07)<<1;
	BSTART
	transmit(0xa0|i);
	transmit((UCHAR)addr);
	BSTART
	transmit(0xa1|i);
	for(i=0;i<n;i++)
	{
		*dp=receive(1);
		dp++;
	}
	receive(0);
	BSTOP
	return(*(dp-n));
}

/*************************************************************************/
void dac5620(UINT sd,UCHAR ch)
{
	data UCHAR i;
	
	ch<<=6;
	if(sd>>8){
		ch|=0x20;sd>>=1;}
	i=3;
	do{
		ch<<=1;ABOUT(CY)
	}while(--i);
	i=8;ch=sd;
	do{
		ch<<=1;ABOUT(CY)
	}while(--i);
	ALOD=0;
	awhile();
	ALOD=1;
}

⌨️ 快捷键说明

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