本帖最后由 pchqs 于 2023-10-11 09:52 编辑
dsPIC的ADC组中断ADCInterrupt代码如下:
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
AdcParams.Count += 0x0001;
if(AdcParams.Count > 833)
{
AdcParams.Count = 0x0000;
AdcParams.IcOrigin = __builtin_divud(AdcParams.IcAccumulate,833);
AdcParams.IcAccumulate = 0;
AdcParams.IbOrigin = __builtin_divud(AdcParams.IbAccumulate,833);
AdcParams.IbAccumulate = 0;
AdcParams.IaOrigin = __builtin_divud(AdcParams.IaAccumulate,833);
AdcParams.IaAccumulate = 0;
AdcParams.UcOrigin = __builtin_divud(AdcParams.UcAccumulate,833);
AdcParams.UcAccumulate = 0;
AdcParams.UbOrigin = __builtin_divud(AdcParams.UbAccumulate,833);
AdcParams.UbAccumulate = 0;
AdcParams.UaOrigin = __builtin_divud(AdcParams.UaAccumulate,833);
AdcParams.UaAccumulate = 0;
AdcParams.UoutOrigin = __builtin_divud(AdcParams.UoutAccumulate,833);
AdcParams.UoutAccumulate = 0;
AdcParams.TemperatureOrigin = __builtin_divud(AdcParams.TemperatureAccumulate,833);
AdcParams.TemperatureAccumulate = 0;
SysTime.AdMs100 = 1;
}
else
{
AdcParams.siAdTemp1 = ADCBUF0;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.UaAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.UaAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF1;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.UbAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.UbAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF2;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.UcAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.UcAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF3;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.UoutAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.UoutAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF4;
AdcParams.siAdTemp2 = AdcParams.siAdTemp1;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.IaAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.IaAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF5;
AdcParams.siAdTemp1 = ADCBUF6;
if(AdcParams.siAdTemp1> AD_BASE)
{AdcParams.IcAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.IcAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 += AdcParams.siAdTemp2;
if(AdcParams.siAdTemp1 > AD_BASE)
{AdcParams.IbAccumulate += AdcParams.siAdTemp1;}
else{AdcParams.IbAccumulate -= AdcParams.siAdTemp1;}
AdcParams.siAdTemp1 = ADCBUF7;
AdcParams.siAdTemp1 += 2048;
AdcParams.TemperatureAccumulate += AdcParams.siAdTemp1;
}
IFS0bits.ADIF = 0; //清AD中断标志位
return;
}
|