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

📄 iic.c

📁 51单片机IIC驱动
💻 C
字号:
/*******************************************************************************
********************************************************************************
*函数描述:IIC总线工作时序中的起始位
*局部变量:        
*返回参数:
********************************************************************************
*******************************************************************************/
void IIC_START(void)
{
	SDA_24C32=1;
	SCL_24C32=1;
	SDA_24C32=0;
	SCL_24C32=0;
}
/*******************************************************************************
********************************************************************************
*函数描述:IIC总线工作时序中的停止位
*局部变量:        
*返回参数:
********************************************************************************
*******************************************************************************/
void IIC_STOP(void)
{
	SDA_24C32=0;
	SCL_24C32=1;
	SDA_24C32=1;
	SCL_24C32=0;
}
/*******************************************************************************
********************************************************************************
*函数描述:提供IIC总线的时钟信号,并返回在时钟电平为高期间的SDA信号线上的状态。
	      用于数据发送,也可用于数据接收。
*局部变量:        
*返回参数:(bit)(IIC_FLAG):返回一个bit值。
********************************************************************************
*******************************************************************************/
bit IIC_CLOCK(void)
{
	bit IIC_FLAG;
	SCL_24C32=1;
	IIC_FLAG=SDA_24C32;
	SCL_24C32=0;
	return(IIC_FLAG);
}
/*******************************************************************************
********************************************************************************
*函数描述:IIC总线工作时序中的应答
*局部变量:        
*返回参数:
********************************************************************************
*******************************************************************************/
void IIC_ACK(void)
{
	SDA_24C32=0;
	IIC_CLOCK();
	SDA_24C32=1;
}
/*******************************************************************************
********************************************************************************
*函数描述:IIC总线工作时序中的不应答
*全局变量:
*局部变量:        
*返回参数:
********************************************************************************
*******************************************************************************/
void IIC_MNACK(void)
{
	SDA_24C32=1;
	SCL_24C32=1;
	SCL_24C32=0;
	SDA_24C32=0;
}
/*******************************************************************************
********************************************************************************
*函数描述:向IIC总线发送8位数据(一个字节),并请求一个应答信号ACK。
	       如果收到ACK应答信号则返回1(TRUE),否则返回0(FALSE)。
*局部变量:        
*返回参数:(bit)(~IIC_CLOCK()):返回一个bit值。
********************************************************************************
*******************************************************************************/
bit IIC_SEND(unchar idata IIC_DATA)
{
	unchar idata i;
	for(i=0;i<8;i++)
	{
		SDA_24C32=(bit)(IIC_DATA&0x80);
		IIC_DATA=IIC_DATA<<1;
		IIC_CLOCK();
	}
	SDA_24C32=1;
	return(~IIC_CLOCK());
}
/*******************************************************************************
********************************************************************************
*函数描述:从IIC总线接收8位数据(一个字节),并将接收到的8位数据作为一个字节返回,
		    不回送应答信号ACK。主函数在调用本函数之前应保证SDA信号线处于浮置状态,
		    即让8051的SDA引脚置1。
*局部变量:        
*返回参数:unchar IIC_DATA:接收的数据。
********************************************************************************
*******************************************************************************/
unchar IIC_RECEIVE(void)
{
	unchar idata i,IIC_DATA=0;
	for(i=0;i<8;i++)
	{
		IIC_DATA*=2;
		if(IIC_CLOCK())
			IIC_DATA++;
	}
	return(IIC_DATA);
}

⌨️ 快捷键说明

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