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