如何解决protues仿真中51单片机驱动PCF8591出现数据错误问题
1个通道数据对应错乱
2多通道数据使用时数据错误
解决:
1、每个通道使用前需要关闭中断EA=0;使用完后再打开中断(单通道容易出现的问题)
每个通道之间使用时需要延时
EA=0;
d1 =du24c02(0x00);
EA=1;
delay(100);
EA=0;
v1 =du24c02(0x01);
EA=1;
delay(100);
2、百度一下发现有些人出现 PCF8591
每读出一次,它启动一次转换
转换的结果,在下次,才能读出 于是我试了一下确实存在这个现象(多通道出现的问题)
void main()
{
uint ix;
intlInit();
InitLcd1602();
buzz=0;
while(1)
{
EA=0;
d1 =du24c02(0x00); //输入adc电压的100倍。0.49=5(参照电压)*/1024(10位)*100(用于显示)1.96*5=9.8
EA=1;
d1 = 9.8*d1-1250; //实际电流的100倍用于显示,cur_real=(vol_real-2.5)*5
delay(100);
EA=0;
v1 =du24c02(0x01);
EA=1;
v1 = v1*1.96; //5-500
delay(100);
display();
swtch();
keyscan();
}
}
结果 电流值通道和电压值通道发生了调换
读取两次后解决问题
for(ix=0;ix<2;ix++)
{
EA=0;
d1 =du24c02(0x00); //输入adc电压的100倍。0.49=5(参照电压)*/1024(10位)*100(用于显示)1.96*5=9.8
EA=1;
}
d1 = 9.8*d1-1250; //实际电流的100倍用于显示,cur_real=(vol_real-2.5)*5
delay(100);
for(ix=0;ix<2;ix++)
{
EA=0;
v1 =du24c02(0x01);
EA=1;
}
v1 = v1*1.96; //5-500
delay(100);
之前一直以为数据错乱是读取完数据后对数据进行运算引起的错误,目前终于知道解决方法。(本文仅供参考,若有错误,请同学帮忙在评论区提出,万分感谢)