打印
[DemoCode下载]

新唐MINI51 ADC模块初始化设置及应用实例

[复制链接]
1135|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奥德赛|  楼主 | 2016-3-7 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "Register_Bit.h"   //包含位定义文件   


//ADC通道号定义  
#define     ADC_Chanel0         (uint8_t)CHEN0  
#define     ADC_Chanel1         (uint8_t)CHEN1  
#define     ADC_Chanel2         (uint8_t)CHEN2  
#define     ADC_Chanel3         (uint8_t)CHEN3  
#define     ADC_Chanel4         (uint8_t)CHEN4  
#define     ADC_Chanel5         (uint8_t)CHEN5  
#define     ADC_Chanel6         (uint8_t)CHEN6  
#define     ADC_Chanel7         (uint8_t)CHEN7  

#define     ADC_IEN_ENB         ADCR |= ADIE; NVIC_ISER |= ADC_INT   
#define     ADC_IEN_DIS         ADCR &= ~ADIE; NVIC_ISER &= ~ADC_INT   


//*************************************  
// 函数名称:Init_Adc  
// 函数功能:adc初始化  
// 入口参数:无  
// 出口参数:无  
//***************************************/  
void Init_Adc(void)  
{  
//ADC输入时钟除频    器分频 12M/2 = 6M  ADC最大频率为6M  
    uint8_t Tmp = 2 ;  

    /* Reset ADC IP */      
    IPRSTC2 |= ADC_RST;  
    IPRSTC2 &= ~ADC_RST;  

    /* ADC engine clock enable */         
    APBCLK |= ADC_CLKEN;  
    CLKSEL1 = CLKSEL1 & (~ADC_CLK) | ADC_12M_32K;  

    /* Set ADC divisor */  
//    CLKDIV |= 0x00050000;   
    Tmp = Tmp - 1 ;  
    CLKDIV = (CLKDIV & (~(255<<16))) | (Tmp<<16) ;   

    /* ADC enable */  
    ADCR |= ADEN;  

    /* Set the ADC channel */  
//    ADCHER |= CHEN0;  

    /* Clear the A/D interrupt flags for safe */  
    ADSR |= ADF;     //写1清除AD转换结束标志  

    ADC_IEN_DIS ; //AD中断不使能  
//  ADC_IEN_ENB ;   
}  
//*************************************  
// 函数名称:ADC_IoInit  
// 函数功能:ADC IO 初始化  
// 入口参数:无  
// 出口参数:无  
//***************************************/  
void ADC_AN0IoInit(void)  
{  
    /* Configure P5.3 as analog input pin */  
    P5_MFP = (P5_MFP & (~P53_MFSEL)) | P53_AIN0;  
    /* Disable P5.3 digital input path */  
    P5_OFFD |= OFFD3;  
    /* Configure P5.3 as input mode */  
    P5_PMD = P5_PMD & (~Px3_PMD) | Px3_IN;   
}  
//=====通道1 IO ============  
void ADC_AN1IoInit(void)  
{  
    /* Configure P1.0 as analog input pin */  
    P1_MFP = (P1_MFP & (~P10_MFSEL)) | P10_AIN1;  
    /* Disable P1.0 digital input path */  
    P1_OFFD |= OFFD0;  
    /* Configure P1.0 as input mode */  
    P1_PMD = P1_PMD & (~Px0_PMD) | Px0_IN;   
}  
//*************************************  
// 函数名称:ADC_Switch  
// 函数功能:ADC 通道转换使能  
// 入口参数:无  
// 出口参数:无  
//***************************************/  
uint16_t ADC_Switch(uint8_t Chanel)  
{  
    uint16_t   u16Tmp = 0 ;  

    ADCR &= ~ADST;    //清启动位  
    /* Set the ADC channel */  
    ADCHER = (ADCHER & (~(255))) | Chanel ;  
    /* StartADC */  
    ADCR |= ADST;   
//      P00_ON ;  
    while((ADSR & ADF)==0) ; //等待AD转换结束   
//      P00_OFF ;  
    ADSR |= ADF ;   //写1清除AD转换结束标志  

    u16Tmp = (uint16_t)(ADDR0 & 0x000003FF);      

    return  u16Tmp ;  
}  


沙发
奥德赛|  楼主 | 2016-3-7 17:12 | 只看该作者
//----实例应用-----  

    Init_Adc() ; //ADC初始化设置  
    ADC_AN0IoInit() ; //通道0 IO设置  
    ADC_AN1IoInit() ; //通道1 IO设置  

//---主程序-----  
void main(void)  
{  
    while(1)  
    {  
        while(!F_10MS); //10MS跑一次主程序  
        F_10MS = 0 ;  

        g_u16Tmp = ADC_Switch(ADC_Chanel0) ; //转换通道0      

    }  

}  

使用特权

评论回复
板凳
李香兰| | 2016-3-8 20:46 | 只看该作者
这个新唐mini51的adc也是12位的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

397

帖子

3

粉丝