请问各位一下,AD转换结果,需要经过什么处理,,然后用if语句判断输出不同占空比的PWM..........
写了这样的一段程序,,为什么会在if语句的连续判断点处,,,灯光会闪。。。。应该怎么写呢?请赐教
电位器采样电压用示波器看了,,很稳定。。。。但是PWM波形在if语句的连续判断点处闪,,到底为什么呢
unsigned int Average()
{
unsigned int sum=0,min,max=min=ADC_data[0];
unsigned int m;
for(m=0;m<10;m++)
{
sum+=ADC_data[m];
if(ADC_data[m]<min) min=ADC_data[m];
if(ADC_data[m]>max) max=ADC_data[m];
}
sum=(sum-min-max)>>3;
return sum;
}
void adc_it() interrupt 5//分辨率2.44mv
{
ADC_CONTR&=~ADC_FLAG;
//if(t==0)
ADC_data[i]=(ADC_RES*4+ADC_RESL);//adhl2=(ADC_RES*4+ADC_RESL);//读取10位通道4的AD转换结果
i++;
if(i>=10)
{ EADC=0;
i=0;
adhl2=Average();
EADC=1;
}
ADC_RES=0;ADC_RESL=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START|ch;
}
void main()
{ //P1=0x00;
//CCP0=0;
InitADC();
pwm_init();
while(1)
{
getadv=5*adhl2*12/1024;
if(getadv<=41) c=0;
if(getadv>41&&getadv<=44) c=1;
if(getadv>44&&getadv<=47) c=2;
if(getadv>47&&getadv<=50) c=3;
if(getadv>50&&getadv<=53) c=4;
if(getadv>53&&getadv<=56) c=5;
if(getadv>56) c=6;
switch(c)
{
case 0:pwm_set(PWM[0]);PCA_PWM0=0x01;break;
case 1:PCA_PWM0=0x00;pwm_set(PWM[1]);break;
case 2:PCA_PWM0=0x00;pwm_set(PWM[2]);break;
case 3:PCA_PWM0=0x00;pwm_set(PWM[3]);break;
case 4:PCA_PWM0=0x00;pwm_set(PWM[4]);break;
case 5:PCA_PWM0=0x00;pwm_set(PWM[5]);break;
case 6:PCA_PWM0=0x00;pwm_set(PWM[6]);break;
case 7:PCA_PWM0=0x00;pwm_set(PWM[7]);break;
}
}
} |