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

📄 24cxx.h

📁 用于单片机读写24系列存储器的程序
💻 H
字号:
#define 	W24C02		0xA0	//存储器的写地址
#define     R24C02		0xA1	//存储器的读地址
#define     MSB       0x80		//8位二进制最高位置1
#define     LSB       0x01		//8位二进制最低位置1


/********************/
sbit SDA=P3^6;	//AT24C02串行数据				5脚 
sbit SCL=P3^7;	//AT24C02串行时钟				6脚



void I2C_write(unsigned char tmp);		//向I2C总线写数据
unsigned char I2C_read();				//向I2C总线读数据
void I2C_ACK(bit tmp);					//ACK应答
void I2C_start(void);					//I2C传送数据的开始
void I2C_stop(void);					//I2C传送数据的结束

void DelayQuarter()
{
	_nop_();_nop_();_nop_();_nop_();_nop_();
}

static void AssertClock(void)
{
    DelayQuarter();
    SCL=1;
    while (!(SCL!=0)) {
       /* Wait if a slave is stretching the clock (holding it low). */
    }
    DelayQuarter();
}


void I2C_write(unsigned char tmp)//I2C写入一个8位二进制数,高位在前低位在后
{
	unsigned char i;
	for(i=0;i<8;i++){
		SCL=0;
		_nop_();
		_nop_();
		_nop_();
		SDA=(bit)(tmp&0x80);
		tmp<<=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();		
		SCL=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();		
	}
	SCL=0;
}
unsigned char I2C_read(void)////I2C读取一个8位二进制数,也是高位在前低位在后
{
	unsigned char i,tmp;
	tmp=0;
	for(i=0;i<8;i++){
		SCL=0;
		_nop_();
		_nop_();
		_nop_();			//加入空指令增加稳定性,这关系到频率问题
		SDA=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();
		SCL=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();
		tmp<<=1;
		if(SDA==1)
			tmp++;
	}
	SCL=0;
	return tmp;		
		
}
void I2C_ACK(bit tmp)		//根据tmp的1、0来决定应答信号
{
	SDA=tmp;		
	 _nop_();_nop_();_nop_();_nop_();_nop_();
	 SCL=1;	
	 _nop_();_nop_();_nop_();_nop_();_nop_();
	 SCL=0;		
}
void I2C_start(void)		//看看I2C开始的波形,再对应SDA、SCL的输出
{
	 SDA=1;		
	 _nop_();
	 SCL=1;  	
	 _nop_();
	 SDA=0;	
	 _nop_();
	 SCL=0;		
	 _nop_();
}

/*********/
void I2C_stop(void)		//I2C结束
{
	 SDA=0;		
	 _nop_();
	 SCL=1;		
 	 _nop_();
	 SDA=1;		
	 _nop_();
	 SCL=0;		
	 _nop_();
}


void Page_write(unsigned char add,unsigned char len,unsigned char *buf)
{
	unsigned char i;
	I2C_start();
	I2C_write(W24C02);
	I2C_ACK(0);
	I2C_write(add);	
	I2C_ACK(0);
	
	for(i=0;i<len;i++)
	{
		I2C_write(buf[i]);	
		if(i==len-1)
			I2C_ACK(0);
		else 
			I2C_ACK(0);	 			
	}
	I2C_stop();	 
}

⌨️ 快捷键说明

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