📄 iic.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 + -