iic 发送程序问题

2020-01-27 11:26发布

本帖最后由 镜中风铃 于 2013-8-23 22:17 编辑

/**
* 函数: i2c_sendbyte(uint8 bt)
* 功能: 将输入的一字节数据bt发送
*/
void i2c_sendbyte(uint8 bt)
{
    uint8 i;
   
    for(i=0; i<8; i++)
    {  
        if (bt & 0x80)
                        SDA = 1;
        else
                        SDA = 0;

                SCL=0;
        SCL = 1;
                nops();
        bt <<= 1;
            
      
    }
         SCL = 0;
}


这个IIC 发送程序通不过,请问问题出在哪里呢?



* 函数: i2c_sendbyte(uint8 bt)
* 功能: 将输入的一字节数据bt发送
*/
void i2c_sendbyte(uint8 bt)
{
    uint8 i;
   
    for(i=0; i<8; i++)
    {  
        if (bt & 0x80)
                        SDA = 1;
        else
                        SDA = 0;

        nops();
        SCL = 1;
        bt <<= 1;
        nops();      
        SCL = 0;
    }
}

下面这个程序是可以通过的 请问区别在哪里
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
zouzhichao
1楼-- · 2020-01-27 14:34
半截程序?
镜中风铃
2楼-- · 2020-01-27 18:30
zouzhichao 发表于 2013-8-23 22:17
半截程序?

现在 编辑好了
zouzhichao
3楼-- · 2020-01-27 21:00
抛开前面和后面,for循环里要做的事:
for(i=0; i<8; i++)
{
}
(1)SDA准备好要传输的数据(0/1)。
(2)SCL来个时钟脉冲(delay,上升沿,delay,下降沿)。
(3)准备下一个要传输的数据(0/1),进入步骤(1),循环。
zouzhichao
4楼-- · 2020-01-27 22:18
 精彩回答 2  元偷偷看……
zouzhichao
5楼-- · 2020-01-28 00:32
void i2c_sendbyte(uint8 bt)
{
    uint8 i;
   
    for(i=0; i<8; i++)
    {  
//准备好要传输的数据
        if (bt & 0x80)
                        SDA = 1;
        else
                        SDA = 0;
//下降沿??????
                SCL=0;
//delay这么短????

//上升沿??????
        SCL = 1;
//delay
                nops();
//准备下一位数据
        bt <<= 1;
            
      
    }
         SCL = 0;
}
zouzhichao
6楼-- · 2020-01-28 05:56
附一张截图:
红 {MOD}矩形框内为一个数据位的传输过程
四条蓝 {MOD}标线是四个步骤
(A)SDA准备好数据
(A-B)延时
(B)SCL上升沿
(B-C)延时
(C)SCL下降沿
(C-D)延时
(D)下一位数据的(A)过程,如此循环

QQ截图.jpg (135.79 KB, 下载次数: 0)

下载附件

2013-8-23 22:38 上传

一周热门 更多>