📄 24c01.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 + -