我没有在中断子程序函数中执行数学函数。数学运算是在主程序中完成的。因为存在延迟。检查ADC转换中的三个SRF PLL用途的代码问题。这是我转换4个同步信号的代码。使用Time5中断。采样是成功的,在我所希望的10kHz频率,但在循环中,当我使用SIN COS公式,然后转换率被阻碍。解决方案包括“810ref.h”和“包括< xc.h>包括< xc.h>包括< libpic30.h>包括< stdio.h>包括< stdio.h>包括<端口.h>包括<数学>> int a,i,p,o void initAdcAdc1(void);浮ADCV值,r,r,y,y,b,θ浮vr[200],vy[],vb,vb,vr[200],vy[[],vb vb,vb,vb,vb;浮动theta6[],jj[200],gg[],vdd[];int main(){PLLFBD=46;//M=48CLKDIVbits.PLLPOST=0;//N2=2CLKDIVbits.PLLPRE=0;//N1=2//用PLL启动到主振荡器的时钟开关(NOSC=0b011)u builtin_write_OSCCONH(0x03);u builtin_write_OSCCONL(OSCCON|0x01);//等待时钟开关发生(OSCCONbits.COSC!(= 0B011);/ /等待PLL锁定(OSCCONbits.LOCK)!= 1);void __attribute__ ((__interrupt__,__no_auto_psv__))_PWM1Interrupt(void);void __attribute__((__interrupt__,__no_auto_psv__))_T5Interrupt(void);extern float ADCValue,r,y,b;int A,n,rr,yy,bb;float W,ma,alpha,beta,vd,theta,theta1,theta2,vdold,k3,k4,T,vq;vdold=0;theta2=0;theta=0,theta1=0;T=0.00001;n=937;//937=1khzi=0;A=n/2;ma=0.49;W=0.314;OSCCON=0x20C0;CLKDIV=0x0000;T5CON=0x8020;//8010 preset value(3=256 1=8 2=64)// IEC1= 0x1000;// IFS1=0xFFFF;//EFFF=set// IEC5=0x4000;//pwm// IFS5=0xFFFF;TMR5=0;PMD6=0x0000;PR5=93.75;//10khz=750//93.7a=1;p=1;PWMCON1=PWMCON3=PWMCON5=0x0605;PWMCON2=PWMCON4=PWMCON6=0x0605;IOCON1=IOCON3=IOCON5=0xC000;IOCON2=IOCON4=IOCON6=0xC002;//swaping pinALTDTR1=ALTDTR2=ALTDTR3=ALTDTR4=ALTDTR5=ALTDTR6=10 ;//5 microsecPTCON2=0x0006;//64=1khz,4=4kPHASE1=PHASE2=PHASE3=PHASE4=PHASE5=PHASE6=n;TRISE=0x0000;TRISC=0x0000;PTCON=0x8400;ADCValue=0;initAdc1();while(1){while(a){a=0;AD1CON1比特.SAMP=0;AD1CON1比特.DONE=0;ADCValue=ADC1BUF0;DONE=0;ADCV值=ADC1BUF0;//读AN5转换结果或an6r=ADC1BUF1;//读取AN5转换结果或AN1转换结果或an4b=ADC1BUF3 AN1转换结果或an4b=AD1b=ADC1BUF3;//读AN2转换或an5vr=rvr=r=r;vy=y=y=y;vy=y=y=y;vy=y=y=y=y;vb;α=0.66*r-0.66r-0-0.333*r-0.333*0.333*0.333*0是;ta=0.577*y-0.577*b;jj=alpha;//alpha=0.66*vr-0.333*vy-0.333*vb;// beta=0.577*vy-0.577*vb;vd=alpha*cos(theta)+beta*sin(theta);////these calculaton hampered my convertionvq=alpha*sin(theta)-beta*cos(theta);//vdd=vd;k3=317.25*T*T+1.43*T;k4=1.43*T;theta=-theta2+2*theta1+(k3*vd)-(k4*vdold);if(theta>=6.28 || theta<=0){theta=0;}vdold=vd;theta2=theta1;theta1=theta;// gg=beta;//theta6=theta;i++;if(i==200){i=0;}IFS1=0xEFFF;//setIEC1= 0x1000;}while(p){p=0;// PDC1=r;rr=A+A*0.5*sin(theta*o);PDC1=rr;o++;if(o==20){o=0;}IFS5=0xBFFF;IEC5=0x4000;}}}void initAdc1(void){ANSELB = 0xFFFF;//port is selected aS a aLogTrISB= 0xFFFF;AD1CON1= 0x00 8C;// 8=Time5AD1CON2= 0x0300;//(0300)3为1 2 3通道。每个周期后产生多信道(00=DMA访问位ADC中断)AD1CON3=0x1F00;//自动采样时间位F=TAD 16.tcy 15*TADAD1CON4=0x0000;//允许128个缓冲字到每个日志输入AD1CSSH=0x0000;AD1CSSL=0x0000;AD1CHS0bits.CH0SA=6;//为CH0+ve输入AD1CHS0bits选择AN6。NA=0; ///选择Vref-for CH0-ve输入端选择Vref-用于CH0输入AD1CHS123位.CH123SA=1;////为CH1+CH1+ve输入端选择AN0(123SA=1,然后是3,an4,an5)///////为CH2+CH2+ve输入端选择AN1,然后是3,an3,an4,an4,an5)////////选择AN1 CH2+CH2+ve输入端选择AN1,CH2+ve输入端选择AN1/选择AN1,CH2+CH2+输入端选择AN1/选择AN1,CH3+输入端选择AN1,CH2/选择AN1,ADON 1=1;ADON=1;ADON 1;AD1CON1bit.ADO1}无效_u属性_u(u中断_u中断_(u中断_u自动_psv_uu_auto_自动_psv_uu_____________u________auto_u_自动_uu))PWM1中断_PWM1中断(无效){外部int a{IFS1 IFS1,IFS1 IFS1=IFS5_IFS5_IFS5=IFS5=0XS5=0XFFFF;IES5=0XS5=0XFFFF;IES5=0XFFFF;IEC5 xFFFF;//EFFF=setIEC1=0x0000;a=1;.;}