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

📄 i2c.c

📁 一个IC总线的驱动包
💻 C
字号:
//**********************************************************
//               I2C总线驱动程序源文件
//**********************************************************
#include<reg52.h>
#include<intrins.h>
#include<I2C.h>

void Start(void)              //IC2总线开始信号
{
	SDA = 1;                      //发送起始条件的数据信号
	SCL = 1;
	_nop_();
	SDA = 0;					  //发送起始信号								
	SCL = 0;
	_nop_();					  //钳住I2C总线准备发送或接收数据	
}

void Stop(void)               //I2C总线结束信号
{

	SCL = 0;
	SDA = 0;					  //发送结束条件的数据信号
	SCL = 1;
	_nop_();						
	SDA = 1;
	_nop_();					  //发送结束信号
}

void Ack()						  //主机发送应答信号				
{
 	SDA=0;
	_nop_();
	SCL=0;
 	SCL=1;
	_nop_();
 	SCL=0;
 	SDA=1;
}

void NoAck() 					  //主机发送不应答信号
{
 	SDA=1;
	SCL=0;
 	SCL=1;
 	SCL=0;
	SDA=0;
}

bit Test_Ack(void)			  	  //主器件接收应答信号			
{
	bit Error;
	SDA = 1;					  //释放数据总线,准备接收应答位
	SCL = 1;					  //置时钟线为高电平,使数据线上数据有效
	Error=SDA;
	SCL = 0;
	return Error;																																				
}

void Write_OneByte(unsigned char Data) //主机向I2C器件写一字节数据
{
	uchar i;
	for(i=8 ; i ; --i)
	{
  		SDA=(bit)(Data&0x80);
   		SCL=0;
	 	SCL=1;
  		SCL=0;		
		Data <<= 1;
	}	
}

unsigned char Read_OneByte(void)   //主机从I2C总线上读一字节数据
{
	uchar i;
	uchar Data = 0;
	for( i=8 ; i ; --i)
	{
		SCL = 0;
		SCL = 1; 					   //置时钟线为高电平,使数据线上数据有效
		Data <<= 1;
		Data=Data|((unsigned char)(SDA));
		SCL = 0;										
	}
	return Data;	
}

⌨️ 快捷键说明

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