[讨论] PIC118F

neilperry   2018-11-26 15:54 楼主
参考电压,通道都选择好了,12位AD采样5V电压,为什么一直是255,不是4095???求大神解答

回复评论 (10)

结果寄存器设置右对齐,高位左移8位加地位,输出结果总是255,求解
点赞  2018-11-26 17:54
请给出具体芯片型号,相关程序设置及部分程序示例,才好分析呢‘’
点赞  2018-11-29 14:43
引用: dingzy_2002 发表于 2018-11-29 14:43
请给出具体芯片型号,相关程序设置及部分程序示例,才好分析呢‘’

PIC18F65K22,很早的片子
点赞  2018-11-30 11:35
我看下数据手册,再回复你
点赞  2018-11-30 16:27
最好有相关程序设置
点赞  2018-11-30 16:28
#define VN_AC1 1     //RA1(AN1)

void AdInit(void)
{
        ADCON0=0x01;               
        ADCON1=0x00;                                               
        ADCON2=0x82;                                       
        ADIE=0;                                                                //禁止中断
        ADIF=0;
}

unsigned int AD_Power(unsigned char channel)
{
        unsigned int AD_Dat=0;
        unsigned int Volt_Dat=0;
        unsigned int Sum=0;
        ADCON0&=~0x3c;
        ADCON0|=(channel<<2);
        __delay_us(20);
                GO=1;
                while(GO);
        AD_Dat=ADRESH*256+ADRESL;
        return AD_Dat;
}

VAC=AD_Power(VN_AC1);

printf("%u\r\n",VAC);

结果串口输出最大为255
点赞  2018-11-30 16:45
引用: dingzy_2002 发表于 2018-11-30 16:27
我看下数据手册,再回复你

嗯嗯,谢谢
点赞  2018-11-30 16:53
ANCON0=0b00110111;           //AN7   AN6   AN5   AN4   AN3   AN2   AN1  AN0
PORTA=0x00;
LATA=0x00;
TRISA=0b00110111;   
对应的IO口也设置了
点赞  2018-11-30 16:55
    ADCON0&=~0x3c;
        ADCON0|=(channel<<2);
这个设置不太正确
按标准,应该用一条指令就可以了,并且能做到相关位能确定
例子是:ADCON0=(channel<<2)+1,这样就可以了
点赞  2018-12-3 09:19
引用: dingzy_2002 发表于 2018-12-3 09:19
ADCON0&=~0x3c;
        ADCON0|=(channel

好的,我试试
点赞  2018-12-4 11:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复