欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

新唐M051 ADC模数转换程序

时间:2018-08-18 12:09来源:网络整理 作者:51自学网
以下程序是基于新唐M051单片机运行: /****************************************************************** *注 意:硬件上的AVDD一定要接上基准电压 ******************************************************************/ #

以下程序是基于新唐M051单片机运行:

 

/******************************************************************
 *注   意:硬件上的AVDD一定要接上基准电压
******************************************************************/
#include "SmartM_M0.h"

#define DEBUGMSG              printf
#define ADC_CLOCK_DIVIDER     0x00040000
#define ADC_CLK_Source        0x00000000

#define AREF_VOLTAGE          4480
     
STATIC VOID AdcInit(VOID)
{
 if(ADC_CLK_Source==0x00000004)
    {
        PLLCON |= PLL_SEL;
        PLL_Enable();

        /* 等待PLL稳定 */
  while((CLKSTATUS & PLL_STB) == 0); 
 }

    /* 复位ADC */   
    set_ADC_RST;
    clr_ADC_RST;

 /* ADC时钟使能 */      
    set_ADEN_CLK;
    if (ADC_CLK_Source==0x00000000 )
    {
        ADCClkSource_ex12MHZ;
    }
    else if(ADC_CLK_Source==0x00000004 )
    {
        ADCClkSource_PLL;
    }
    else if(ADC_CLK_Source==0x00000008 )
    {
        ADCClkSource_int22MHZ;
    }

    /* 设置ADC分频器 */
    CLKDIV=ADC_CLOCK_DIVIDER; 
 
    /* ADC使能 */
    set_ADEN;
    set_CALEN;   

 while(!(ADCALR&CALDONE));

    /* 单次转换模式 */
    setAD_SIG;             
    clr_DIFFEN;

 /* 设置ADC通道 */
    set_CHEN0;
    /* 使能P1.0为模拟输入引脚 */
    set_ADC0_channel;
 /* 禁止P1.0数字输入通道 */
 P1_OFFD |= OFFD0;
    /* 设置P1.0引脚为输入模式Configure P1.0 as input mode */
    P10_InputOnly;
    /* 清除ADC中断标志位 */
    set_ADF;      
}

/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{
     UINT32 unVoltageValue;

                           
  PROTECT_REG          //ISP下载时保护FLASH存储器
  (
   PWRCON |= XTL12M_EN;       //默认时钟源为外部晶振
   while((CLKSTATUS & XTL12M_STB) == 0);    //等待12MHz时钟稳定 
  
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟 
  )

  UartInit(12000000,9600);       //波特率设置为9600bps

  AdcInit();

  while(1)
  {
     set_ADST;            //启动ADC
  while(ADSR&ADF==0);        //等待ADC结束
  set_ADF;          //清空ADC结束标志位

  unVoltageValue = AREF_VOLTAGE*(ADDR0&0xFFF)/4096;//将ADC值转换为电压值

  DEBUGMSG("Voltage %d mv \r\n",unVoltageValue);

  Delayms(500);
  }
}

 

【发表评论】【告诉好友】【收藏此文】【】

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容