关于 DS1302的 读操作

2020-02-02 09:23发布

/**
* 读一个字节
*/
uint8 read_ds1302_byte(void)
{
        uint8 i, dat=0;


       
        for (i=0;i<8;i++)
        {          
                         
                dat >>= 1;
                                  
                if (SDA)
                     dat |= 0x80;
                SCK = 1;
                SCK = 0;
                       
               
}

        return dat;
}


上面的读操作是正确的 但是我想 第一次循环的时候在没有出现下降沿的时候  IF 语句根本判断不出来是高电平还是低电平啊,于是我换成这种写法

/**
* 读一个字节
*/
uint8 read_ds1302_byte(void)
{
        uint8 i, dat=0;


       
        for (i=0;i<8;i++)
        {          
                         
                  
                              dat >>= 1;
                                  
               

                           SCK = 1;
               
                          SCK = 0;
                                         if (SDA)
                                dat |= 0x80;
                       
               
}

        return dat;
}

但是结果是错的,作为菜鸟我感觉糊涂了 望论坛里的朋友指点,还有这种写法:
/**
* 读一个字节
*/
uint8 read_ds1302_byte(void)
{
        uint8 i,  k,dat=0;


       
        for (i=0;i<8;i++)
        {          
                         
                  
                              dat >>= 1;
                                  
                                k = SDA;

                           SCK = 1;
               
                          SCK = 0;
                                         if (k)
                                dat |= 0x80;
                       
               
}

        return dat;
}

跟 错误的写法有什么区别吗??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。