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