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-21 02:16

单片机89C51与A/D转换器MAX195的接口设计
MAX195是16位逐次逼近方式的ADC。它将高精度、高速度、低电源功耗(消耗电流仅10μA)的关闭方式等性能结合在一起。内部校准电路对线性度与偏置误差进行校正,所以无需外部调整便可达到全部额定的性能指标。电容性的DAC结构使之具有特有的85kbps跟踪/保持功能,变换时间仅需9.4μs。三态串行数据输出及引脚可选的单极性(0~VREF)或双极性(-VREF~+VREF)的输入范围使之可广泛应用于便携式仪表、医用信号采集及多传感器测量等系统中。    1 MAX195引脚及说明   MAX195有16个引脚,其排列如图1所示。    2 MAX195转换原理及时序   MAX195片内含有电容性的数字模拟变换器(D
[单片机]
PIC16F87X系列单片机引起内部复位的条件和原因分析
PIC16F87X系列单片机的复位功能设计得比较完善,引起单片机内部复位的条件和原因可以大致归纳成以下5种. 1.上电复位 每次单片机加电时,上电复位电路都要对电源电压VDD的上升过程进行检测,当VDD值上升到规定值1.6~1.8V时,就产生一个有效的复位信号,需经过72ms加1024个时钟周期的延时,才会使单片机复位。 2.人工复位(单片机在执行程序期间) 无论是单片机在按预先设定的正常顺序运行程序,还是出现单片机进入不可预知的某一个死循环,都必须认为单片机在执行程序。单片机在执行程序期间,只要在人工复位端MCLR加入一个低电平信号,就会令其复位。 3.人工复位(单片机在睡眠期间) 单片机处在睡眠状态之下(时钟停振,
[单片机]
PIC16F87X<font color='red'>系列</font><font color='red'>单片机</font>引起内部复位的条件和原因分析
单片机的C编程<3>
说明:以下程序都是经过本人亲自调试并成功. 目的:开关控制蜂鸣器的响动与LED灯显示 程序如下: #include reg52.h sbit S5=P1^5; //开关控制 sbit k1=P3^5; //蜂鸣 sbit led1=P3^6; //小灯 sbit led2=P3^7; void main(void) { while(1) { if(S5==1) { led1=0; led2=1; k1=0xff; } else { led1=1; led2=0;
[单片机]
单片机中的浮点数编程
问题背景: 在使用8BIT单片机进行开发,不支持浮点数运算。但是开发必须用到sin,cos,arctan等浮点数函数。 苦想了两天,才发现,自己要当一回 计算机 。 单片机不支持浮点数,可是编程却一定要用到小数。这时,只好自定义 定点小数 了。 所需的浮点数范围有两个区域-1~1,-60~60。精度就按小数点后2、3位了。 如果在高级语言中,我想定义的数组是 double arctantable = { 0.0174551, 0.0349208, 0.0524078, 0.0699268, 0.0874887, 0.105104, 0.122785, 0.140541
[单片机]
PIC单片机精通_ADC左对齐与右对齐的数据读取问题
1.右对齐数据读取问题 其转换结果可以读取的语句为: resualt=int(ADCH)*256+ADCL; 右对齐的时候,10位ADC的结果表示方式为ADCH:ADCL,ADCH是10bit结果的高2位,ADCL是10bit结果的低8位,如果要将ADC的结果存储到一个int型的变量中,那就需要先将ADCH的结果左移8位,再和ADCL的相加,其原理如下图所示: 左移8位等价于乘以256. 也可以将ADC转化为以256为权的数值表示,即: resualt = int(ADCH)*256^1+ADCL*256^0; 这样就可以清楚地理解这个数字的含义了。 2.左对齐数据读取问题 同理,左对齐如下表示:
[单片机]
51单片机与PC上位机串口通信之LED控制
PC机通过上层软件控制单片机LED的亮灭或者控制LED的闪烁及闪烁时间,上层软件用户名密码均为admin 注意PROTEUS串口仿真需要配合虚拟串口软件才能工作 上位机(包含源码)软件说明: 发送数据解析 字节1、2:0x55 0xaa 数据是否正确判断标志 字节3: 0x01 ------单个LED控制手动控制 0x02 ------单个LED控制自动闪烁 字节4 此字节从低位到高位依次控制LED0-LED7,例如0x01表示手动点亮LED0或者LED0自动闪烁;0x28表示手动点 亮LED3、LED5或者LED3、LED5自动闪烁 字节5、6:表示闪烁时间(6高8位 5低8位)
[单片机]
51<font color='red'>单片机</font>与PC上位机串口通信之LED控制
飞思卡尔推出首个加快和简化软件开发的汽车微控制器产品
随着新汽车中芯片内容和复杂性的不断增加,未来的汽车发展对软件愈发依赖。新汽车通常集成了超过1亿行内置代码,比大多数民用客机的代码数量还要多。虽然软件带来了令人兴奋的创新机会,但同时也增加了复杂性,催生了大量的代码维护和上市速度挑战。因此,汽车电子供应商现在投入到软件领域的开发资源超过了在硬件方面的开发资源。 为了应对这些挑战,飞思卡尔半导体推出了首个旨在大大加快和简化软件开发的汽车微控制器产品线S32K。S32K基于广泛采用的ARM Cortex架构,具有卓越的可扩展性和兼容性,适用于过去由异构、非一致的8位、16位和32位MCU服务的多种汽车电子应用,同时还为先进的工具和软件平台提供强大的基础。 为软件工程师解决难
[汽车电子]
PIC单片机内部EEPROM读写子程序(转贴)
;实战《内部EEPROM读写实验》 ;本实战的目的是让大家熟悉PIC16F87X内部EEPROM的读写方法 ;项目实现的功能:对于地址为00H-3FH的64个EEPROM数据存储单元, ;分别将数据0-63依次烧写进去,然后再循环读出,显示在8只LED发光二极管上 ;PIC单片机学习网 陈学乾 http://www.pic16.com ;程序文件名“MCD-EMP1.ASM” ;程序清单如下: ;************************************ STATUS EQU 3H ;定义状态寄存器地址 RP0 EQU 5H ;定义页选位RP0的位地址 RP1 EQU 6H ;定义页
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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