我又一个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_Func
tion(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没有问题啊?
老铁 黑皮男说的对
你坚持值传递也可以如下
u8 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();
return ReData ;
}
R_date.Second_Time=I2C_Read_Function(PCF8563_SECOND_REGISTER);
一周热门 更多>