51单片机-1-PCF8591数据错误解决方案

针对51单片机在Protues仿真环境中驱动PCF8591时出现的数据错误问题,博主通过关闭中断、增加通道间延时以及读取两次数据的方式解决了通道数据错乱和多通道数据错误。解决方案包括在每个通道使用前后关闭中断,并在通道间插入适当延迟,以及针对多通道问题采用连续读取两次的方法来确保数据正确。
摘要由CSDN通过智能技术生成

如何解决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);
			

在这里插入图片描述
之前一直以为数据错乱是读取完数据后对数据进行运算引起的错误,目前终于知道解决方法。(本文仅供参考,若有错误,请同学帮忙在评论区提出,万分感谢)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值