刚入门,做毕设,改了N次程序。
为什么下面的程序运行之后A通道得到的值为0.
AD转换采样五次,算平均值。
void time0_init(void)
{
//AUXR = 0x80; //¶¨Ê±Æ÷0¹¤×÷ÔÚ1Tģʽ£¬Ö»ÓÐSTC1Tµ¥Æ¬»ú²ÅÓеŦÄÜ
AUXR = 0x00; //¶¨Ê±Æ÷0¹¤×÷ÔÚ12Tģʽ£¬ÍêÈ«ÓëAT89CϵÁÐÒ»ÑùµÄ
TMOD = 0x01; //¶¨Ê±Æ÷0¹¤×÷ÔÚ1ģʽ£¬16λ
TL0 = T1MS; //¶¨Ê±Æ÷0¼ÆÊý³õʼ»¯µÍ×Ö½Ú
TH0 = T1MS >> 8; //¶¨Ê±Æ÷0¼ÆÊý³õʼ»¯¸ß×Ö½Ú
TR0 = 1; //Æô¶¯¶¨Ê±Æ÷0
ET0 = 1; //ʹÓö¨Ê±Æ÷0ÖжϹ¦ÄÜ
EA = 1; //´ò¿ª×ÜÖжÏ
}
void tm0_isr() interrupt 1 using 1
{ TL0 = T1MS; //ÖØÐÂ×°Ôض¨Ê±Æ÷0³õÖµµÍλ
TH0 = T1MS >> 8; //ÖØÐÂ×°Ôض¨Ê±Æ÷0³õÖµ¸ßλ
if(++ct==1000)
{ct=0;
p54= !p54;
get_ADC2ms();
}
}
void ADCinit()
{ P5n_pure_input(0x01); //ÉèÖÃÒª×öADCµÄIO×ö¸ß×èÊäÈë
ch=3;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR = 0x80 + 3; //ADC on + channel
//ADC_CONTR = ADC_POWER | ADC_START | ch;
ADCCFG = RES_FMT + ADC_SPEED;
delay_ms(10);
EADC = 1; //ÔÊÐíADCÖжÏ
}
/*========================================================================
º¯Êý: void ADC_int (void) interrupt 5
ÃèÊö: ADCÖжϺ¯Êý.
²ÎÊý: none.
·µ»Ø: none.
°æ±¾: VER1.0
ÈÕÆÚ: 2018-4-1
±¸×¢:
========================================================================*/
void ADC_int (void) interrupt 5
{
ADC_CONTR &= ~ADC_FLAG;
adc = (u16)ADC_RES * 256 + (u16)ADC_RESL; //¶ÁADC½á¹û
B_ADC_OK = 1; //±êÖ¾ADCÒÑÍê³É
ADC_RES = 0;
ADC_RESL = 0;
B_ADC_OK = 0;
}
unsigned long get_ADC2ms()
{if(ch==4)
{ADC_CONTR = 0x80 | ADC_START | 4;
adc1=adc;
}
if(ch==5)
ADC_CONTR = 0x80 | ADC_START | 5;
adc2=adc;
if(ch==3)
ADC_CONTR = 0x80 | ADC_START | 3;
adc3=adc;
return 0;
}
unsigned long get_ADC()
{
ADCinit();
EA = 1;
sum1+=abs(adc1);
//sum2+=adc2;
//sum3+=adc3;
Average1=sum1/5;
//Average2=sum2/5;
//Average3=sum3/5;
return 0;
}