pic12f675 ADC程序弄疯了,还是没有调通,谁有例程的给个啊,谢谢

2019-03-25 18:55发布


MPLAB X IDE 环境,编译器用xc8
pic12f675 芯片
GP1用作ADC输入,下面的程序调了3天没调通,返回的数据总是0或者0xffff,不知道问题在哪了
unsigned int ADCRead()
{
    unsigned int temp;
    ADON=1;
    GO_nDONE=1;  //adc start
    while(GO_nDONE);
    temp=ADRESH<<8+ADRESL;
    return(temp);
}

void ADCInit()
{
   TRISIO1=1;//ADC  //GP1输入
    ADCON0=0b10000100;    //右对齐,AN0
    ANSEL =0b00010010;     //Fosc/8
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
dingzy_2002
2019-03-26 05:23
本帖最后由 dingzy_2002 于 2015-3-11 10:46 编辑

首先这句:temp=ADRESH<<8+ADRESL;要强制转换成int格式的
我给个例程吧(这是PIC16F887的):
/*---------------------------------------------
函数名: uint16_t adc10_conv(uint8_t ad_ch)
描述: AD转换函数(10位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint16_t adc10_conv(uint8_t ad_ch)
{
uint16_t ad_value;        
ADFM  = 1;  //结果右对齐
ADCON0  =  ad_ch; //
ADON  = 1;  //打开AD模块
delay_5us;
GO  =  1;   //启动转换
while(GO) ;  //等待转换完成
GO  =  1;   //启动转换
while(GO) ;  //等待转换完成
ADON  = 0;  //关闭AD模块
ad_value = (uint16_t)(ADRESL | (ADRESH << 8));   //注意是10位的转换精度 value、temph应为unsigned int 变量
return(ad_value);
}

一周热门 更多>