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

📄 24lc256.c

📁 this is source file mcs51 interface with i2c eeprom c use keil
💻 C
字号:
//---------------------------------------
// 24LC256 I2C EEPROM driver
// www.GetMicro.com
//---------------------------------------
#include<reg8252.h>
#include<intrins.h>
#

#define ACK		1
#define NO_ACK	0


unsigned char i;


sbit SDA  =  P2^1;	// connect to SDA pin (Data)
sbit SCL  =  P2^0;	// connect to SCL pin (Clock)



//-------------------------------
// start I2C
//-------------------------------
void Start(void)
{
    SDA = 1;
	SCL = 1;
	_nop_();_nop_();
	SDA = 0;
	_nop_();_nop_();
	SCL = 0;
	_nop_();_nop_();
}

//-------------------------------
// stop I2C
//-------------------------------
void Stop(void)
{
	SDA = 0;	    	
	_nop_();_nop_();
	SCL = 1;
	_nop_();_nop_();
	SDA = 1;	
}

//-------------------------------
// Write I2C
//-------------------------------
void WriteI2C(unsigned char Data)
{    

	for (i=0;i<8;i++)
	{
        SDA = (Data & 0x80) ? 1:0;
		SCL=1;SCL=0;
		Data<<=1;
	}

  	SCL = 1; 
	_nop_();_nop_();
	SCL = 0;

}

//-------------------------------
// Read I2C
//-------------------------------
unsigned char ReadI2C(bit ACK_Bit)
{
    
    unsigned char Data=0;

    SDA = 1;	
	for (i=0;i<8;i++)
	{
		SCL   = 1;		
		Data<<= 1;
		Data  = (Data | SDA);		
		SCL   = 0;
		_nop_();
	}
    
 	if (ACK_Bit == 1)
	SDA = 0; // Send ACK		
	else		
	SDA = 1; // Send NO ACK				

	_nop_();_nop_();
	SCL = 1;		
	_nop_();_nop_();
	SCL = 0;
	
	return Data;
}

//-------------------------------
// Read 1 byte form I2C
//-------------------------------
unsigned char ReadBYTE(unsigned int Addr)
{
   	unsigned char Data;
	Start();
	WriteI2C(0xA0);
	WriteI2C((unsigned char)(Addr>>8)&0xFF);
	WriteI2C((unsigned char)Addr&0xFF);
	Start();
	WriteI2C(0xA1);
	Data = ReadI2C(NO_ACK);
	Stop();
   	return(Data);
}

//-------------------------------
// Write 1 byte to I2C
//-------------------------------
void WriteBYTE(unsigned int Addr,unsigned char Data)
{
	Start();
	WriteI2C(0xA0);
	WriteI2C((unsigned char)(Addr>>8)&0xFF);	// send address high
	WriteI2C((unsigned char)Addr&0xFF);			// send address low	
	WriteI2C(Data);
	Stop();	
}


⌨️ 快捷键说明

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