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

📄 93c66try

📁 93C46/66的读写程序
💻
字号:
#include <AT89X52.h>
#include <ABSACC.h>
sbit CS_93c66=P2^3;
sbit SK_93c66=P2^2;
sbit DI_93c66=P2^1;
sbit DO_93c66=P2^0;
sbit CD_1=P2^4;
sbit CD_2=P2^5;
sbit CD_3=P2^6;
sbit CD_4=P2^7;
void START_93c66();
void END_93c66();
void EWEN_93c66();
void EWDS_93c66();
unsigned char READ(unsigned int);
unsigned char WRITE(unsigned int,unsigned int);
void SEND_DATA_93c66(unsigned int,unsigned char);
void delay1(unsigned int);
unsigned char Addr_bit=7;//--------------------------46设为7,66设为9----------------------------
/*
void write_93c66(unsigned char page,unsigned int position)
{
	unsigned char page_0;
	unsigned int page_address;
	page_address=361;
	WRITE(position,page);
	page_0=READ(page_address);
if(page_0!=page)
	{
		WRITE(page_address,page);
	}

}
void store(unsigned char hh,mm,ss)
{
//	ss=0x30;
//	mm=0x31;
//	hh=0x32;
	unsigned int sum,sum_min,position;
	unsigned char page;
	sum=hh*3600+mm*60+ss;
	sum_min=hh*60+mm;
	page=sum_min/6;
	position=sum%360;
	write_93c66(page,position);
}

unsigned int READ_STATE()
{
	unsigned int state;
	unsigned char n;
	unsigned char hh,mm,ss;
	unsigned char page,position_num;
	unsigned int position,sum;
	page=READ(361);
	
	for(n=0;n<360;n++)
		{
		position=n;
		position_num=READ(n);	
		if(position_num!=page)
			{
			break;
			}
		}
	sum=page*6*60+position;
	hh=sum/3600;
	mm=(sum/60)%60;
	ss=sum%60;
	state=0;
	state=state|hh;
	state=state<<6;
	state=state|mm;
	state=state<<6;
	state=state|ss;
	return state;
}

*/
void main()
{
//	store(1,10,10);//call the sub to write data in 9346
//	READ_STATE();
unsigned int n,tmp;
/*
P0=0xff;
for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
{
if(!WRITE(n,n))
	{
	CD_3=0;
	P0=0x65;
	while(1)
	{};
	}
}
while(1)
	{
	for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
		{
		tmp=(n<<1);
		CD_2=1;
		CD_1=0;
		P0=READ(n);
		delay1(60000);
		CD_1=1;
		CD_2=0;
		P0=tmp;
		delay1(60000);
		}
	}
*/
CD_1=0;
while(1)
{
for(n=0;n<0x1ff;n++)
{P0=(READ(n)<<1);
delay1(30000);}
}
}
//-----------------------------------------------------COPY--------------------------------------------
//2 .用C51 软件包对CAT93c66 器件进行读写操作
//(1 )CAT93c66 的汇编读写软件包
/*=========================================================*/
/* CSI93c66 操作子程序 */
/* 注意:这里使用的CSI93c66 为8 位结构的EEROM
*/
/*=========================================================*/
//#include <Reg764.h>
/*87LPC764 的头文件*/
void delay1(unsigned int num)
{
	while(num!=0){num=num-1;}
}
/***********************************************************************/
/*名称: START_93c66() */
/*说明: 用于93c66 的启动,防止由于CS_93c66 的改动而引起数据时序混乱 */
/***********************************************************************/
void START_93c66()
{
	DO_93c66=1; /*防止DO 由于是低电平而无法输入*/
	CS_93c66=1;
	/*开启93c66*/
	CS_93c66=0;
	DI_93c66=0;
	SK_93c66=0;
	CS_93c66=1;
	delay1(1000);
}
/***************************************************************************/
/*名称:END_93c66() */
/*说明:用于93c66 的结束,防止由于CS_93c66 的改动而引起数据线为0 而无法输入*/
/***************************************************************************/
void END_93c66()
{
	CS_93c66=0;
	DI_93c66=1;
	SK_93c66=1;
}
/***********************************************************************/
/*名称:SEND_DATA_93c66() */
/*说明:在93c66 启动下,送入指定位数的数据 */
/*输入: op_data 要输入的数据 */
/* num 输入的位数 */
/**********************************************************************/
void SEND_DATA_93c66(unsigned int op_data,unsigned char num)
{
	unsigned char temp1;
	op_data=op_data<<(16-num); /*左移去掉无用位*/
	for(temp1=0;temp1<num;temp1++)
		{
		if( (op_data&0X8000)==00 )
			{DI_93c66=0;}
		else
			{DI_93c66=1;}
		SK_93c66=1;//SK_93c66=1;SK_93c66=1;SK_93c66=1;
		SK_93c66=0;
		op_data=op_data<<1;
		}
}
/***********************************************************************/
/*名称: EWEN_93c66() */
/*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
/***********************************************************************/
void EWEN_93c66()
{
	START_93c66();
	SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
	SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
	END_93c66();
}
/***********************************************************************/
/*名称: EWDS_93c66() */
/*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
/**********************************************************************/
void EWDS_93c66()
{
	START_93c66();
	SEND_DATA_93c66(0X0004,0X03);
	SEND_DATA_93c66(0X0000,Addr_bit);
	END_93c66();
}
/***********************************************************************/ /*名称:READ() */
/*说明:93c66 的字读取程序 */
/*输入:要读取的字节地址(9 位) */
/*输出:读取的字数值 */
/**********************************************************************/
unsigned char READ(unsigned int address)
{
	unsigned char temp1;
	unsigned char temp2;
	START_93c66();
	SEND_DATA_93c66(0X0006,0X03);
	SEND_DATA_93c66(address,Addr_bit);
	temp2=0; /*存放返回数据的缓冲先清零*/
	for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
		{
		temp2=temp2<<1;
		SK_93c66=1;SK_93c66=0;
			if(DO_93c66==1)
				{temp2=temp2|0X01;}
		}
		END_93c66();

		return temp2;
}
/**********************************************************************/
/*名称:WRITE() */
/*说明:93c66 的字写入程序 */
/*输入: address 要写入的字节地址(9 位) */
/* op_data 要写入的数据(8 位) */
/*输出: 读取的字数值 */
/**********************************************************************/
unsigned char WRITE(unsigned int address,unsigned int op_data)
{
	unsigned char temp1;
	unsigned int temp2;
	EWEN_93c66();
	START_93c66();
	SEND_DATA_93c66(0X0005,0X03);
	SEND_DATA_93c66(address,Addr_bit);
	SEND_DATA_93c66(op_data,0X08);
	CS_93c66=0;
	CS_93c66=1;
	temp1=1;
	temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
	while(!DO_93c66)
		{
		temp2=temp2-1;
		if(temp2==0)
			{
			temp1=0;//temp1=0则写入失败
			break; /*最大等待延时后说明擦除失败*/
			}
		}
	END_93c66();
	EWDS_93c66();

	return temp1;
}
/***********************************************************************/
/*名称:ERASE() */
/*说明:93c66 的字擦除程序 */
/*输入: address 要擦除的字地址(9 位) */
/**********************************************************************/
/*
unsigned char ERASE(unsigned char address)
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93c66();
START_93c66();
SEND_DATA_93c66(0X07,0X03);
SEND_DATA_93c66(address,0X06);
CS_93c66=0;
CS_93c66=1;
temp1=1;
temp2=50000;
while(!DO_93c66)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93c66();
EWDS_93c66(); //返回表示擦除状态的特征
return temp1;
}
*/


/**********************************************************************/
/*名称:ERAL() */
/*说明:93c66 的全部擦除程序 */
/**********************************************************************/
/*
unsigned char ERAL()
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93c66();
START_93c66();
SEND_DATA_93c66(0X04,0X03);
SEND_DATA_93c66(0X20,0X06);
CS_93c66=0;
CS_93c66=1;
temp1=1;
temp2=50000;
while(!DO_93c66)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93c66();
EWDS_93c66(); //返回表示擦除状态的特征
return temp1;
}
*/


/***********************************************************************/
/*名称:WRAL() */
/*说明:93c66 的写全部程序 */
/*输入: op_data 要写入的数据(16 位) */
/*输出: 读取的字数值 */
/***********************************************************************/
/*
unsigned char WRAL(unsigned int op_data)
{data unsigned char temp1;
data unsigned int temp2;
EWEN_93c66();
START_93c66();
SEND_DATA_93c66(0X04,0X03);
SEND_DATA_93c66(0X10,0X06);
SEND_DATA_93c66(op_data,0X10);
CS_93c66=0;
CS_93c66=1;
temp1=1;
temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
while(!DO_93c66)
{temp2=temp2-1;
if(temp2==0)
{temp1=0;
break;
}
}
END_93c66();
EWDS_93c66();
return op_data;
}

*/

⌨️ 快捷键说明

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