原来的是这样的:
BOOL DR_SingleAD(void) //单次A/D转换
{
//PORTACFG=0x01;
read1543(channel_13); // A/D读函数
EP0BUF[0]=0xA1;
EP0BUF[1]=CHDataL;
EP0BUF[2]=CHDataH;
EP0BCH=0;
EP0BCL=3;
EP0CS |= bmHSNAK;
return(TRUE);
}
就是AD转换后进行赋值,把低位赋给EP0BUF[1],高位赋给EP0BUF[2]
现在需要进行200次A/D转换后取平均值再分别赋给低高位
我改成如下,但结果还是不正确,请问哪里出问题了呢?
BOOL DR_SingleAD(void) //单次A/D转换
{
uint i,X,Y,S2=0;
//PORTACFG=0x01;
for(i=0;i<200;i++)
{
read1543(channel_13);
X=CHDataL;
Y=CHDataH;
S2=X+Y<<8;
}
Y=S2/200;
EP0BUF[0]=0xA1;
EP0BUF[1]=Y&0xff;
EP0BUF[2]=(Y&0xff00)>>8;
EP0BCH=0;
EP0BCL=3;
EP0CS |= bmHSNAK;
return(TRUE);
}
2 个解决方案
#1
#2
应当是for循环中,没有对S2变量进行累加导致。可以再确认一下
#1
#2
应当是for循环中,没有对S2变量进行累加导致。可以再确认一下