iic

作者: guanjianhe | 来源:发表于2018-04-04 18:28 被阅读0次

上图中,绿色代表起始信号,红色代表停止信号
//iic 起始信号  
void iic_start(void)
{
    sda = 1;
    scl = 1;
    iic_delay();
    sda = 0;
    iic_delay();
    scl = 0;
}

//iic 停止信号
void iic_stop(void)
{
    sda = 0;
    scl = 0;
    iic_delay();
    scl = 1;
    iic_delay();
    sda = 1;
    iic_delay();
}


// iic 写一个字节数据,返回值为应答信号,0:应答,1:非应答
uint8_t iic_sendbyte(uint8_t dat)
{
    uint8_t mask;
    uint8_t ack = 0;
    for(mask=0x80;mask!=0;mask>>=1)
    {
        sda = (dat & mask)? 1 : 0;
        iic_delay();
        scl = 1;
        iic_delay();
        scl = 0;
    }
    sda = 1;    //释放总线,准备接收应答
    iic_delay();
    scl = 1;
    iic_delay();
    ack = sda;
    scl = 0;
    return ack;
}


//iic 接收一个字节
uint8_t iic_recbyte(void)
{
    uint8_t mask;
    uint8_t dat = 0;
    sda = 1;    //释放总线,准备接收数据
    for(mask=0x80;mask!=0;mask>>=1)
    {
        iic_delay();
        scl = 1;
        iic_delay();
        if(sda)
            dat |= mask;
        scl = 0;
    }
    return dat;
}


//iic 应答信号,0:应答,1:非应答
void iic_ack(uint8_t ack)
{
    sda = ack;
    iic_delay();
    scl = 1;
    iic_delay();
    scl = 0;
}

相关文章

网友评论

      本文标题:iic

      本文链接:https://www.haomeiwen.com/subject/giuthftx.html