8-bit PIC (請註明使用元件編號):: 12F1822 AN0無法讀取
我覺得是執行 ADGO = 1 之後,
並沒有等待 ADC 轉換完成的關係.
因為程式中的 if(ADIE && ADIF),
只會判斷是否已經有轉換完成的數值可取.
並沒有實際等待 ADC 進行轉換工作.
請試試如下:
OSCCON = 0X70;
APFCON = 0x00;
WPUA = 0x00;
ANSELA = 0x13;
PORTA = 0x08;
LATA = 0x00;
TRISA = 0x17;
FVRCON = 0x82;
ADCON1 = 0xE0;
ADON = 1;
INTCON = 0xF0;
ADCON0 &= 0x83;
ADCON0 |= 0x00;
ADIE = 1;
ADGO = 1;
while(ADGO == 1); // <--- Wait ADC converting
if(ADIE && ADIF)
{
ADIE = 0;
ADGO = 0;
fbk_reg = ADRESH;
fbk_reg <<= 8;
fbk_reg += ADRESL;
ADIF = 0;
}
當然, 如果是這樣改時...
if(ADIE && ADIF) 看起來就沒有必要了, 你可以將它去掉.
我覺得是執行 ADGO = 1 之後,
並沒有等待 ADC 轉換完成的關係.
因為程式中的 if(ADIE && ADIF),
只會判斷是否已經有轉換完成的數值可取.
並沒有實際等待 ADC 進行轉換工作.
請試試如下:
OSCCON = 0X70;
APFCON = 0x00;
WPUA = 0x00;
ANSELA = 0x13;
PORTA = 0x08;
LATA = 0x00;
TRISA = 0x17;
FVRCON = 0x82;
ADCON1 = 0xE0;
ADON = 1;
INTCON = 0xF0;
ADCON0 &= 0x83;
ADCON0 |= 0x00;
ADIE = 1;
ADGO = 1;
while(ADGO == 1); // <--- Wait ADC converting
if(ADIE && ADIF)
{
ADIE = 0;
ADGO = 0;
fbk_reg = ADRESH;
fbk_reg <<= 8;
fbk_reg += ADRESL;
ADIF = 0;
}
當然, 如果是這樣改時...
if(ADIE && ADIF) 看起來就沒有必要了, 你可以將它去掉.






