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

📄 24c02.c

📁 I2C总线存储器24c02驱动程序(KEIL)
💻 C
字号:
#include "intrins.h"
#include "At89x51.h"
/////////////////////////////////////
//采用P1口作控制
//11.0592的晶体
////////////////////////////////////
//I2C总线的数据和时钟
#define SCL P1_5
#define SDA P1_4
//////////////////////////////////////
#define NOP _nop_();_nop_();_nop_();_nop_();
#define AddWr 0xa0  /*器件地址选择及写标志*/
#define AddRd 0xa1  /*器件地址选择及读标志*/

//延时程序
void mDelay(unsigned j)
{
	unsigned int i;
	for(;j>0;j--)
	{
		for(i=0;i<125;i++)
		{;}
    }
}
//发送起始条件
void Start(void)
{
	SDA=1;
	SCL=1;
	NOP;
	SDA=0;
	NOP;
}
//发送停止条件
void Stop(void)
{
	SDA=0;
	SCL=1;
	NOP;
	SDA=1;
	NOP;	
}
//应答位
void Ack(void)
{
	SDA=0;
	NOP;
	SCL=1;
	NOP;
	SCL=0;
}
//非应答
void NoAck(void)
{
	SDA=1;
	NOP;
	SCL=1;
	NOP;
	SCL=0;	
}
//发送数据子程序,Data为要发送的数据a
void Send(unsigned char Data)
{
	 unsigned char BitCounter=8;//位数控制
	 unsigned char temp;//中间变量控制
	do{ 
	 temp=Data;
	 SCL=0;
	 NOP;
	 if((temp&0x0080)==0x0080)//如果最高位是1
	    SDA=1;
	 else
		SDA=0;
	 SCL=1;
	 temp=Data<<1;//左移
	 Data=temp;
	 BitCounter--;
	 }while(BitCounter);
	 SCL=0;
}
//读一个字节的数据,并返回该字节的值
unsigned Read(void)
{
	unsigned char temp=0;
    unsigned char temp1=0;
    unsigned BitCounter=8;
	SDA=1;
	do{
		SCL=0;
		NOP;
		SCL=1;
		NOP;
		if(SDA)
		temp=temp|0x01;
		else
		temp=temp&0xfe;
		if(BitCounter-1)
		{
			temp1=temp<<1;
			temp=temp1;
		}
		BitCounter--;
	  }while(BitCounter);
	return(temp);	
}
//向24c02中写数据
void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
	unsigned char i;
    unsigned char *Pdata;
    Pdata=Data;
	for(i=0;i<Num;i++)
	{
		Start();
		Send(AddWr);
		Ack();
		Send(Address+i);
		Ack();
		Send(*(Pdata+i));
		Ack();
		Stop();
//		mDelay(20);
	}
}
void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
	unsigned char i;
	unsigned char *Pdata;
	Pdata=Data;
	for(i=0;i<Num;i++)
	{
		Start();
		Send(AddWr);
		Ack();
		Send(Address+i);
		Ack();
		Start();
		Send(AddRd);
		Ack();
		*(Pdata+i)=Read();
		SCL=0;
        NoAck();
		Stop();
	}
}
main()
{
    unsigned char Number[4]={1,2,3,4};
	WrToROM(Number,4,4);
	mDelay(20);
	Number[0]=0;
	Number[1]=0;
	Number[2]=0;
	Number[3]=0;
	RdFromROM(Number,4,4);
}

⌨️ 快捷键说明

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