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

📄 24c02.c

📁 24c02存储器的说明和相应的程序
💻 C
字号:
#include <reg52.h>

#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long



sbit SCL=P3^7;               //24c02时钟信号
sbit SDA=P3^6;               //24c02数据端


/************************************
              延时程序
*************************************/
void delay()
{
	uchar i;
	for(i=248;i>0;i--);
}

/************************************
              开始总线
*************************************/
void start()
{
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}

/*************************************
              结束总线
**************************************/
void stop()
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}

/*************************************
               发ack0
**************************************/
void noack()
{
	SDA=1;
	SCL=1;
	SCL=0;
}

/*************************************
             应答子函数
**************************************/
bit ack()
{
	bit e;
	SDA=1;
	SCL=1;
	e=SDA;
	SCL=0;
	return(e);
}

/**************************************
            写8个bit到24C02
			为写字节作准备
**************************************/
void wb(uchar input)
{
	uchar j;
	for(j=8;j>0;j--)
	{
		SDA=(bit)(input&0x80);
		SCL=1;
		SCL=0;
		input=input<<1;
	}
}

/***************************************
           写一个字节到24c02
****************************************/
void w(uchar d,uchar a)
{
	start();

	wb(0xa0);    //写入指令0xa0,该指令表示准备对24c02进行写操作
    ack();

	wb(a);		 //先写要存数据的地址
	ack();

	wb(d);		 //再写要存数据
    ack();

	stop();
	delay();
}


/**************************************
          从24C02中读8个bit
		   为读字节作准备
***************************************/
uchar rb()
{
	uchar j,rb=0;
	for(j=8;j>0;j--)
	{
		SCL=1;
	    rb=rb<<1;
	    rb=rb|((uchar)(SDA));
	    SCL=0;
	}
	return(rb);
}

/****************************************
          从24c02中读一个字节
*****************************************/
uchar r(uchar a)
{
	uchar d;		  //读操作得到的数据

	start();
	wb(0xa0);	      //写入指令0xa0,该指令表示准备对24c02进行写操作
	ack();
	wb(a);			  //写入要读数据的地址a
	ack();

	start();
	wb(0xa1);		  //写入指令0xa1,该指令表示准备对24c02进行读操作
	ack();
	d=rb();			  //从地址a中读出数据
	noack();
	stop();

	return(d);		  // 返回得到的数据
}


/****************************************
              试验主函数
*****************************************/
void main(void)
{
	uchar c1,c2;
 
	w(0xf0,0x02);        //写0xf0到地址0x02
	w(0x0f,0x03);        //写0x0f到地址0x03

	c1=r(0x02);          //从地址0x02读出数据
    c2=r(0x03);          //从地址0x03读出数据

	P1=c1;
	P2=c2;
	while(1);           //程序挂起
}





⌨️ 快捷键说明

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