打印
[DemoCode下载]

新唐M051 ADC模数转换程序

[复制链接]
1753|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangcunxiake|  楼主 | 2017-4-24 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************************************** 
*注   意:硬件上的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);
  }
}


沙发
gejigeji521| | 2017-4-24 16:49 | 只看该作者
这个代码跟官方的兼容吗

使用特权

评论回复
板凳
稳稳の幸福| | 2017-4-24 17:26 | 只看该作者
看了好多外设的操作,都是难道外设配置上。

使用特权

评论回复
地板
wahahaheihei| | 2017-4-24 22:20 | 只看该作者
(ADC_CLK_Source==0x00000004)
这个后面的数字上的好唐突。

使用特权

评论回复
5
捉虫天师| | 2017-4-24 22:41 | 只看该作者
不知道是不是这个系列的库函数编写的问题,看着总是怪怪的。

使用特权

评论回复
6
bingkaiok| | 2017-4-24 22:57 | 只看该作者
这个是高人优化的代码,自己加了宏定义,精简高效

使用特权

评论回复
7
zcllom| | 2017-7-11 12:28 | 只看该作者
代码不全,贴出来有个什么用?用了那么多宏,宏定义跑哪儿去了?

使用特权

评论回复
8
天灵灵地灵灵| | 2017-7-11 19:26 | 只看该作者
应该查查头文件包含了什么。

使用特权

评论回复
9
天灵灵地灵灵| | 2017-7-11 19:50 | 只看该作者
查了一下,头文件里通常是这些内容
#ifndef __SMARTM_M4_H__
#define __SMARTM_M4_H__

/*
  ----------------------------------------------------

                       系统
  
  ----------------------------------------------------
*/
#include "stdio.h"
#include "string.h"
#include "M451Series.h"
#include "Common.h"
#include "Typedef.h"


/*
  ----------------------------------------------------

                       外设
  
  ----------------------------------------------------
*/
#include "gpio.h"
#include "acmp.h"

/*
  ----------------------------------------------------

                       配置
  
  ----------------------------------------------------
*/

#define PLL_CLOCK   12000000UL



#endif


使用特权

评论回复
10
天灵灵地灵灵| | 2017-7-11 19:51 | 只看该作者
就是把所有的集中到了一个里面,这样结构上看着干净多了,还是官方的那些内容。

使用特权

评论回复
11
zhuotuzi| | 2017-7-12 19:58 | 只看该作者
新唐的51内核,提供的代码都有点自己的特点。

使用特权

评论回复
12
dianbeng007| | 2017-9-25 14:44 | 只看该作者
好代码,寄存器操作,简单高效,但是不易移植

使用特权

评论回复
13
huangcunxiake|  楼主 | 2017-9-30 20:17 | 只看该作者
是的,如果用库函数效果更好。

使用特权

评论回复
14
稳稳の幸福| | 2017-9-30 20:52 | 只看该作者
代码的简练好用,是其他家没法比的。

使用特权

评论回复
15
mintspring| | 2017-9-30 22:23 | 只看该作者
adc有自己的时钟源,配置好就可以用了

使用特权

评论回复
16
wahahaheihei| | 2017-10-1 14:03 | 只看该作者
  unVoltageValue = AREF_VOLTAGE*(ADDR0&0xFFF)/4096;//将ADC值转换为电压值

使用特权

评论回复
17
yiy| | 2017-10-1 19:40 | 只看该作者
代码很完整啊,就是几个头文件而已

使用特权

评论回复
18
734774645| | 2017-10-2 11:09 | 只看该作者
我准备把这个封装成一个函数,这样方便实用

使用特权

评论回复
19
xinpian101| | 2017-10-2 22:50 | 只看该作者
那个数字没有用宏表示,我觉得很难理解了

使用特权

评论回复
20
heisexingqisi| | 2017-10-3 09:58 | 只看该作者
感觉很多语句不是程序,应该是宏。

使用特权

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

本版积分规则

204

主题

3476

帖子

10

粉丝