MSP430F42X系列单片机16位ADC通用程序库

发布者:RainbowPromise最新更新时间:2020-07-22 来源: 51hei关键字:MSP430F42X系列  单片机  16位ADC 手机看文章 扫描二维码
随时随地手机看文章

这个msp430单片机的16位ADC库文件的调用方法可先下载完整代码然后找到(例4.1.6)这一节,里面有调用方法

ADC16.c文件:

/*

MSP430F42X系列单片机16位ADC通用程序库


说明:该驱动程序库包含了常用的16位ADC操作与控制功能函数,如选择通道、设置信号放大倍数、设置数据格式、基准源输出开关等,以及常用采样函数,包括单通道采样、平均采样、多通道同时采样等。可以作为各种程序的底层驱动使用。

要使用该库函数,需要将本文件(ADC16.c)添加进工程,并在需要调用ADC函数的文件开头处包含"ADC16.h"

  

*/

//                        MSP430FE425

//                 +----------------------+

//                 |                      |

//    Vin->100:1-->| A0+               XIN|---

//    -10~+60V     | (ADC0)               |    32kHz

//    GND--------->| A0-              XOUT|---

//                 |                      |

//      1/2Vref    |                      |

//        |        |                      |   

//       |-|       |                 P2.2 |--------->向外部模拟电路供电

//    W1 | |<----->| A1+                  |

//       |_|       | (ADC1)               |

//        +------->| A1-             VREF |---+----->基准输出

//       GND       |                      |   |

//                 |                      |  ---

//      1/2Vref    |                      |  --- 1nF

//        |        |                      |   |

//       |-|       |                 AVss |---+

//    W2 | |<----->| A2+                  |   |

//       |_|       |  (ADC2)              |   |

//        +------->| A2-                  |  GND        

//       GND       |                      |

//                 +----------------------+

#include "msp430X42X.h"

unsigned int ADC_Result[3];

char ADC_Flag=0;

char GRP_Flag=0;

/****************************************************************************

* 名    称:ADC16_Init()

* 功    能:ADC初始化设置函数

* 入口参数:ADC: 选择当前被设置的ADC(0~3):  0=ADC0  1=ADC1  2=ADC2

            Channel:设置通道号(0~7)   每个ADC有8个通道可选择,42X单片机只用了

                    其中3个:通道0=外部电压输入 通道6=温度传感器 通道7=短路(0V)

            Sign:ADC输出数据格式选择:   'U'表示无符号格式,'S'表示有符号格式

                 无符号格式下,-Vref/2输入时,ADC输出数据 0

                                    0V输入时,ADC输出数据 32768

                               +Vref/2输入时,ADC输出数据 65535


                 有符号格式下,-Vref/2输入时,ADC输出数据 -32768

                                    0V输入时,ADC输出数据 0

                               +Vref/2输入时,ADC输出数据 32767

            

           Gain:内部放大器增益(1/2/4/8/16/32) 设置被测信号进入ADC之前的放大

                倍数。用该功能可以方便的改变量程。


* 出口参数:1表示设置成功,0表示参数错误,设置失败。

* 说    明: 在主程序调用ADC采样函数之前,需要调用该函数设置ADC工作模式和参数。

* 范    例: ADC16_Init(2,0,'S',1);将ADC2设为电压输入,有符号格式,增益=1

            ADC16_Init(1,6,'U',1);将ADC1输入接到内部温度传感器,无符号格式,增益=1

            ADC16_Init(0,7,'S',1);将ADC0输入短路(0V),有符号格式,增益=1

            ADC16_Init(1,0,'S',16);将ADC0设为电压输入,有符号格式,信号放大16倍

****************************************************************************/

char ADC16_Init(char ADC,char Channel,char Sign,char Gain)

{ unsigned int *SD16CCTL;              //ADCx控制寄存器选择指针

  unsigned int *SD16INCTL;             //ADCx输入寄存器选择指针

  SD16CTL|=SD16SSEL0+SD16DIV_1;        //设置ADC时钟SMCLK/2(524KHz)

  //试验发现500KHz左右采样效果较好,频率高噪声变大,频率低采样速度慢

//---------------------------------------------------------------------------   

  switch(ADC)                                      //选择当前设置哪个ADC。

   {

     case 0 :                                      //如果选择设置ADC0

             SD16CCTL =(unsigned int *)&SD16CCTL0; //指针指向ADC0控制寄存器

             SD16INCTL=(unsigned int *)&SD16INCTL0;//指针指向ADC0输入寄存器

             break;

     case 1 :                                      //如果选择设置ADC1

             SD16CCTL =(unsigned int *)&SD16CCTL1; //指针指向ADC1控制寄存器

             SD16INCTL=(unsigned int *)&SD16INCTL1;//指针指向ADC1输入寄存器

             break;

     case 2 :                                      //如果选择设置ADC2

             SD16CCTL =(unsigned int *)&SD16CCTL2; //指针指向ADC2控制寄存器

             SD16INCTL=(unsigned int *)&SD16INCTL2;//指针指向ADC2输入寄存器

             break;

     default: return(0);                  //选择了不存在的ADC,返回错误标志

   }

//---------------------------------------------------------------------------  

  if(Channel<=7)                          //设置ADCx的输入通道号

   {

     *SD16INCTL &=~ (BIT0+BIT1+BIT2);     //清除上一次设置

     *SD16INCTL |=Channel;                //设置新的通道号

   }     

  else     return(0);                     //选择了不存在的通道,返回错误标志

//---------------------------------------------------------------------------   

  if      ((Sign=='S')||(Sign=='s')) *SD16CCTL |= SD16DF;  //有符号(双极性)

  else if ((Sign=='U')||(Sign=='u')) *SD16CCTL &=~SD16DF;  //无符号(单极性)

  else    return(0);                      //设置了不存在的参数,返回错误标志

//---------------------------------------------------------------------------   

  *SD16INCTL&=~(SD16GAIN0+SD16GAIN1+SD16GAIN2);//清除上一次设置的增益

  switch(Gain)                                 //根据参数设置新的增益

  {

    case 1 : *SD16INCTL|=SD16GAIN_1; break;    //1倍

    case 2 : *SD16INCTL|=SD16GAIN_2; break;    //2倍

    case 4 : *SD16INCTL|=SD16GAIN_4; break;    //4倍

    case 8 : *SD16INCTL|=SD16GAIN_8; break;    //8倍

    case 16: *SD16INCTL|=SD16GAIN_16;break;    //16倍

    case 32: *SD16INCTL|=SD16GAIN_32;break;    //32倍

    default: return(0);               //设置了不存在的增益,返回错误标志

  }

//---------------------------------------------------------------------------   

  return(1);                          //设置成功,返回1

}

/****************************************************************************

* 名    称:ADC16_Sample()

* 功    能:单个ADC采样函数。

* 入口参数:ADC: 选择当前采样用的ADC(0~3):  0=ADC0  1=ADC1  2=ADC2

            AverageNum:采样平均次数(1~65535) 设为1即为单次采样。

* 出口参数:平均采样值。

* 说    明: 返回值是无符号数,如果ADC设置成有符号模式,返回值需强整成有符

            号数。或赋给int型变量。

* 范    例: val=ADC16_Sample(0,30); 返回ADC0连续采样30次的平均值,赋给val

            val=ADC16_Sample(1,1) ; 返回ADC1单次采样值,赋给val

[1] [2] [3]
关键字:MSP430F42X系列  单片机  16位ADC 引用地址:MSP430F42X系列单片机16位ADC通用程序库

上一篇:中国码电波机芯源码(仅供参考)MSP430单片机程序
下一篇:MSP430通过RC522实现门禁卡功能(RFID)

推荐阅读最新更新时间:2024-11-07 09:49

电子巡查系统中GPS智能移动终端设计
引言 现在以GPS(全球卫星定位系统)为核心的GIS(地理信息系统)设备正进入普及应用阶段。随着技术的发展,各种移动定位终端已经深入我们的生活,而同时人们需要更多基于位置的安全保障,于是也向GPS提出了新的要求,能否提供一种嵌入式GPS,提供安防联防诸如巡查过程中保安移动信息服务,位置监控调配服务等。不言而喻,GPS、微型嵌入式终端等新技术,必然成为GIS中一个新兴的重要研究领域。 本设计主要实现电子巡查系统(图1)智能终端两个关键技术环节:GPS信息获取以及空间位置信息、总台命令的无线交互传输。 系统设计 以往的保安巡查没有太多设备,人均一个对讲机,一条警棍。随着GPS的出现,基站即总台对每个保安的地理位置信息的掌握成为
[单片机]
电子巡查系统中GPS智能移动终端设计
单片机开发调试应注意的问题
1、使用总线不外引的单片机 ·是最正统的单片机使用模式 ·符合小型、简单、可靠、廉价的单片机设计初衷 ·总线封闭的产品最可靠 2、使用单片机C语言编程 * C语言是简洁、高效、而又最贴近硬件的高级编程语言 * 90年代初单片机C语言就已成熟为专业水平的高级语言,不应再有顾虑 * 当前厂商在推出新的单片机产品时纷纷配套C语言编译器 3、使用中、高档的单片机仿真工具 * 只有中、高档仿真工具才能仿真总线封闭式的单片机 * 仿真器必须使用band-out chip或hooks chip * 应支持高级语言的调试,提供全数据类型的查看和修改 * 支持多家软件公司汇编和编译产生的目标代码格式 * 中档仿真器的起步要求是至少解决了上
[单片机]
单片机之STM32 中的 assert_param 函数
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。 4 断言机制函数assert_param 我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型 #define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH))
[单片机]
<font color='red'>单片机</font>之STM32 中的 assert_param 函数
STM32单片机编程方式及工作原理
STM32单片机编程可以使用多种不同的编程语言和工具,下面是一些常用的编程方式: C语言编程:C语言是STM32单片机编程中最常用的编程语言之一,STM32提供了官方的标准外设库和HAL库来简化编程过程。 Keil:Keil是一款集成开发环境(IDE),它可以与多种编译器和调试器一起使用,包括ARM编译器和CMSIS-DAP调试器,使得开发者可以方便地进行编程、编译和调试。 STM32CubeIDE:STM32CubeIDE是STMicroelectronics提供的官方集成开发环境,可以使用C/C++语言编程,支持多种STM32单片机系列,提供了一系列的图形化工具和代码生成器,使得开发者可以更加方便地进行开发、调试和优化。
[单片机]
第四课 第一个单片机程序
任务:写一个单片机程序控制一个LED灯第隔一秒钟亮灭一次; 一、单片机程序的编写软件Keil C 那事 我们都用Keil C 来编写单片机程序,现在已经到第四版本了,但还是用第三版稳定,网上都有下载,googel一下就OK了。这里我就不多说了。 1、建立一个工程 慢慢的你会发现,凡是我们电子的开发软件都要先建立一个工程文件,这证明我们可是搞工程的哦。 打开软件, 打开软件 ,点工程 , 点新建 , 如上图所示,点第一个选项,出现提示要保存工程,找一个喜欢的地方保存起来,最好专门为工程新建一个文件夹。输入工程名保存后出现下图,选择单片机的型号,我们选Atmel公司
[单片机]
单片机控制步进电机PMW的驱动与放大
  单片机实现的步进电机控制系统具有成本低、使用灵活的特点,广泛应用于数控机床、机器人,定量进给、工业自动控制以及各种可控的有定位要求的机械工具等应用领域。步进电机是数字控制电机,将脉冲信号转换成角位移,电机的转速、停止的位置取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,非超载状态下,根据上述线性关系,再加上步进电机只有周期性误差而无累积误差,因此步进电机适用于单片机控制。步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速由脉冲信号频率决定。步进电机的 驱动电路 是根据单片机产生的控制信号进行工作。因此,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。   1 系统设计原理
[单片机]
<font color='red'>单片机</font>控制步进电机PMW的驱动与放大
STM32的12位ADC过采样实现16位分辨率
1.什么是过采样 过采样技术是一种以牺牲采样速度来提高ADC分辨率的技术。部分STM32单片机是支持硬件过采样的,如STM32G0系列。通过过采样,可以将12位的ADC提升到16位,非常实用。 根据过采样技术,每提高1位ADC分辨率,需要增加4倍的采样率。也就是说1次采样是12Bit,4次是13Bit,16次是14Bit,64次是15Bit,256次是16Bit,如果要更高分辨率,那么STM32的硬件过采样就无能为力了。 过采样主要通过配置ADC_SMPR寄存器的下面几位即可实现,配置移位位数、过采样倍数以及使能位。如下: 最大可配置为256倍过采样,实现16位分辨率。当采用256倍过采样时,得到的结果是20位的,但ADC
[单片机]
STM32的12位<font color='red'>ADC</font>过采样实现<font color='red'>16位</font>分辨率
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved