📄 iic.c
字号:
#include "iic.h"
void delay(unsigned int time)
{
while(time--);
}
/* 功能描述:主设备发出无应答
隶属模块:IIC模块
函数属性:外部,供用户使用
注:主设备(比如单片机)从从设备(比如PCF8563)
进行读取,就要给从设备一个NACK(即无应答) */
void IIC_NAck()
{
SDA=1;
delay(DelayTime);
SCL=1;
delay(DelayTime);
SCL=0;
delay(DelayTime);
}
/* 功能描述: IIC启动
隶属模块: IIC模块
函数属性: 外部,供用户使用 */
void IIC_Start()
{
SDA=1;
delay(DelayTime);
SCL=1;
delay(DelayTime);
SDA=0;
delay(DelayTime);
SCL=0;
delay(DelayTime);
}
//IIC结束部分
void IIC_Stop()
{
SDA=0;
delay(DelayTime);
SCL=1;
delay(DelayTime);
SDA=1;
delay(DelayTime);
SCL=0;
delay(DelayTime);
}
/* 功能描述:主设备发出应答
隶属模块:IIC模块
函数属性:外部,供用户使用
注:主设备(比如单片机)从从设备(比如PCF8563)
进行读取,就要给从设备一个ACK(即应答) */
void IIC_Ack()
{
SDA=0;
delay(DelayTime);
SCL=1;
delay(DelayTime);
SCL=0;
delay(DelayTime);
}
/* 功能描述:主设备检测从设备应答
隶属模块:IIC模块
参数说明:无
返回说明:从设备的应答值
注:主设备(比如单片机),向从设备(比如pcf8563)写入字节后,要检测从设备
发出的应答,如果数据位SDA为0,说明向从设备成功写入*/
unsigned char IIC_Get_Ack()
{
unsigned char Error;
SDA=1;
delay(DelayTime);
SCL=1;
delay(DelayTime);
Error=SDA;
delay(DelayTime);
SCL=0;
delay(DelayTime);
return Error;
}
/* 功能描述:主设备向从设备写入一个字节
隶属模块:IIC模块
隶属函数:外部,供用户使用
参数说明:dat:将要写入的字节
返回说明:从设备的应答值
注:向从设备写入一个字节,并返回从设备的应答值*/
unsigned char IIC_Write_Byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SDA=((dat<<i)&0x80);
SCL=1;
delay(DelayTime);
SCL=0;
delay(DelayTime);
}
return IIC_Get_Ack();
}
/* 功能描述:主设备向从设备读入一个字节
隶属模块:IIC模块
隶属函数:外部,供用户使用
返回说明:读到的字节*/
unsigned char IIC_Read_Byte()
{
unsigned char i,rbyte=0;
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay(DelayTime);
if(SDA) rbyte|=(0x80>>i);
SCL=0;
delay(DelayTime);
}
return rbyte;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -