数码小叶 发表于 2016-3-21 10:41
看了几遍,觉得这个读时序是不是乱了啊,在写完地址后再次启动。。。。你把date直接复制0,看最后的数据是 ...
{:1_113:}
谢谢~!
确实是 写完地址后再次启动 时出错了。修改后可以正常读数了~!
修改后的I2C_readword(uchar)函数是:
ulong I2C_readword(uchar address)//读取一个16位数字
{
ulong date;
uchar MSB,LSB;
I2C_Start();//启动
if(I2C_writebyte(0x80)==0)
{
if(I2C_writebyte(address)==0) //发送芯片内地址
{
delay_ms(10);
I2C_Start();//启动
while(I2C_writebyte(0x81)==1)
{
delay_us(100);
I2C_Start();
}
MSB=I2C_readbyte();//获取数据
Mack();
LSB=I2C_readbyte();//获取数据
MNack();
I2C_Stop();//停止
LSB=LSB&0xfc;
}
else
{I2C_readword(address);}
}
else
{
I2C_readword(address);
}
date=(ulong)MSB*256+LSB;
delay_us(10);
return date;//返回数据
}