森 • 时光机

PIC单片机模拟IIC从机通讯

IIC简介

IIC是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。

IIC是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个地址,高7位地址其实是相同的。

IIC数据格式如下:

当数据为单字节传送时,格式为:

当数据为一串字节传送时,格式为:

模拟IIC从机代码(查询方式)

本次调试IIC设置为1对1单点透传模式,所以省略了对地址的处理,直接发送数据包。
先贴代码:

/*
 * IIC接收处理函数(扫描)
 */
uint8_t IICSdaOld, IICSclOld;
void i2cSlaveHandler(void)
{
    uint8_t temp_scl = IIC_SCL;
    uint8_t temp_sda = IIC_SDA;
    if (temp_scl == 1)
    {
        if (IICSclOld == 0)
        { //SCL上升沿
            if (IICStat < 0x08)
            {
                IICTemp <<= 1;
                IICTemp |= temp_sda;
                //SCL由0变位为1
                IICStat++;
            }
            else if (IICStat == 0x08)
            {
                spSendDataChar(IICTemp);    //通过串口打印字符串
                IICStat = 0x00;
            }
        }
        if (temp_sda != IICSdaOld) //SDA变位检测
        {
            if (temp_sda == 0) //如果SDA跳变为下降沿为起始位
            {
                IICStat = 0x00;
            }
            else //如果SDA跳变为上升沿则为停止位
            {
                IICStat = 0xFF;
            }
        }
    }
    IICSdaOld = temp_sda;
    IICSclOld = temp_scl;
}

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »