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

📄 dvs-eeprom.c

📁 电话报警主机AT89S52单片机并带有网络模块通信协议
💻 C
字号:
//dvs-eeprom.C
//===========================================================================================
//24c02用于存放开机密码和本机编码
//0,1开机标致,23456是密码 (6为设置标致)
//7振铃次数的设置标致的地址
//8为警笛时间定时
//9球机定时间地址
//10   315解码后的首地址

//46   防区标志首地址
//55   电话号码,每组号码20位,每组第1位为设置标致位
//===========================================================================================
#include "DVS-V1.0.H"
#include   <intrins.h> 

bit ErrorBit ;												//读写错误标志  ,1错误  0 正确 

//========================================== 函数定义 ========================================
void Delay1Ms(unsigned int auc_time);						//延时1ms*auc_time
void WrEEPROM(unsigned char address,unsigned char indata);	//写EEPROM
unsigned char RdEEPROM(unsigned char address);				//读EEPROM
//============================================================================================



//============================================================================================
//语法格式:Delay1Ms
//实现功能:延时1ms*auc_time
//参数:	需要延时的时间
//1表示1ms
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void Delay1Ms(unsigned int auc_time)
{
	unsigned int idata luc_i,luc_j;
	for(luc_j = 0 ;luc_j < auc_time ; luc_j++)
	{
		for(luc_i=0;luc_i<310;luc_i++)
		{
		//	ClearWatchDog();
		}
	}
}





//============================================================================================
//语法格式:Delay4us
//实现功能:延时4us
//参数:	无
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void Delay4Us()
{
	unsigned char idata luc_i;
	for(luc_i=0;luc_i<8;luc_i++)
	{
		;
		//ClearWatchDog();
	}
}




//============================================================================================
//语法格式:Start()
//实现功能:EEPROM读写的开始
//参数:	无
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void Start()
{
	EEROM_SCL=0;											//低电平改变DA线
	EEROM_SDA=1;
	EEROM_SCL=1;
	Delay4Us();
	EEROM_SDA=0;
	Delay4Us();
	EEROM_SCL=0;
}






//============================================================================================
//语法格式:Stop()
//实现功能:EEPROM读写的停止
//参数:	无
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void Stop()
{
	EEROM_SCL=0;
	EEROM_SDA=0;
	EEROM_SCL=1;
	Delay4Us();
	EEROM_SDA=1;
	Delay4Us();
	EEROM_SCL=0;
}



//============================================================================================
//语法格式:RdOperation()
//实现功能:EEPROM读1字节
//参数:	无
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
unsigned char RdOperation(void)
{
	unsigned char idata luc_time;						// 一个字节
	unsigned char idata luc_DataIn=0;					// 读进来的数据
	for(luc_time=0;luc_time<8;luc_time++)
	{
		EEROM_SCL=0;
		Delay4Us();
		EEROM_SCL=1;
		Delay4Us();
		luc_DataIn=(luc_DataIn<<1)|EEROM_SDA;
	}
	EEROM_SCL=0;
	Delay4Us();
	EEROM_SDA=1;
	Delay4Us();
	EEROM_SCL=1;
	return luc_DataIn;
}

//============================================================================================
//语法格式:WrOperation()
//实现功能:EEPROM写1字节
//参数:	写入的数
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void WrOperation(unsigned char DataOut)
{
	unsigned char idata luc_i ;						//一个字节 
	for(luc_i = 0 ; luc_i < 8 ; luc_i ++)   
	{   
		EEROM_SDA   =   DataOut   &   0x80;                 //送数据到数据线上   
		DataOut   <<=   1;   
		_nop_();                 
		EEROM_SCL   =   1;                                     //置时钟信号为高电平,使数据有效   
		Delay4Us();          
		EEROM_SCL   =   0;   
		_nop_();   
		_nop_();                   
	}   
	EEROM_SDA   =   1;   
	_nop_();   
	_nop_();   
	EEROM_SCL   =   1;   
	Delay4Us();    
	ErrorBit   =   EEROM_SDA;   
	EEROM_SCL   =   0;             
}

//============================================================================================
//语法格式:WrEEPROM()
//实现功能:	写EEPROM
//参数:	
//address 写入的地址
//indata  写入的数据
//返回值:	无
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void WrEEPROM(unsigned char address,unsigned char indata)
{
	//ClearWatchDog();
	Start();									//开始
	WrOperation(0xa0);							//写器件地址
	WrOperation(address);						//写EEPROM地址
	WrOperation(indata);						//写数据
	Stop();										//停止
	Delay1Ms(8);								//延时,EEPROM内部操作
	while(0);
}

//============================================================================================
//语法格式:RdEEPROM(
//实现功能:	读EEPROM
//参数:	
//address 	读出的地址
//返回值:	读出的数据
//创建时间:2008-12-01          修改时间:
//创建人员:                    修改人员:
//============================================================================================
unsigned char RdEEPROM(unsigned char address)
{
	unsigned char idata luc_x;
	//ClearWatchDog();
	Start();
	WrOperation(0xa0);							//写器件地址
	WrOperation(address);
	Start();
	WrOperation(0xa1);							//写EEPROM地址(读)
	luc_x=RdOperation();
	Stop();
	return luc_x;
}

⌨️ 快捷键说明

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