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