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

📄 at24c512.c

📁 开发c51系列产品
💻 C
字号:
#include <AT24C512.h>

void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr);
void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst);
void ByteWrite24C512(unsigned int ADDR,unsigned char Data);
unsigned char ByteRead24C512(unsigned int ADDR);
void IICWriteByte(unsigned char sendbyte);
void IICWriteByte(unsigned char sendbyte);
unsigned char IICReadByte(void);
void IICStart(void);
void IICStop(void);
void IICAck(void);
void Noack(void);

void _Nop()		//延时1us
{
	unsigned char i=1;
	while(i--);
}
/*******************页面写数据*********************/
/*void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr)
{
	int i;
	// WP=0;_nop_();_nop_();_nop_();_nop_();
	IICStart();
	IICWriteByte(0xa0);
	IICWriteByte(highaddress);
	IICWriteByte(lowaddress);
	for(i=0;i<5;i++) 
	   { IICWriteByte(*psr++); }
	IICStop();
	// WP=1;
}*/
/*******************页面读数据********************/
/*void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst)
{
	int i;//WP=0;
	IICStart();
	IICWriteByte(0xa0);
	IICWriteByte(highaddress);
	IICWriteByte(lowaddress);
	IICStart();
	IICWriteByte(0xa1);
	for(i=0;i<5;i++)
	{
	   *dst++=IICReadByte();
	   if(i<4) IICAck();
	   else Noack();
	}
	IICStop();
	// WP=1;
}*/
/*******************随机写数据*********************/
void ByteWrite24C512(unsigned int ADDR,unsigned char Data)
{
	IICStart();
	IICWriteByte(0xa0);
	IICWriteByte((ADDR&0xFF00)>>8);		//高位地址
	IICWriteByte(ADDR&0x00FF);		//低位地址
	IICWriteByte(Data);
	IICStop();
	// Delay2(10000);
}
/**********************随机读数据**********/
unsigned char ByteRead24C512(unsigned int ADDR)
{
	unsigned char ReadByte;
	IICStart();
	IICWriteByte(0xa0);
	IICWriteByte((ADDR&0xFF00)>>8);
	IICWriteByte(ADDR&0x00FF);
	IICStart();
	IICWriteByte(0xa1);
	ReadByte=IICReadByte();
	IICStop();
	return(ReadByte);
}
/*******************向IIC总线写数据*********************/
void IICWriteByte(unsigned char sendbyte)
{
	unsigned char j;
	// SCL=0;
	for(j=8;j>0;j--)
	{	
		sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
		SDA=CY;  
		_Nop(); 
		SCL=1;
		_Nop();
		SCL=0;   
	}
	SDA=1;
	_Nop();
	SCL=1;
	while(SDA);
	SCL=0;
}
/**********************从IIC总线上读数据子程序**********/
unsigned char IICReadByte(void)
{
	unsigned char receivebyte=0,i=8;
	// SCL=0;
	SDA=1;
	for(i=0;i<8;i++)
	{   
		receivebyte=(receivebyte<<1)|SDA;
		SCL=1;
		SCL=0;
	}
	SDA=1;SCL=0;
	return(receivebyte);
}
/*****************启动总线**********************/
void IICStart(void)
{
	SDA=1;   /*发送起始条件的数据信号*/
	_Nop();
	SCL=1;
	_Nop();    /*起始条件建立时间大于4.7us,延时*/
	_Nop();
	_Nop();
	_Nop();
	_Nop();    
	SDA=0;   /*发送起始信号*/
	_Nop();    /* 起始条件锁定时间大于4μs*/
	_Nop();
	_Nop();
	_Nop();
	_Nop();       
	SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
	_Nop();
	_Nop();
	_Nop();
	_Nop();
}
/*****************停止IIC总线****************/
void IICStop(void)
{
	SDA=0; /*发送结束条件的数据信号*/
	_Nop();   /*发送结束条件的时钟信号*/
	SCL=1; /*结束条件建立时间大于4μs*/
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SDA=1; /*发送I2C总线结束信号*/
	_Nop();
	_Nop();
	_Nop();
	_Nop();
}
/*void IICAck(void)
{
	SDA=0;_Nop();_Nop();_Nop();_Nop();
	SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();
	SCL=0;_Nop();_Nop();
	// SDA=1;_nop_();
}
void Noack(void)
{
	SDA=1;_Nop();_Nop();_Nop();_Nop();
	SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();
	SCL=0;_Nop();_Nop();
}*/

⌨️ 快捷键说明

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