请问各位为什么下面的I2C总线程序(AD转换)需要空读一次芯片PCF8591请问各位为什么下面的I2C总线程序(AD转换)需要空读一次芯片PCF8591
请问各位为什么下面的总线程序转换需要空读一次 芯片I2C(A/D)::PCF8591
2011-5-9 11:23
提问者:浏览次数:次 xyzhong163 |451
//-------------------------------------------------------------------
// ADC_PCF8591 函数名称:
// controlbyte 入口参数:控制字
// 4A/Dreceivebu...
请问各位为什么下面的I2C总线程序(AD转换)需要空读一次芯片PCF8591
请问各位为什么下面的总线程序转换需要空读一次 芯片I2C(A/D)::PCF8591
2011-5-9 11:23
提问者:浏览次数:次 xyzhong163 |451
//-------------------------------------------------------------------
// ADC_PCF8591 函数名称:
// controlbyte 入口参数:控制字
// 4A/Dreceivebuf 函数功能:连续读入路通道的转换结果到//-------------------------------------------------------------------
void ADC_PCF8591(uchar controlbyte)
{
uchar idata receive_da,i=0;
iic_start();
IICSendByte(PCF8591_WRITE); // 1001 000 0 控制字
check_ACK();
if(askflag == 1)
{
SystemError = 1;
return;
}
IICSendByte(controlbyte); // 控制字
check_ACK();
if(askflag == 1)
{
SystemError = 1;
return;
}
iic_start(); // 重新发送开始命令
IICSendByte(PCF8591_READ); // 1001 000 1 控制字
check_ACK();
if(askflag == 1)
{
SystemError = 1;
return;
}
IICreceiveByte(); // 空读一次,调整读顺序
slave_ACK(); // 收到一个字节后发送一个应答位
while(i<4)
{
receive_da=IICreceiveByte();
receivebuf[i++]=receive_da;
slave_ACK(); // 收到一个字节后发送一个应答位
}
slave_NOACK(); // 收到最后一个字节后发送一个非应答位
iic_stop();
}
我来帮他解答
2011-5-9 19:52
满意回答
, 因为第一次读到的数据是上次转换的数据要想得到这一次的数据需要第二次读取提问者对回答的评价:
!!!0, 谢谢您的回复我觉得主要是因为自动增量模式的下一个读取通道一定是通道
本文档为【请问各位为什么下面的I2C总线程序(AD转换)需要空读一次芯片PCF8591】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。