学习IIC 通信
IIC细则介绍
1.IIC设备发送顺序
2. AT24C02芯片 时序时间表
3.IIC时序图(读写)
4.IIC开始位和停止位
代码编写完全按照此图时序 查看详细转置 3.IIC时序图(读写)
4.1 IIC开始位和停止位代码
/******************************************************************************/
// 函数名称:iic_start
// 输入参数:无
// 输出参数:无
// 函数功能:iic开始位
// 晶振频率:11.0592M
/******************************************************************************/
void iic_start()
{
SDA=1;
SCL=1;
_nop_();
SDA=0;
_nop_();
}
/******************************************************************************/
// 函数名称:iic_stop
// 输入参数:无
// 输出参数:无
// 函数功能:iic停止位
// 晶振频率:11.0592M
/******************************************************************************/
void iic_stop()
{
SDA=0;
SCL=1;
_nop_();
SDA=1;
_nop_();
}
5.IIC设备应答位(有应答)
相当于读IIC设备一个bit位循环,循环8次读一个字节
5.1 IIC设备应答位(有应答)代码
/******************************************************************************/
// 函数名称:iic_ack
// 输入参数:无
// 输出参数:无
// 函数功能:应答位
// 晶振频率:11.0592M
/******************************************************************************/
bit iic_ack()
{
bit flag;
SCL=0;
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
flag=SDA;
SCL=0;
_nop_();
return flag;
}
6.IIC写一个字节
6.1 IIC写一个字节代码
/******************************************************************************/
// 函数名称:iic_write_byte
// 输入参数:bit位 从高位往底位写入
// 输出参数:无
// 函数功能:iic写一个字节
// 晶振频率:11.0592M
/******************************************************************************/
void iic_write_byte(uint8 iictada)
{
uint8 i;
for(i=0;i<8;i++)
{
SCL=0;
if(iictada&0x80)SDA=1;
else SDA=0;
_nop_();
SCL=1;
_nop_();
SCL=0;
_nop_();
iictada <<=1;
}
}
7.操作IIC设备写入
/******************************************************************************/
// 函数名称:iic_send
// 输入参数:无
// 输出参数:无
// 函数功能:iic_device设备地址(最后一位0读命令 1为写命令)iic_word(设备命令)
// iic_data要发送的数据
// 晶振频率:11.0592M
/******************************************************************************/
void iic_send(uint8 iic_device,uint8 iic_word,uint8 iic_data)
{
iic_start();
iic_write_byte(iic_device);
iic_ack();
iic_write_byte(iic_word);
iic_ack();
iic_write_byte(iic_data);
iic_ack();
iic_stop();
}