Embedded 读取模拟PIC端口

Embedded 读取模拟PIC端口,embedded,pic,Embedded,Pic,我正在尝试读取PIC16F690上的多个模拟端口。我能读2,但我读不到3。i、 下面,AN1,AN2起作用,但AN3不起作用。我对TRISA、ANSEL、ADCON1或ADCON0有什么错吗 TRISA = 0b00010111; // all port A:0,1,2,4 as inputs ANSEL = 0b11111111; // RA0->RA1 are Analog ADCON1 = 0b01010000; // sel

我正在尝试读取PIC16F690上的多个模拟端口。我能读2,但我读不到3。i、 下面,AN1,AN2起作用,但AN3不起作用。我对TRISA、ANSEL、ADCON1或ADCON0有什么错吗

TRISA   = 0b00010111;         // all port A:0,1,2,4 as inputs
ANSEL   = 0b11111111;         // RA0->RA1 are Analog
ADCON1  = 0b01010000;         // select ADC clock (500 Khz)

ADCON0  = 0b10000101;         //peripheral 1 - PORT A:1 - AN1
__delay_us(250);
unsigned short nRet;
ADCON0 |= 0x02;             // Start conversion
while(ADCON0 & 0x02)        // wait for conversion
 {
 }
 nRet = ADRESH;
 nRet <<=8;
 nRet += ADRESL;


ADCON0  = 0b10001001;         //peripheral 2 - PORT A:2 - AN2
__delay_us(250);
unsigned short nRet;
ADCON0 |= 0x02;             // Start conversion
while(ADCON0 & 0x02)        // wait for conversion
{
 }
 nRet = ADRESH;
 nRet <<=8;
 nRet += ADRESL;

    ADCON0  = 0b10001101;         //peripheral 2 - PORT A:4 - AN3
    __delay_us(250);
    unsigned short nRet;
    ADCON0 |= 0x02;             // Start conversion

    while(ADCON0 & 0x02)        // wait for conversion
    {
    }
    nRet = ADRESH;
    nRet <<=8;
    nRet += ADRESL;

   return (nRet & 0x3FF);
TRISA=0b00010111;//所有端口A:0,1,2,4作为输入
ANSEL=0b11111111;//RA0->RA1是模拟的
ADCON1=0b01010000;//选择ADC时钟(500 Khz)
ADCON0=0b10000101//外围设备1-端口A:1-AN1
__延期付款(250);
无符号短nRet;
ADCON0 |=0x02;//开始转换
while(ADCON0&0x02)//等待转换
{
}
nRet=ADRESH;

nRet你的时钟模式是什么

查看数据表中的“时钟模式”部分或配置寄存器中的p176“配置位”,您可以在不同的时钟模式之间进行选择

您可能正在使用INTOSC模式(CONFIG.FOSC2-0=101)

您可以改用INTOSCIO(CONFIG.FOSC2-0=100)

对于RC->RCIO模式(CONFIG.FOSC2-0=111->CONFIG.FOSC2-0=110)也是如此

CLKOUT模式有可能优先于A/D模式。尝试更改时钟模式

再见

 "CLKOUT function on RA4/AN3/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN". 
   "I/O function on RA4/AN3/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN"