📄 24c01.c
字号:
//#pragma src
#include "i2c.h"
/* =========================================================================
*
* i2c.h 给出的是I2C总线基本操作函数, 下面给出的是几个对I2C总线接口器件
* 24C01操作的函数。
* =========================================================================*/
#define FALSE 0
#define TRUE ~FALSE
#define function
#define end_if
#define end_for
#define byte unsigned char
#define WRITE 0xA0 /* 定义24C01的器件地址SLA和方向位W */
#define READ 0xA1 /* 定义24C01的器件地址SLA和方向位R */
//#define BLOCK_SIZE 32 /* 定义指定字节个数 */
//extern xdata byte EAROMImage[BLOCK_SIZE];/* 在外部RAM中定义存储映象单元 */
/****************************************************************************
* 函数原型: bit function E_address(byte Address);
* 功 能: 向24C04写入器件地址和一个指定的字节地址。
*****************************************************************************/
bit function E_address( byte Address ) {
I_start() ;
if ( I_send( WRITE ) )
return ( I_send( Address ) ) ;
else
return ( FALSE ) ;
end_if
}
/****************************************************************************
* 函数原型: bit function E_read_block(void);
* 功 能: 从24C01中读取BLOCK_SIZE个字节的数据并转存于外部RAM存储映象
* 单元, 采用序列读操作方式从片内0地址开始连续读取数据。如果
* 24C01不接受指定的地址则返回0(FALSE)。
*****************************************************************************/
bit function IIC_read( char addr,char *p_value ) {
/* 从地址0开始读取数据 */
if ( E_address( addr ) ) {
/* 发送重复启动信号 */
I_start() ;
if ( I_send( READ ) ) {
*p_value = ( I_receive() ) ;
I_stop() ;
return ( TRUE ) ;
}
else {
I_stop() ;
return ( FALSE ) ;
end_if }
}
else
I_stop() ;
return ( FALSE ) ;
end_if
}
/****************************************************************************
* 函数原型: void function wait_5ms(void);
* 功 能: 提供5ms延时(时钟频率为12MHz)。
****************************************************************************/
void function wait_5ms( void ) {
register unsigned int i ;
for ( i=0 ; i<1000 ; i++ )
;
end_for
}
/****************************************************************************
* 函数原型: bit function E_write_block(void);
* 功 能: 将外部RAM存储映象单元中的数据写入到24C01的头BLOCK_SIZE个字节。
* 采用字节写操作方式, 每次写入时都需要指定片内地址。如果24C01
* 不接受指定的地址或某个传送的字节未收到应答信号ACK, 则返回0
* (FALSE)。
*****************************************************************************/
bit function IIC_write( char addr , char value ) {
if ( E_address(addr) && I_send( value ) ) {
I_stop() ;
wait_5ms();
return ( TRUE ) ;
}
else
return ( FALSE ) ;
end_if
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -