函数返回值一直都是0x00

2019-07-14 14:40发布

我又一个IIC的读函数如下;
u8 I2C_Read_Byte(unsigned char ack)  
{  
    //unsigned char i,receive=0;  
                u8 i,receive = 0;
    SDA_IN();
    for(i=0;i<8;i++ )  
    {  

                                SCL_H();
                          delay_us(5);
        receive<<=1;
                        
        if(READ_SDA())receive++;     
        delay_us(5);
        SCL_L();   
        delay_us(5);                        
    }                     
    if (!ack)  
        I2C_NACK();
    else  
        I2C_ACK();   
               
    return receive;  
}  


他的上一层是:void I2C_Read_Function(u8 ReadAddr,u8 ReData)
{
    I2C_START();  
    I2C_Send_Byte(PCF8563_ADDR_W);
    if(I2C_Wait_ACK())return;  
    I2C_Send_Byte(ReadAddr);
    if(I2C_Wait_ACK())return;  
    I2C_START();  
    I2C_Send_Byte(PCF8563_ADDR_R);      
    if(I2C_Wait_ACK())return;  
    ReData = I2C_Read_Byte(0);  
    I2C_STOP();  

}
而这个函数的上一层是:
I2C_Read_Function(PCF8563_SECOND_REGISTER,R_date.Second_Time);
这个函数在调试的时候发现,receive是有读取到值,当我顶层调用的时候,ReData也是有值的,可是顶层R_date.Second_Time的值一直都是0x00
这个是什么原因呢,数据类型都是U8没有问题啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
TOPCB
1楼-- · 2019-07-15 15:01
void I2C_Read_Function(u8 ReadAddr,u8 ReData),这里是错误的。要么用指针入口,要么用返回结果。
TOPCB
2楼-- · 2019-07-15 17:11
YY599566 发表于 2019-1-10 18:10
本帖最后由 watercici 于 2018-5-3 17:04 编辑

那下面这个函数呢:

入口的内容是什么,如果是0返回0是正常的。
cnm7
3楼-- · 2019-07-15 22:38
你逐行检测循环,看看数值在什么地方开始错误
YY599566
4楼-- · 2019-07-16 04:29
 精彩回答 2  元偷偷看……
YY599566
5楼-- · 2019-07-16 04:44
TOPCB 发表于 2019-1-10 19:06
void I2C_Read_Function(u8 ReadAddr,u8 ReData),这里是错误的。要么用指针入口,要么用返回结果。

对,这个问题弄明白了,是形参实参的问题
lee_st
6楼-- · 2019-07-16 09:13
时钟的问题了

一周热门 更多>