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

📄 i2c.c

📁 24CXX的读写代码,适用于51单片机.
💻 C
字号:

/*
 File:	I2C.c
 说明:	IIC总线操作
 Author:wolfe
 Data:	2008.10 
*/

#include "at89x52.h"
#include "ES51_II.h"
#include "es51_ii_lib.h"
#include <intrins.h>


#define	DELAY_1US	{_nop_();}


// 操作起始
void I2c_Start(void)  
{
	SDA = 1;				  	//	发送起始条件的数据信号
	SCL = 1;
	DELAY_1US;
	SDA = 0;   					//	发送起始信号
	DELAY_1US;      
	SCL = 0;   					//	钳住I2C总线,准备发送或接收数据
}

// 操作结束
void I2c_Stop(void)  
{
	SDA = 0;
	DELAY_1US;
	SCL = 1;
	DELAY_1US;
	SDA = 1;  					//	发送I2C总线结束信号
	DELAY_1US;
	SDA = 1;;   				//	
}

//写一个字节数据
void I2c_WrByte(unsigned char dat)	
{
	unsigned char i;

	for(i=0;i!=8;i++)  			// 输出8位数据
	{
		if( dat & 0x80 ) 
			SDA = 1;
		else 
			SDA = 0;
		DELAY_1US;
		SCL = 1;
		dat<<=1;
		DELAY_1US;  		
		SCL = 0;
	}
	SDA = 1;
	DELAY_1US;
	SCL = 1;  					// 接收应答
	DELAY_1US;
	SCL = 0;
}


//读一个字节数据
unsigned char I2c_RdByte(void)		
{
	unsigned char dat,i;
	
	SDA = 1;
	dat=0;
	for(i=0;i!=8;i++)  		// 输入8位数据
	{
		DELAY_1US;  		// 可选延时
		SCL = 1;
		DELAY_1US;  		// 可选延时
		dat<<=1;
		if( SDA ) 
			dat++;  		// 输入1位
		SCL = 0;
	}
	SDA = 1;
	DELAY_1US;
	SCL = 1;  // 发出无效应答
	DELAY_1US;
	SCL = 0;
	return(dat);
}

⌨️ 快捷键说明

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