PIC12Fxxx芯片读取AD范例

一、芯片框图

 二、配置

/*
    配置和使用ADC时,请执行以下操作
    必须考虑以下职能:
 * 端口配置
ANSELA = 0x00; // 全部数字
WPUA = 0b00000000; // RA3弱上拉OFF
 * 频道选择
    CHS<4:0>:模拟通道选择位
    11111=FVR(固定电压基准)缓冲器1输出(3)
    11110=DAC(数模转换器)(2)
    1101=温度指示器(1)
    00011=AN3;//00010=AN2;//00001=AN1//00000=AN0
ADCON0bits.CHS = 0;
 * ADC参考电压选择
    ADPREF<1:0>:ADC正电压参考配置位
    11=VRPOS连接到内部固定电压基准(FVR)
    10=VRPOS连接到外部VREF+引脚(1)
    01=保留
    00=VRPOS已连接到VDD  
 ADCON1bits.ADPREF = 0;
 * ADC转换时钟源
    ADC<2:0>:ADC转换时钟选择位111=FRC(由内部RC振荡器提供的时钟)110=FOSC/64;101=FOSC/16;100=FOSC/4;011=FRC(由内部RC振荡器提供的时钟)
    010=FOSC/32;001=FOSC/8;000=FOSC/2
ADCON1bits.ADCS = 6 ; 
 * 中断控制
    TRIGSEL<3:0>:自动转换触发器选择位(1) //0000=未选择自动转换触发器 //其它见数据手册
ADCON2bits.TRIGSEL = 0;
 * 结果格式 
    ADFM:ADC结果格式选择位/1=右对齐。ADRESH的六个最高有效位设置为“0”加载。/0=左对齐,ADRESL的六个最低有效位设置为“0”加载。
ADCON1bits.ADFM = 1 ; 
 * 启用位
    ADON:ADC启用位
    1=ADC已启用
    0=ADC被禁用且不消耗工作电流   
ADCON0bits.ADON = 0;  //不启用.
 */

三、示例代码

//ADC初始化
void ADC_init(void)
{
    ADCON1bits.ADPREF = 0;  //ADC参考电压选择VDD 
    ADCON1bits.ADCS = 6 ;   //ADC转换时钟源 选择110=FOSC/64;
    ADCON2bits.TRIGSEL = 0; //触发方式:0000=未选择自动转换触发器
    ADCON1bits.ADFM = 1 ;   //结果格式:1=右对齐。ADRESH的六个最高有效位设置为“0”加载。
}

//读取通道

unsigned short int Get_ADCVal(unsigned char ch)
{
    unsigned  short int val ;
    ADCON0bits.ADON = 1;    //启用AD
    if(ch>0b11111) ch = 0b11111;
    ADCON0bits.CHS = ch;     //选择通道
    for(val = 300;val!=0;val--)    NOP();  //延时
 //   __delay_ms(2);
    GO = 1;//开始转换
    while(GO);  //等待转换结束
    val = ADRES; //获取转换值
    ADCON0bits.ADON = 0;   //停用AD
    return val;                         //返回转换值
}

以上代码经过实测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值