模拟IIC通信的时候为什么先把SCL拉低再配置SDA的输出而反过来就不行

2019-07-20 22:37发布

[mw_shl_code=c,true]//产生ACK应答
void CT_IIC_Ack(void)
{
        CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_Delay();
        CT_IIC_SDA=0;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}
//不产生ACK应答                    
void CT_IIC_NAck(void)
{
        CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_Delay();
        CT_IIC_SDA=1;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}                                        [/mw_shl_code]
源于正点原子的触摸屏实验当把代码改成下面这样。
[mw_shl_code=applescript,true]
//产生ACK应答
void CT_IIC_Ack(void)
{
        //CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_IIC_SCL=0;
        CT_Delay();
        CT_IIC_SDA=0;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}[/mw_shl_code]
。照理说我这个CT_SDA_OUT只是配置GPIOF 的MODER把IO方向设置为输出,对IO口并无影响。但是为什么我像下面这样写就不行呢? 照理说和上面写是一样的效果啊,求大神指教!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
yconnor
2019-07-21 19:33
jinggx 发表于 2016-4-25 23:05
只知道看代码乱猜,而不知道看看协议以及电路硬件?

首先并非乱猜,可能我有点乱。你没明白我在说什么!
   这么解释吧。
        PBout(0)=0;
        CT_SDA_OUT;  //把PF13配置为输出
       ……

      先配置输出CT_SDA_OUT;
                        PBout(0)=0;
  这两者反应在硬件上有没有区别。是这个意思。 硬件和IIC协议我都明白。但是这两种写法效果却不一样那一定是原因的。

一周热门 更多>