SCANIF的SIFDACRx校不准,代码如下,请指教
取值代码:
m=10;
SIFCTL1 = 0;
SIFCTL3 &= ~(SIFIFGSET0 | SIFIFGSET1 |SIFIFGSET2);
SIFCTL3 |= 0;
j=0;
while (j<m) //取十次值
{
SIFCTL1 = 0;
SIFDACR0 = 0x02FF; // SIFCH.0 - set to maximum value
SIFDACR1 = 0x02FF;
SIFCTL1 = 0x0201;
SIFOUT_Sta =FALSE;
for(k=0;(k<1000) && (SIFOUT_Sta==FALSE);k++)
{
for(i=0;i<=2000;i++)Feed_Dog();
SIFDACR0=SIFDACR0-1;
SIFDACR1=SIFDACR1-1;
}
if(SIFOUT_Sta==TRUE)
{
SIFOUT_Sta =FALSE;
V0[j++] = SIFDACR1+1;
}
}
SIFCTL1 = 0;
SIFCTL3 &= ~(SIFIFGSET0 | SIFIFGSET1 |SIFIFGSET2);
SIFCTL3 |= SIFIFGSET0;
j=0;
while (j<m)
{
SIFCTL1 = 0;
SIFDACR0 = 0x200;
SIFDACR1 = 0x200;
SIFCTL1 = 0x0201;
SIFOUT_Sta =FALSE;
for(k=0;(k<1000) && (SIFOUT_Sta==FALSE);k++)
{
for(i=0;i<=2000;i++)Feed_Dog();
SIFDACR0=SIFDACR0+1;
SIFDACR1=SIFDACR1+1;
}
if(SIFOUT_Sta==TRUE)
{
SIFOUT_Sta =FALSE;
V1[j++] = SIFDACR1-1;
}
}
SIFCTL1 = 0;
V2=0;
Rank_Data(V0,m); //从大到小排序
Rank_Data(V1,m);
for(j=2;j<8;j++) //去除最大的两个和最小的两个取平均值
V2 += (V1[j] + V0[j]);
V2 /=12;
Calibration.SIFDACR_0 = V2 + 10;
Calibration.SIFDACR_1 = V2 - 5;
其中SIFOUT_Sta 由SCANIF的SIFIFG0中断来置为TRUE