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

📄 iic.c

📁 一个非常好的微处理器烧录EEPROM的C++ 原代码项目文件,直接可用,而且还是一拖八的, 成果奉献
💻 C
字号:
#include	"Publicdef.h"
#include	"publicfunction.h"

BYTE	IIC_Type;

BIT	SDA_IN(void)
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				return Pin_IIC_Sda_AT24CXX_R;
		case	IIC_AT24CXX_D1:
				return Pin_IIC_Sda_AT24CXX_D1;	
		case	IIC_AT24CXX_D2:
				return Pin_IIC_Sda_AT24CXX_D2;	
		case	IIC_AT24CXX_D3:
				return Pin_IIC_Sda_AT24CXX_D3;	
		case	IIC_AT24CXX_D4:
				return Pin_IIC_Sda_AT24CXX_D4;	
		case	IIC_AT24CXX_D5:
				return Pin_IIC_Sda_AT24CXX_D5;	
		case	IIC_AT24CXX_D6:
				return Pin_IIC_Sda_AT24CXX_D6;	
		case	IIC_AT24CXX_D7:
				return Pin_IIC_Sda_AT24CXX_D7;	
		case	IIC_AT24CXX_D8:
				return Pin_IIC_Sda_AT24CXX_D8;	
	}
}

BIT	SCL_IN(void)
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				return Pin_IIC_Scl_AT24CXX_R;
		case	IIC_AT24CXX_D1:
				return Pin_IIC_Scl_AT24CXX_D1;	
		case	IIC_AT24CXX_D2:
				return Pin_IIC_Scl_AT24CXX_D2;	
		case	IIC_AT24CXX_D3:
				return Pin_IIC_Scl_AT24CXX_D3;	
		case	IIC_AT24CXX_D4:
				return Pin_IIC_Scl_AT24CXX_D4;	
		case	IIC_AT24CXX_D5:
				return Pin_IIC_Scl_AT24CXX_D5;	
		case	IIC_AT24CXX_D6:
				return Pin_IIC_Scl_AT24CXX_D6;	
		case	IIC_AT24CXX_D7:
				return Pin_IIC_Scl_AT24CXX_D7;	
		case	IIC_AT24CXX_D8:
				return Pin_IIC_Scl_AT24CXX_D8;	
	}
}

void	SDA_HIGH(void)
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				Pin_IIC_Sda_AT24CXX_R=H_LEVEL;
				break;
		case	IIC_AT24CXX_D1:
				Pin_IIC_Sda_AT24CXX_D1=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D2:
				Pin_IIC_Sda_AT24CXX_D2=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D3:
				Pin_IIC_Sda_AT24CXX_D3=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D4:
				Pin_IIC_Sda_AT24CXX_D4=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D5:
				Pin_IIC_Sda_AT24CXX_D5=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D6:
				Pin_IIC_Sda_AT24CXX_D6=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D7:
				Pin_IIC_Sda_AT24CXX_D7=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D8:
				Pin_IIC_Sda_AT24CXX_D8=H_LEVEL;	
				break;
	}
}	
void	SDA_LOW(void)		
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				Pin_IIC_Sda_AT24CXX_R=L_LEVEL;
				break;
		case	IIC_AT24CXX_D1:
				Pin_IIC_Sda_AT24CXX_D1=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D2:
				Pin_IIC_Sda_AT24CXX_D2=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D3:
				Pin_IIC_Sda_AT24CXX_D3=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D4:
				Pin_IIC_Sda_AT24CXX_D4=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D5:
				Pin_IIC_Sda_AT24CXX_D5=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D6:
				Pin_IIC_Sda_AT24CXX_D6=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D7:
				Pin_IIC_Sda_AT24CXX_D7=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D8:
				Pin_IIC_Sda_AT24CXX_D8=L_LEVEL;	
				break;
	}
}
void	SCL_HIGH(void)
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				Pin_IIC_Scl_AT24CXX_R=H_LEVEL; 
				break;
		case	IIC_AT24CXX_D1:
				Pin_IIC_Scl_AT24CXX_D1=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D2:
				Pin_IIC_Scl_AT24CXX_D2=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D3:
				Pin_IIC_Scl_AT24CXX_D3=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D4:
				Pin_IIC_Scl_AT24CXX_D4=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D5:
				Pin_IIC_Scl_AT24CXX_D5=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D6:
				Pin_IIC_Scl_AT24CXX_D6=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D7:
				Pin_IIC_Scl_AT24CXX_D7=H_LEVEL;	
				break;
		case	IIC_AT24CXX_D8:
				Pin_IIC_Scl_AT24CXX_D8=H_LEVEL;	
				break;
	}
}
void	 SCL_LOW(void)
{
	switch	(IIC_Type)
	{
		case	IIC_AT24CXX_R:
				Pin_IIC_Scl_AT24CXX_R=L_LEVEL;
				break;
		case	IIC_AT24CXX_D1:
				Pin_IIC_Scl_AT24CXX_D1=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D2:
				Pin_IIC_Scl_AT24CXX_D2=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D3:
				Pin_IIC_Scl_AT24CXX_D3=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D4:
				Pin_IIC_Scl_AT24CXX_D4=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D5:
				Pin_IIC_Scl_AT24CXX_D5=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D6:
				Pin_IIC_Scl_AT24CXX_D6=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D7:
				Pin_IIC_Scl_AT24CXX_D7=L_LEVEL;	
				break;
		case	IIC_AT24CXX_D8:
				Pin_IIC_Scl_AT24CXX_D8=L_LEVEL;	
				break;
	}
}
void	IIC_Start(void)
{
	SDA_HIGH();
	SCL_HIGH();
	IIC_DELAY();
	SDA_LOW();
	SCL_LOW();
}

void	IIC_Stop(void)
{
	SCL_HIGH();
	IIC_DELAY();
	SDA_HIGH();
}

void	 IIC_Ack(BIT Ack)
{
	if	(Ack)
	SDA_HIGH();
	else
	SDA_LOW();
	SCL_HIGH();
	IIC_DELAY();
	SCL_LOW();
	SDA_LOW();
}

BIT	IIC_SendByte(BYTE IIC_Data)
{
	BYTE	DATA 	loop;
	BIT		DATA	Error=0;
	for	(loop=0;loop<=7;loop++)
	{
		if	(IIC_Data&(0x80>>loop))
		SDA_HIGH();
		else
		SDA_LOW();
		SCL_HIGH();
		IIC_DELAY();
		SCL_LOW();
		IIC_DELAY();
	}
	SDA_HIGH();
	SCL_HIGH();
	IIC_DELAY();
	if	(SDA_IN()||(SCL_IN()==0))
	Error=btIIC_ERROR;
	SCL_LOW();
	SDA_LOW();
	return	Error;
}

void	IIC_ReceiveByte(BYTE	*ptIIC_Data)
{
	BYTE	loop;
	
	*ptIIC_Data=0;
	SDA_HIGH();
	for	(loop=0;(loop<=7);loop++)
	{
		SCL_LOW();
		IIC_DELAY();
		SCL_HIGH();
		IIC_DELAY();
		if	(SDA_IN())
		*ptIIC_Data|=(0x80>>loop);
	}
	SCL_LOW();
	SDA_LOW();
}

BIT	IIC_Write(BYTE	Addr,BYTE	SubAddr,BYTE	Number)
{
	BYTE	DATA 	loop;
	BIT		DATA	Error=btIIC_RIGHT;
	IIC_Start();
	if	(IIC_SendByte(Addr))
	Error=btIIC_ERROR;
	if	(IIC_SendByte(SubAddr))
	Error=btIIC_ERROR;
	for	(loop=0;loop<Number;loop++)
	{
		if	(IIC_SendByte(*ptGpBuffer++))
		Error=btIIC_ERROR;		
	}
	IIC_Stop();
	return	Error;
}

BIT	IIC_WriteW(BYTE	Addr,WORD	SubAddr,BYTE	Number)
{
	BYTE	DATA 	loop;
	BIT		DATA	Error=btIIC_RIGHT;
	IIC_Start();
	if	(IIC_SendByte(Addr))
	Error=btIIC_ERROR;
	if	(IIC_SendByte(Hi_Byte(SubAddr)))
	Error=btIIC_ERROR;
	if	(IIC_SendByte(Lo_Byte(SubAddr)))
	Error=btIIC_ERROR;
	for	(loop=0;loop<Number;loop++)
	{
		if	(IIC_SendByte(*ptGpBuffer++))
		Error=btIIC_ERROR;		
	}
	IIC_Stop();
	return	Error;
}

BIT	IIC_Read(BYTE	Addr,BYTE	SubAddr,BYTE  Number)
{
	BIT		DATA	Error=0;
	BYTE	DATA	loop;
	IIC_Start();
	if	(IIC_SendByte(Addr))
	Error=btIIC_ERROR;	
	if	(IIC_SendByte(SubAddr))
	Error=btIIC_ERROR;	
	IIC_Start();
	if	(IIC_SendByte(Addr+1))
	Error=btIIC_ERROR;	
	for	(loop=0;loop<Number;loop++)
	{
		IIC_ReceiveByte(ptGpBuffer++);
		IIC_Ack(loop/(Number-1));
	}
	IIC_Stop();
	return	Error;
}

BIT	IIC_ReadW(BYTE	Addr,WORD	SubAddr,BYTE  Number)
{
	BIT		DATA	Error=0;
	BYTE	DATA	loop;
	IIC_Start();
	if	(IIC_SendByte(Addr))
	Error=btIIC_ERROR;	
	if	(IIC_SendByte(Hi_Byte(SubAddr)))
	Error=btIIC_ERROR;	
	if	(IIC_SendByte(Lo_Byte(SubAddr)))
	Error=btIIC_ERROR;	
	IIC_Start();
	if	(IIC_SendByte(Addr+1))
	Error=btIIC_ERROR;	
	for	(loop=0;loop<Number;loop++)
	{
		IIC_ReceiveByte(ptGpBuffer++);
		IIC_Ack(loop/(Number-1));
	}
	IIC_Stop();
	return	Error;
}

⌨️ 快捷键说明

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