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

📄 24c01.c

📁 C51单片机扩展的数据存储器24X01的读写驱动程序
💻 C
字号:
#include <at89c51.h>
#include<I2c.h>
#define WRITE 0xA0
#define READ 0xA1
#define BLOCK_SIZE 32
#define uchar unsigned char
xdata uchar EAROMImage[BLOCK_SIZE]
/************************************/
#define uchar unsigned char
#define unint unsigned int
 
void delay (void);
void I_stop (void);
void I_init (void);
void I_start (void);
bit I_clock (void);
void I_Ack (void);
bit I_send (uchar I_data);
uchar I_receive (void);
 
/*****************************************************
*函数原型:bit E_address(uchar Address);
*功能:向24C04写入器件地址和一个指定的字节地址
*******************************************************/
bit E_address (uchar Address)
    {I_start();
    if (I_send(WRITE))
        return (I_send(Address)) ;
    else 
       return (FALSE) ;
    }
/**********************************************************
*函数原型: bit E_read_block(void);
*功能:从24C04中读取BLOCK——SIZE个字的数据并转存于处部RAM存储映溪
*
**************************************************************/
bit E_read_block(void)
    {uchar I;
/*从地址0开始读取数据*/
if (E_address(0))
   {/*发送重复启动信号*/
   I_start();
   if (I_send(READ))
       {for (I=0;I<=BLOCK_SIZE;I++)
            {EAROMmage[I]=(I_receive());
			if (I!=BLOCK_SIZE)
			    {I_Ack();}
			else 
			    {I_clock();
				 I_stop();
				 }
			 }
        return(TRUE);
  	    }
	 else
	    {I_stop();
		return(FALSE);
		}
	 }
/***********************************************************************
*函数原型:void wait_5ms(void);
*功能:提供5MS延时(时钟频率为12MHZ)
*********************************************************************/
void wait_5ms(void)
     {int i;
	  for (i=0;i<1000;i++)
	      {;
		  }
	  }
/***********************************************************************
*函数原型:bit E_write_block(void);
*功能:将外部RAM存储映像单元中的数据写入到24C04的头BLOCK_SIZE个字节
*      采用字节写操作方式,每次写入时都需要指定片内地址。如果24C04不
*      接受指定的地址或某个传送的字节未收到应答信号ACK,则返回0否则返回1。
*************************************************************************/
bit E_write_block(void)
     {uchar I;
	  for (I=0;I<=BLOCK_SIZE;I++)
	      {if(E_address(i)&&I_send(EAROMImage[I]))
		       {I_stop();
			    wait_5ms();
                }
			else return (FALSE);
			}
	   return (TRUE);
	   }
/******************************主函数***************************************/
void main ()
     {SCON=0X5A;
	 TMOD=0X20;
	 TCON=0X69;
	 TH1=0XFD;
	 I_init();
	 if (E_write_block())
	    P1^1=1;
     else P1^1=0;
     if(E_read_block())
        P1^2=1;
     else P1^2=0;

        
        

⌨️ 快捷键说明

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