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

📄 24c61.c

📁 是简单的E2PROM在单片机上的读写程序
💻 C
字号:
			  #include<reg51.h>
			  #include<stdio.h>
			  #define      uchar     unsigned    char
			  #define     uint        unsigned   int


			  sbit    sda=P1^0;
			  sbit    sclk=P1^1;
			  sbit    kk=P1^2;
			  sbit    kk2=P1^3;
			  uchar    temp5,count_1,temp6;
			  uchar   const  tab0[5]={0x01,0x02,0x03,0x04,0x05};
			  uchar     tab1[6];
 /**************************************************************************
 **			单步延时
 *************************************************************************/
			  void     delay(uint  us)
			  {
			  	while(us>0)
				 us--;
			  }
/***************************************************************************
**			 起始信号
*****************************************************************************/
			  void     iicstart(void)
			  {
			  	 sclk=0;
				 sda=1;
				 sclk=1;
				 delay(2);
				 sda=0;
				 delay(2);
				 sclk=0;
			  }
/***************************************************************************
**			 结束信号
*******************************************************************************/			  
			  void    iicstop(void)
			  {
			  	sclk=0;
				sda=0;
				sclk=1;
				sda=1;
				delay(2);
				sclk=0;

			  }
/**********************************************************************************
**			  检测应答信号
***********************************************************************************/
			  uchar   upcheck(void)
			  {
			  	uchar    i;
				sclk=0;
				sda=1;
				sclk=1;
				if(sda==1)
				i=0;
				else
				{
					i=1;
					count_1++;
				}
				sclk=0;
				return(i);
			  }
/*******************************************************************************
**			  发送应答信号和非应答信号
*********************************************************************************/
			  void     sendcheck(void)
			  {
			  	sclk=0;
				sda=0;
				sclk=1;
				delay(2);
				sclk=0;	
			  }
			  void    senducheck(void)
			  {
			  	sclk=0;
				sda=1;
				sclk=1;
				delay(2);
				sclk=0;
			  }

/*********************************************************************************
**写入一个字节
**字节内容:addr
*******************************************************************************/
			  void      writeiic(uchar   addr)
			  {
			  	uchar    temp1,i;
				temp1=addr;
				sclk=0;
				for(i=0;i<8;i++)
				{
					if((temp1&0x80)==0)
					sda=0;
					else
					sda=1;
					sclk=1;
					delay(2);
					sclk=0;
					temp1=temp1<<1;
				}
				temp5=upcheck();

			  }
/******************************************************************************************
**读取一个字节
**读取内容:addr
**********************************************************************************************/
			  
			  uchar    read(uchar   addr)
			  {
			  	uchar   temp1,temp2,i;
				temp1=addr;
				sclk=0;
				for(i=0;i<8;i++)
				{
					if((temp1&0x80)==0)
					sda=0;
					else
					sda=1;
					sclk=1;
					delay(2);
					sclk=0;
					temp1=temp1<<1;
				}
				temp5=upcheck();
			  	sclk=0;
				sda=1;
				for(i=0;i<8;i++)
				{
					temp2=temp2<<1;
					sclk=1;
					delay(2);
					if(sda==1)
					temp2=temp2|0x01;
					sclk=0;
				}
			  	senducheck();
			  	return(temp2);
			  }
/******************************************************************************************************
**读取多个字节
**字节数:cc
**器件地址:addr
**存放地址:chn
**********************************************************************************************************/			  
			  void    read1(uchar   addr,uchar   cc,uchar  *chn)
			  {
			  	uchar   temp1,temp2,temp3,i;
				temp1=addr;
				temp3=cc;
				sclk=0;
				for(i=0;i<8;i++)
				{
					if((temp1&0x80)==0)
					sda=0;
					else
					sda=1;
					sclk=1;
					delay(2);
					sclk=0;
					temp1=temp1<<1;
				}
				temp5=upcheck();
				for(temp1=0;temp1<temp3;temp1++)  	
				{	
					
					sclk=0;
					sda=1;
					for(i=0;i<8;i++)
					{
						temp2=temp2<<1;
						sclk=1;
						delay(2);
						if(sda==1)
						temp2=temp2|0x01;
						sclk=0;
					}
			  		chn[temp1]=temp2;
					temp2=0x00;
					if((temp3-temp1)==1)
					senducheck();
					else
					sendcheck();

			  	}
			  }
/************************************************************************************************
**写多个字节的数据
**字节数:cc
**数据存放地址:chn
*****************************************************************************************************/
			  void     write1iic(uchar cc,uchar   *chn)
			  {
			  		uchar   temp1,temp2,temp3,i;
					temp2=cc;
					sclk=0;
					for(temp1=0;temp1<temp2;temp1++)
					{
						 temp3=chn[temp1];
						 for(i=0;i<8;i++)
						 {
						 	if((temp3&0x80)==0)
							sda=0;
							else
							sda=1;
							sclk=1;
							delay(2);
							sclk=0;
							temp3=temp3<<1;
						 }
						 upcheck();
					}
			  }




/***********************************************************************************************/


			  main()
			  {	
			  	kk=0;
				kk2=0;
				iicstart();					//写开始
			  	writeiic(0xa0);
				writeiic(0x02);
				//writeiic(0x01);
				//writeiic(0x06);
				write1iic(5,tab0);
				iicstop();
				delay(200);
				
				iicstart();						  //读开始
				writeiic(0xa0);
				writeiic(0x02);
				iicstart();						  //重起总线
				read1(0xa1,4,tab1);
				iicstop();
			  	while(1)
				{
					if(temp5==1&&count_1==7)
					kk=1;
					if(tab1[0]==0x01&&tab1[3]==0x04)
					kk2=1;
				}
			  }
			  
			  

⌨️ 快捷键说明

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