运用PIC16F1826作AD转换,在AN1,2,3上遇到了不能转换(测不到该脚上的电压)的问题,这些程序是在原16F616上通过的,只是稍作修改,移植过来的,编译没有任何问题,实测各引脚上均加有电压,但就是测不到,转换结果基本为0,采用8位AD也是同样的结果,由于这几个脚复用功能太多,复位时应该是将比较器,电容传感等功能设为关闭的,也进行过设置关闭,同样不起作用,不知什么原因,请各位帮手指点指点,以下为原程序:
/*==========================*/
void main(void)
{
PORTA=0b10010000;
TRISA=0b11011111;
PORTB=0b00001011;
TRISB=0b00010010;//RB0为CCP1
ANSELA=0b00000111;
ANSELB=0;
//TMRO intialize
OSCCON=0b01101010;//设置内部震荡为4MHZ
OPTION_REG=0b10000110;//禁止上拉使能,预分频器分配给TMR0,TMRO设置为128分频
TMR0=218;
INTCON=0b10100000;//TMR0中断使能,全局中断使能
while(1)
{
batvADC();
//其它处理
}
}
/*=========电压AD转换函数===========*/
void batvADC(void)
{
ADCON1=0b10010000;//ADC时钟8分频,参考电压VDD,转换结果右对齐
ADCON0=0b00001001;//使能ADC,并设置AD通道为AN2
_delay(100);
GO_nDONE=1;
while(GO_nDONE)
{
;
}
volvalue=ADRESH<<8+ADRESL;
} |