IIC心得体会

2019-08-11 19:15发布

本人不才,今天上午刚写完一个完整的IIC协议程序,有所悟,想和大家讨论一下。希望大家多批评指正。个人iic程序难点主要集中在等待应答函数,和发送接收字节3个函数。写字节函数,需要在SCL上升沿之前将所要写的位发送到SDA,然后SCL置1,延时,再将SCL置0。读字节函数和等待响应函数则相反,需要现将SCL位置1,然后读位,再将SCL位拉低。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
2557046847
1楼-- · 2019-08-11 22:50
学习了、。。。。
天耀中华
2楼-- · 2019-08-12 02:13
您好,我想问一下,这里的receive怎么就能是主机读取的字节呢,它仅仅表示计数啊,IIC这个协议可以看通,可是代码似乎不是完全按照协议来处理的,问的不知对不对,请大家见谅
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();//SDA设置为输入
    for(i=0;i<8;i++ )
        {
        IIC_SCL=0;
        delay_us(2);
        receive<<=1;//这里讲接收到的数据左移,原来发送函数先发送高位,现在接受的话如果依然左移,使得数据变得和原来的本末倒置了啊。
        if(READ_SDA)receive++;   
                delay_us(1);
    }                                         
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;
}
hong9424
3楼-- · 2019-08-12 04:24
学习了
mxiaotao
4楼-- · 2019-08-12 08:15
 精彩回答 2  元偷偷看……
mxiaotao
5楼-- · 2019-08-12 11:06
天耀中华 发表于 2017-10-16 21:14
您好,我想问一下,这里的receive怎么就能是主机读取的字节呢,它仅仅表示计数啊,IIC这个协议可以看通,可 ...

++保存1,不加保存0
rainmaker19
6楼-- · 2019-08-12 13:00
受教了

一周热门 更多>