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

📄 24c01.c

📁 51单片机读写卡的程序
💻 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 + -