?? 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 + -