MSP430F149单片机的ADC12模块
- 格式:doc
- 大小:46.00 KB
- 文档页数:9
MSP430模数转换模块--ADC12MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,他具有高速度,通用性等特点。
大部分都内置了ADC模块.而有些不带ADC模块的片子,也可通过利用内置的模拟比较器来实现AD的转换。
在系列产品中,我们可以通过以下列表来简单地认识他们的ADC功能实现。
系列型号ADC功能实现转换精度MSP430X1XX2 比较器实现10位MSP430F13X ADC模块12位MSP430F14X ADC模块12位MSP430F43X ADC模块12位MSP430F44X ADC模块12位MSP430X32X ADC模块14位从以下ADC12结构图中可以看出,ADC12模块中是由以下部分组成:输入的16路模拟开关,ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成。
输入的16路模拟开关16路模拟开关分别是由IC外部的8路模拟信号输入和内部4路参考电源输入及1路内部温度传感器源及AVCC-AVSS/2电压源输入。
外部8路从A0-A7输入,主要是外部测量时的模拟变量信号。
内部4路分别是Veref+ ADC内部参考电源的输出正端,Vref-/Veref- ADC内部参考电源负端(内部/外部)。
1路AVCC-A VSS/2电压源和1路内部温度传感器源。
片内温度传感器可以用于测量芯片上的温度,可以在设计时做一些有用的控制;在实际应用时用得较多。
而其他电源参考源输入可以用作ADC12的校验之用,在设计时可作自身校准。
ADC内部电压参考源ADC电压参考源是用于给ADC12内核作为一个基准信号之用的,这是ADC必不可少的一部分。
在ADC12模块中基准电压源可以通过软件来设置6种不同的组合。
AVCC(Vr+),Vref+,Veref+,AVSS(Vr-),Vref-/Vere f-。
ADC12内核ADC12的模块内核是共用的,通过前端的模拟开关来分别来完成采集输入。
一张图看懂MSP430单片机之ADC原创一,基础知识ADC即Analog to Digital Converter模数转换,把模拟信号进行量化,转换为数字量。
对于软件工程师来说,ADC内部的转换原理可以忽略,只需要了解其对外呈现的接口。
AD输入与输出之间的关系为:MSP430的ADC12内核模块是12位的,其最大输出为2^12 – 1 = 4095。
以VR-为参考点,当VIN小于或者等于VR-时得到的AD码值为0,当VIN大于或者等于VR+时,得到的AD码值为4095,当VIN处于VR-和VR+之间时,按线性比例转换。
这样,从MCU中读出AD码值,即可根据公式倒推回去计算出输入的模拟量电压。
二,ADC总体框图再补一张中文版的:三,分块解释1,ADC内核先来看看ADC最核心的部分。
当然少不了电压参考源VR+和VR-,以及模拟量输入部分。
模拟量输入部分是和“采样保持”电路连在一起的,这一部分后面再细说。
除此之外,与ADC内核相关的,还有以下几个信号:1,ADC12CLK。
在MCU中,任何模块都少不了时钟,ADC模块也不例外,必须有时钟信号它才能工作。
它有4个时钟源可以选择,并且可以1~8分频。
2,ADC12ON,这个是ADC内核的总开关,只有当ADC12ON这一位为1时,ADC内核模块才工作。
如果想要关闭ADC内核以降低功耗,可以将ADC12ON置为0.3,SAMPCON,采样控制信号。
该信号接至Convert,当SAMPCON为低电平时,ADC内核进行AD转换。
4,BUSY,用于指示内核模块是否正处于AD转换过程中。
2,采样保持。
MSP430F149ADC12单通道单次转换#include #define uint unsigned int#define uchar unsigned charstatic uchar adc_flag = 0 ;uint AD_TEMP = 0 ;void int_clk(){uchar i ;BCSCTL1&=~XT2OFF;//打开XT 振荡器BCSCTL2|=SELM1+SELS; //MCLK 为8MHz,SMCLK 为8MHzdo{ IFG1&=~OFIFG; //清除振荡错误标志for(i=0;i<100;i++)_NOP(); //延时等待} while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待IFG1&=~OFIFG; }int_adc(){P6SEL |= BIT0 ; //选择AD通道ADC12CTL0 |= ADC12ON + SHT0_2 + REF2_5V + REFON ; //采样保持时间为16 个ADC12CLK /*ADC12ON ADC 模块电源控制位;REF2_5V 内部参考电压选择位0:1.5V1:2.5VREFON 参考电压模块控制位0:关闭1:打开*/ADC12CTL1 |= ADC12SSEL0 + ADC12SSEL1 ; //ADC12 时钟源选择控制位00ADC12OSC 01ACLK 10MCLK 11SMCLKADC12MCTL0 = 0x10;// 连续转换结束通道,CHANNEL = A0 参考选择控制位ADC12IE |= 0x01; //使能A/D 转换器ADC12CTL0 |= ENC ; //AD 转换使能}#pragma vector = ADC_VECTOR__interrupt void ADC12ISR(void){while((ADC12CTL1 & 0x01)== 1); //等待转换完adc_flag = 1 ;AD_TEMP = ADC12MEM0 ; //设置AD转换完成标志,并读取ADC值}void main(){WDTCTL = WDTPW + WDTHOLD;int_clk();int_adc();_EINT(); //使能中断adc_flag = 1 ;while(1){ while(adc_flag== 1) { ADC12CTL0 |= ADC12SC ; //开启转换ADC12CTL0 &=~ADC12SC ; adc_flag = 0 ; //清中断标志}}}tips:感谢大家的阅读,本文由我司收集整编。
MSP430程序库之ADC12模块msp430内部含有ADC12模块,可以完成12位的模数转换,当对精度或其他指标要求不高时,可以选用430单片机内部的ADC12完成模数转换工作。
这里主要实现了一个比较通用的ADC12模块初始化程序,具体的数据存储和处理需要自己在中断处理函数中添加。
1.硬件介绍:msp430单片机内的ADC12模块的特点如下:12位转换精度,1位非线形误差,1位非线形积分误差;多种时钟源给ADC12模块,切本身自带时钟发生器;内置温度传感器;TimerA/TimerB硬件触发器;8路外部通道和4路内部通道;内置参考电压源和6种参考电压组合;4种模式的模数转换;16bit的转换缓存;ADC12关闭支持超低功耗;采用速度快,最高200Kbps;自动扫描和DMA使能。
430内部的ADC12功能还是蛮强大的,可以有定时器触发模数转换开始,还可以和内部的DMA模块共同使用,完成高速的采样转储等高级功能。
这个AD的转化公式如下,可以根据它计算采样的模拟电压值:使用AD是还要注意采样时间,430单片机的模数ADC12模块的等效模拟电压输入电路如下:其中V S是信号源电压,R S是信号源内阻,V I在Ax(ADC12模块模拟输入端)上的电压,R I单片机内多路开关等效电阻,V C是保持电容上的电压(ADC12模块采样的电压),C I 是电容的值。
需要根据这些值计算采样时间:代入单片机上的参数后公式如下:我的程序中采样时间设的是4us,可以算出如果用我的程序(不更改采样时间)的话,最大信号源内阻可以是6.8k,当信号源内阻更大时,可以自己按要求设采样时间(在程序的初始化函数内的寄存器设置部分)。
还有,ADC模数转换时要求参考电压等很稳定,为了达到这个要求,德州仪器要求这部分的电路如下:即:所有参考源和电源均并联一组0.1uF和10uF的电容。
硬件部分就说这么多了;如果需要更详细的说明,参考用户指南。
MSP430ADC12转换模块总结MSP430ADC12转换模块是德州仪器(Texas Instruments)公司推出的一种12位模数转换器。
它主要应用于MSP430系列微控制器中,是一种用于模拟信号转换为数字信号的重要模块。
本文将对MSP430ADC12转换模块的原理、特点、应用和优缺点进行详细的总结。
一、原理1.设置输入通道和转换时钟。
2.开始转换,模块将自动切换到所选通道,并从该通道读取模拟输入信号。
3.模块以逐位的方式逼近比较,从最高有效位(MSB)开始,通过与DAC比较来确定该位是0还是14.继续逼近,直至得到完整的12位数字输出。
5.完成转换后,可以读取数字输出值,并根据需要进行后续处理。
二、特点1.高精度:MSP430ADC12转换模块具有12位分辨率,可以实现高精度的模拟信号转换。
2.快速转换:该模块支持多种转换速度选项,可根据应用需求选择合适的速度,实现快速转换。
3.多通道输入:MSP430ADC12模块支持多达16个输入通道,可以实现多种模拟信号的并行转换。
4.内部参考电压:模块内置了参考电压源,可以提供稳定的参考电压,减少外部硬件成本。
5.中断功能:该模块支持转换完成中断,当转换完成时,可以通过中断方式通知主控制器进行相应的处理。
6.低功耗:该模块工作时具有低功耗特性,可以在需要的时候进入低功耗模式,从而节省系统能量消耗。
三、应用1.传感器信号处理:可以将各种传感器(如温度、压力、湿度传感器)的模拟信号转换为数字信号,从而实现对传感器的精确测量和控制。
2.电力系统监测:可以对电力系统中的各种参数(如电压、电流、功率)进行模拟信号转换,实现对电力系统的实时监测和控制。
3.仪器仪表:可以将各种测量仪器(如多米表、示波器)的模拟信号转换为数字信号,提高仪器仪表的测量精度和稳定性。
4.通信系统:可以将通信系统中的模拟信号(如音频信号)转换为数字信号,实现通信数据的处理和传输。
四、优缺点1.高精度:具有12位分辨率,可以实现高精度的信号转换。
0.A/D转换器原理虽然ADC的种类很多,工作原理各异,但是逐次逼近型ADC是应用较多的类型之一。
这种ADC以DAC为基础,在加上模拟电压比较器、逐次逼近寄存器、置数控制逻辑以及输出锁存器组成。
其结构图如图7-1所示。
其实,转换过程中的逐次逼近就是按照对分比较或者对分搜索的原理进行的。
其信号转换的工作原理如下:在启动信号控制下,首先置数控制逻辑给逐次逼近寄存器最高位Dn-1置1,其它位都清0。
寄存器的这个内容,经过DAC转换成模拟量Vc,约为满量程电压的一半,与输入的模拟量Vx进行比较,由电压比较器输出结果。
如果Vx ≥Vc,则电压比较器输出0,同时说明寄存器中的数字量偏小,应该保留Dn-1=1;相反,如果Vx <Vc,则电压比较器输出为1,同时说明寄存器中的数字量偏大,应该修改为Dn-1=0;然后,再由置数控制逻辑把逐次逼近寄存器的下一位置1,进行同样的转换和比较,并且根据比较结果决定这一位的保留与否。
这样的转换和比较过程供进行n 次,一直到最低位D0确定是1或是0。
最终,逐次逼近寄存器的所有位均以确定,转换过程就算完成了。
这时,转换完成(DONE)信号和锁存允许(LE)信号同时送出有效电平,LE 信号将转换结果锁存到输出锁存器;DONE 信号用于向CPU 声明,锁存器中已经准备好了转换后的数字量结果,供CPU读取。
CPU 可以送来一个输出使能(OE)脉冲,将数字量从输出锁存器中取走。
在图7-1所示电路的基础上,前面再加上一级采样/保持电路和一级多路开关电路,就构成了一只多通道ADC。
如图7-4所示。
SHSx ENCSHPSHP翻转序列之间翻转orENC=1ENC=1(0)ADC12TOVIE Bit 2ADC12 conversion-time-overflow interrupt enable. The GIE bit must also be set to enable the interrupt.0 Conversion time overflow interrupt disabled1 Conversion time overflow interrupt enabled。
模数转换器ADC12的工作原理及使用//0>. 微控设计网中国MSP430单片机专业网站MSP430外围模块功能简介[4]作者:利尔达模数转换器ADC12的工作原理及使用基于模拟前端信号处理与控制技术的专业论坛、网站//. 微控设计网中国MSP430单片机专业网站MSP430F14X和44X系列单片机内嵌入一个高精度12位ADC转换模块。
该转换模块具有采样速率高,(最大采样速率达二十万次每秒,这无疑提高了测量精度)。
另外MSP430系列中的FE427也具有ADC模块功能,该模块中的16位ADC是采用∑-△转换技术来将模拟信号数字化的。
因此这两个模块转换的原理是有差别的,具体使用参见芯片参考手册。
在此讲座中只介绍MSP430F44X、14X系列的ADC转换模块。
从该模块电路看出,其模式转换是采用逐次逼近的方法来实现测量的。
该电路分5大功能模块组成,在配置上这5个模块都可以独立配置。
五五大大模块模块分析分析::1、带有采样/保持功能的ADC内核该采样器是以电菏为转换辅助量的及采用电荷重分布技术的逼近型ADC,其特点是高效经济。
其核心为1权电容网络。
其采样过程是一个电容充电过程。
其保持就是根据电容中的电菏不变实现在比较寄存器中的总电荷量在逐次逼近,随着逐次逼近过程的进行,权电容网络中的各电容两端的电压在不断变化,因而导致总电荷量在每个电容之间不断重新分布。
该原理要比传统逼近型ADC中控制精密电阻的相对精度要容易,因此实现较为经济,同时消除了电阻网络中因温度变化引起的阻值失配。
EXIT基于模拟前端信号处理与控制技术的专业论坛、网站//. 微控设计网中国MSP430单片机专业网站由于A/D转换的原理是基于电荷再分配,当内部开关切换输入信号进行采样时,会产生流入或流出电流,但这种电流由于外部的等效时间常数很小而不会影响转换精度。
但如果外部的阻抗很大,在确定的采样时间内,这些瞬变的电流就会影响采样的精度。
1 概述MSP430F149的ADC12为SAR型12位AD,共有16路输入通道,其中8路独立的外部输入通道,2路接外部Vref+,Vref-,3路内部通道可分别测内部温度传感器、A VCC、和外部参考源。
P6口第二功能为AD输入端。
MSP430F149的10、11分别接外部电压参考源正负极,7脚可将内部电压参考源输出。
ADC12共有18个中断源,公用一个中断向量ADC12_VECTOR。
AD的参考源可选择内部电压参考源或外部电压参考源。
内部电压参考源有1.5V,2.5V可选,使用时向ADC12CTL0写入REFON+ REF2_5V就打开了2.5V。
外部电压参考源由REF+接入。
上电时若不设置参考源,则参考源为系统供电电压3.3V。
2 使用方法概述2.1程序架构中断方式1、设置ADC12工作模式,启动转换,开全局中断,等待中断2、写中断处理函数查询方式设置ADC12工作模式,启动转换,查询中断标志ADC12IFGwhile (!(0x01 & ADC12IFG));转换完毕读取采样值,系统自动清除中断标志2.2 使用概述主要参数配置设置工作方式:sing\\sequence\\re-sing\\re-sequencd;设置转换时间:SHTX设置触发方式:ADC12SC\\MSC\\TimerA\\ TimerB设置通道:外部通道\\内部Temperature sensor设置参考源:系统电压\\内部参考源\\外部参考源其他细节配置一般要配置采样转换模式为脉冲(SHP),打开ADC12(ADC12ON),使能ADC12转换(ENC),使能中断(如果采取中断模式),触发转换(若采用ADC12SC触发)。
解释ADC12模数转换是在SHI的上升沿初始化的。
SHI信号有四个来源:The ADC12SC bit;The Timer_A Output Unit 1;The Timer_B Output Unit 0;The Timer_B Output Unit 1。
MSP430教程14MSP430单片机ADC12模块MSP430单片机的ADC12模块是一个12位的模数转换器,用于将模拟电压转换为数字值,以供单片机内部处理。
ADC12模块是MSP430单片机中最常用的外设之一,可以用于各种应用,如模拟传感器读取、电量计算等。
ADC12模块的主要特点包括:1.12位的精度,可以将电压精确转换为4096个不同的数字值。
2.可以配置为单通道或多通道模式,允许同时转换多个模拟通道的电压。
3.支持多种转换触发方式,如手动触发、定时触发、比较触发等。
4.可以配置不同的参考电压源,以适应不同的应用场景。
5.内置温度传感器和内部参考电压源,方便温度和电压的测量。
在使用ADC12模块之前,需要进行一些初始化配置。
首先,需要设置参考电压源,可以选择使用外部引脚输入的参考电压,或者使用内部参考电压。
其次,需要选择转换触发源,可以选择手动触发或定时触发等。
还可以选择转换结果的存储位置,可以存储在内存中,也可以存储在DMA传输缓冲区中。
在实际使用中,可以通过编程设置ADC12的参数并启动转换。
转换完成后,可以通过查询标志位或中断方式来获取转换结果。
获取结果后,可以进行进一步的处理,如计算实际电压值或进行比较判断等。
以下是一个简单的示例代码,演示了如何使用ADC12模块进行模拟电压转换:```c#include <msp430.h>void init_ADC12//设置参考电压为内部2.5V参考源REFCTL0=REFMSTR,REFVSEL_2,REFON;//设置为单通道模式,使用A0通道ADC12CTL0=ADC12ON,ADC12SHT0_8,ADC12MSC;ADC12CTL1=ADC12SHP;//使用采样保持模式ADC12MCTL0=ADC12INCH_0,ADC12VRSEL_1;//设置输入通道为A0,使用2.5V参考电压//选择转换触发源为软件触发ADC12CTL0,=ADC12ENC,ADC12SC;void main(void)WDTCTL=WDTPW,WDTHOLD;//停用看门狗定时器while (1)while (ADC12CTL1 & ADC12BUSY);//等待转换完成unsigned int result = ADC12MEM0; // 获取转换结果//进一步处理转换结果,如计算实际电压值float voltage = (result / 4096.0) * 2.5;//处理完成后进行下一次转换ADC12CTL0,=ADC12SC;}```以上代码中,首先调用`init_ADC12(`函数进行ADC12模块的初始化配置,然后在主循环中进行转换和结果处理。
MPS430头文件摘要及注释一.ADC121..定义采样保持时间(ADC12CTL0)#define SHT0_0 (0*0x100u) //定义ADC12MEM0——ADC12MEM7采样#define SHT0_1 (1*0x100u) //保持时间为ADCCLK的多少个周期 eg:#define SHT0_2 (2*0x100u) //SHT0_0 代表采样保持时间为4个ADCCLK#define SHT0_3 (3*0x100u) //周期同理 SHT0_1为8个周期#define SHT0_4 (4*0x100u)#define SHT0_5 (5*0x100u)#define SHT0_6 (6*0x100u)#define SHT0_7 (7*0x100u)#define SHT0_8 (8*0x100u)#define SHT0_9 (9*0x100u)#define SHT0_10 (10*0x100u)#define SHT0_11 (11*0x100u)#define SHT0_12 (12*0x100u)#define SHT0_13 (13*0x100u)#define SHT0_14 (14*0x100u)#define SHT0_15 (15*0x100u)#define SHT1_0 (0*0x1000u) //定义ADC12MEM8——ADC12MEM15采样#define SHT1_1 (1*0x1000u) //保持时间为ADCCLK的多少个周期#define SHT1_2 (2*0x1000u) //使用方法同SHT0_x#define SHT1_3 (3*0x1000u)#define SHT1_4 (4*0x1000u)#define SHT1_5 (5*0x1000u)#define SHT1_6 (6*0x1000u)#define SHT1_7 (7*0x1000u)#define SHT1_8 (8*0x1000u)#define SHT1_9 (9*0x1000u)#define SHT1_10 (10*0x1000u)#define SHT1_11 (11*0x1000u)#define SHT1_12 (12*0x1000u)#define SHT1_13 (13*0x1000u)#define SHT1_14 (14*0x1000u)#define SHT1_15 (15*0x1000u)2.转换模式选择(ADC12CTL1)#define CONSEQ_0 (0*2u) //单通道单次转换#define CONSEQ_1 (1*2u) //多通道单次转换#define CONSEQ_2 (2*2u) //单通道多次转换#define CONSEQ_3 (3*2u) //多通道多次转换3..ADC12内核时钟源选择(ADC12CTL1)#define ADC12SSEL_0 (0*8u) //ADC内部时钟源 ADC12OSC #define ADC12SSEL_1 (1*8u) //ACLK#define ADC12SSEL_2 (2*8u) //MCLK#define ADC12SSEL_3 (3*8u) //SMCLK4.ADC时钟分频选择(ADC12CTL1)//分频数=三位二进制数加#define ADC12DIV_0 (0*0x20u) //1分频即不分频#define ADC12DIV_1 (1*0x20u) //2分频#define ADC12DIV_2 (2*0x20u)#define ADC12DIV_3 (3*0x20u)#define ADC12DIV_4 (4*0x20u)#define ADC12DIV_5 (5*0x20u)#define ADC12DIV_6 (6*0x20u)#define ADC12DIV_7 (7*0x20u) //8分频5..采样触发输入源选择(ADC12CTL1)#define SHS_0 (0*0x400u) //ADC12SC 位#define SHS_1 (1*0x400u) //TimerA_OUT1#define SHS_2 (2*0x400u) //TImerB_OUT0#define SHS_3 (3*0x400u) //TimerB_OUT16.转换结果数据存储寄存器选择(ADC12CTL1)#define CSTARTADD_0 (0*0x1000u) //结果存在ADC12MEM0 #define CSTARTADD_1 (1*0x1000u)#define CSTARTADD_2 (2*0x1000u)#define CSTARTADD_3 (3*0x1000u)#define CSTARTADD_4 (4*0x1000u)#define CSTARTADD_5 (5*0x1000u)#define CSTARTADD_6 (6*0x1000u)#define CSTARTADD_7 (7*0x1000u)#define CSTARTADD_8 (8*0x1000u)#define CSTARTADD_9 (9*0x1000u)#define CSTARTADD_10 (10*0x1000u)#define CSTARTADD_11 (11*0x1000u)#define CSTARTADD_12 (12*0x1000u)#define CSTARTADD_13 (13*0x1000u)#define CSTARTADD_14 (14*0x1000u)#define CSTARTADD_15 (15*0x1000u)注:在单通道单次转换情况下,转换结果存储寄存器的选择与ADC转换通道选择并没有必然联系,即从不同转换通道进入的数据经转换后,其结果在不引起错误的前提下,可存入任一个转换结果存储寄存器。
msp430的一些常用的C语言控制程序---ADC12(1)说说关于AD 的程序吧:就写一下最简单的单通道单次采集吧://查询方式获取AD 值#include //我们的系统板子是msp430f149,所以得用这个头文件~void ADC_Init(void);unsigned ADC_Result;void main(void){ WDTCTL = WDTPW + WDTHOLD; ADC_Init(); while(1){ ADC12CTL0 |= ADC12SC;//ADC12SC 是当SAMPCON 由采样定时器产生,ADC12SC 由0 改为1 启动转换while(ADC12CTL1 & BIT0 == 1);//当ADC12BUSY == 1 时等待ADC_Result = ADC12MEM0;//这块可单步运行时在IAR 中观察到,或者有LED,可能对它处理一下显示~ }}//void ADC_Init(void) //初始化时钟{ P6DIR &= ~BIT6;//设置p6.6为输入,这个口和板子上的接口有关.对了,149 内置的是12 位AD,精度足够一般用了P6SEL |= BIT6; //选择P6.6 的第二功能口ADC12CTL0 = ADC12ON + REFON + SHT0_6 ;//AD 电源打开、参考电压打开、采样时间分频设置,一般6 或8 ADC12CTL0 &= ~REF2_5V; //选择1.5V 参考电压,这个因为采集到的电压值变化有关ADC12CTL1 |= SHP + CONSEQ_0+ SHS_0; //使用采样时钟,单通道单次采样ADC12MCTL0 = SREF_1 + INCH_6; //选择AD 参考电压和输入通道ADC12CTL0 |= ENC; //ADC 转化使能,此处一定得放在后面,要不结果容易出错} 这就是最简单的AD 采集了,430 还有另外三种模式,原理都差不多,就是多寄存器中的各位操作,这里我没有用中断模式,另外的三中模式得用中断方式来获得数据tips:感谢大家的阅读,本文由我司收集整编。
MSP430F149的ADC操作1)ADC图解图1 ADC的原理图理解:1.ADC的时钟来源可以有四个(ACLK/MCLK/SMCLK/ADC12SO)由ADC12SSELx来选择。
并且可以由ADC12DIVx控制选择分频。
2.ADC的采样参考电压可以由SREF0,SREF1来选择四种参考电压。
3.INCHx控制选择模拟电压输入口。
4.SHSx选择控制方式。
2)ADC的内核1.ADC的转换公式当采样最高电压高过或等于参考电压的时候,是最大值0FFFH。
当采样最低电压低于或是等于参考电压的时候,是最小值000H。
2.控制ADC12的内核可以通过ADC12CTL0和ADC12CTL1两个寄存器来控制。
当不使用的时候可以通过ADC12ON位来控制关闭内核以达到低功耗的目的。
当修改转换使能标志ENC的时候,要先判断ADC12内核是否在进行转换工作,如果在转换工作期间关闭ENC(置零)那么最终得到错误的结果。
3)ADC的时钟来源ADC可以有四种时钟来源。
而ADC12OSC是ADC内置的一个时钟源,大概频率在5MHZ左右,不过该时钟源由个人设备、供电电压和外部温度的影响很大。
4)ADC的参考电压发生器ADC内部可以提供一个可以产生1.5V或是2.5V的产考电压发生器。
当设计使用的时候,需要将一个10uF的电容和一个0.1uF的电容并联到它的输出端。
而且使用的时候,打开发生器至少需要等待17ms以让参考电压达到一个稳定的值。
5)ADC的低功耗当ADC内核不适用的时候,它会自动进入关闭模式,在使用的时候自动苏醒。
而它的参考电压却不会自动关闭,要用手通过REFON手动关闭。
6)ADC的采样保持触发源它的触发源由四种选择。
1.ADC12SC位控制。
2.定时器A输出控制3.定时器B输出控制4.定时器B输出控制7)ADC的采样保持时间ADC的采样保持时间有两种模式。
1.拓展型采样时钟模式。
这个时候,采样的时间由SHI决定,也就是当SHI上升沿的时候开始采样,下降沿的时候结束采样。
12-Bit ADC Core:ADC CORE将一个模拟量转化为12位的数字量,并且将数字量存储到ADC12存储器中。
ADC CORE需要软件编程选择V R-和V R+的参考输入源,作为转换的上限值和下限值。
当模拟量输入等于或大于V R+时,转换结果N ADC =0FFFH;当模拟量输入等于或小于V R-时,转换结果N ADC =0H。
ADC12ON位用于打开ADC Core,ENC位:在每次转化之前都要置1.Conversion Clock SelectionADC12CLK用做转换时钟;或者当SHP=1()时,用于生成采样周期。
采样的时钟源有多个。
ADC12OSC大约5M Hz左右,但是与设备,供电电压,温度相关,具体参照规格书而定。
ADC12 Inputs and MultiplexerADC12模块模拟量输入源有16个,通过INCHx控制。
16个输入元分别是A0-A7(P6口),Ve REF+(Pin10), Ve REF-(Pin11)和4个内部输入源。
Voltage Reference GeneratorREFON=1,打开参考电压发生器。
REF2_5V = 1,参考电压为2.5V; REF2_5V = 0,参考电压为1.5V;INCHX=0AH,是模拟量输入源是温度传感器。
为了去耦,在参考电压输出引脚VREF+,接10uF和0.1uF的电容到A VSS.Auto Power-Down为了低功耗的应用。
ADC Core当不使用时自动关闭,在使用时,可以自动恢复打开;首次需软件打开。
ADC12OSC 用时自动打开,不用自动关闭。
参考电源需软件打开和关闭,不具有自动功能。
Sample and Conversion TimingSHI上升沿时An analog-to-digital conversion is initiated。
SAMPCON控制采样周期和启动转换:SAMPCON高电平时,采样。
MSP430F149多点无线数据采集系统设计数据收集是与传感器、信号处理、计算机一起形成现代检测技术基础的信息科学的重要领域。
我设计了一个基于MSP430的无线数据收集系统,并实现了解决有线数据采集模式移动性差和现场环境的电缆铺设极限的问题。
由数据采集器和一些数据集中器构成的无线主从数据获取网络,易于调整和平衡每个节点的通信距离。
广泛应用于工业数据采集之中,当它被用于狭窄的环境(例如隧道、封闭的走廊等)时,它可以减少了散射波的干扰,大大提升数据传输的可靠性。
利用MSP430F149和NRF905设计的多点无线数据采集系统,通过MSP430F149单片机片上ADC模块实现对外界模拟信号的采集,并将采集的模拟电压值转换成数字电压值。
对片外nRF905无线模块的控制实现数据在不同单片机之间的传输,最终通过单片机的串口传输到PC上显示,说明了链路控制方案和实际应用中应考虑的问题,最终达到无线多点无线数据采集的目的。
本次设计主要涉及到MSP430对UART和SPI串口的配置,单片机对无线模块的命令控制和数据经NRF905向中心节点传输,中心节点将多节点接收的数据通过串口向PC机传输。
无线数据收集(Wireless data acquisition)是指利用无线数据收集模块或设备记录及传输输出电流或者电压电压,无线数据采集器大多为便携型,可以将现场采集的数据实时发送给电脑。
与普通的便携式数据采集器相比,无线数据采集器提高了计算机的工作效率。
操作人员将数据从原始本地检查移动到远程控制中,并实时发送。
无线数据收集器的通信数据是实时高效的。
随着通信技术的蓬勃发展,人们对更先进便捷的通信技术的需要日益增大,摆脱有线网络的束缚实现无线通信始终是大家关心的问题,当今无线通信研究越来越热,应用非常广泛,使人与人之间的通信更加方便快捷,更具有市场发展前景。
在科学研究领域,数据采集与监测已成为一项越来越重要的检测技术。
在许多工业测控机械、医疗仪器以及消费电子产品中,都对数据采集系统的效率和能量消耗提出了更高的要求:即在满足微功耗、微型化的总体设计原则的基础上,又要能准确及时地反映现场采集数据的变化。
MSP430F149在IRIG-B码解码中的应用佟刚;崔明;曹永刚;马鸿艳;陈涛【期刊名称】《计算机测量与控制》【年(卷),期】2007(15)11【摘要】MSP430系列单片机是一种16位的单片机,具有集成度高、超低功耗等优点;MSP430F149的ADC12模块支持快速的12位A/D转换,并带有采样保持电路,具有内部参考电压发生器,将其应用在IRIG-B码(AC码)的解调中,IRIG-B码是标准时间码格式之一,广泛地应用于靶场时间信息的传递和各系统的时间同步;详细介绍了自动增益电路和解码电路的硬件设计和IRIG-B码数字解调技术的原理及方法;MSP430的软件采用C语言编写,使程序有很强的可移植性;结果表明,该系统运行稳定,同步精度高,具有较强的抗干扰能力和实际应用价值.【总页数】3页(P1597-1598,1610)【作者】佟刚;崔明;曹永刚;马鸿艳;陈涛【作者单位】长春光学精密机械与物理研究所,吉林,长春,130033;中国科学院研究生院,北京,100039;长春光学精密机械与物理研究所,吉林,长春,130033;中国科学院研究生院,北京,100039;长春光学精密机械与物理研究所,吉林,长春,130033;山东沂水县杨庄一中,山东,沂水,276412;长春光学精密机械与物理研究所,吉林,长春,130033【正文语种】中文【中图分类】TP368【相关文献】1.IRIG-B码在合并单元中的应用 [J], 吴伟将;徐雁;王宇雷2.一种基于LABVIEW FPGA应用的IRIG-B码解码方法 [J], 傅磊3.一种光IRIG-B/FT3码自适应技术及其在智能变电站测试仪器中的应用 [J], 石光;赵勇;杨经超;孔圣立;张道农;韩伟;张克声4.IRIG-B码在时间同步系统中的应用 [J], 邴志光;束坤;顾燕飞5.基于边沿捕获的IRIG-B(DC)码解码的研究与应用 [J], 贾成龙;亓常松因版权原因,仅展示原文概要,查看原文内容请购买。
//******************************************************************** //ADC12序列通道与D12864液晶模块显示程序//******************************************************************** #include <msp430x14x.h>#define CPU_F ((double)8000000)#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))#define uchar unsigned char#define uint unsigned int#define ulong unsigned long/*12864应用指令*/#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H#define AC_INIT 0x02 //将AC设置为00H。
且游标移到原点位置#define CURSE_ADD 0x06 //设定游标移到方向及图像整体右移,#define FUN_MODE 0x30 //工作模式:8位基本指令集#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白#define DISPLAY_OFF 0x08 //显示关#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH#define SET_DD_AC 0x80#define P50 0#define P51 1#define P55 5#define P56 6#define P57 7#define RS_CLR P5OUT &= ~(1 << P55) //RS置低#define RS_SET P5OUT |= (1 << P55) //RS置高#define RW_CLR P5OUT &= ~(1 << P56) //RW置低#define RW_SET P5OUT |= (1 << P56) //RW置高#define EN_CLR P5OUT &= ~(1 << P57) //E置低#define EN_SET P5OUT |= (1 << P57) //E置高#define PSB_CLR P5OUT &= ~(1 << P50) //PSB置低,串口方式#define PSB_SET P5OUT |= (1 << P50) //PSB置高,并口方式#define RST_CLR P5OUT &= ~(1 << P51) //RST置低#define RST_SET P5OUT |= (1 << P51) //RST置高#define DataPort P4OUT //P4口为数据口uint Results[32]; //存放ADC的结果uchar shuzi[] = {"0123456789.V"};uchar ptr[6];uint Average;uint Temp;ulong caltmp[4];//*********************************************************************** **// 系统时钟初始化//*********************************************************************** **void Clock_Init(){uchar i;BCSCTL1&=~XT2OFF; //打开XT振荡器BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZdo{IFG1&=~OFIFG; //清除震荡标志for(i=0;i<100;i++)_NOP(); //延时等待}while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待IFG1&=~OFIFG;}//*********************************************************************** **// MSP430内部看门狗初始化//*********************************************************************** **void WDT_Init(){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗}//*********************************************************************** **// 初始化IO口子程序//*********************************************************************** **void Port_init(){P4SEL = 0x00;P4DIR = 0xFF;P5SEL = 0x00;P5DIR|= BIT0 + BIT1 + BIT5 + BIT6 + BIT7;PSB_SET; //液晶并口方式RST_SET; //复位脚RST置高}//*********************************************************************** // 显示屏命令写入函数//***********************************************************************void LCD_write_com(unsigned char com){RS_CLR;RW_CLR;EN_SET;DataPort = com;delay_ms(5);EN_CLR;}//*********************************************************************** // 显示屏数据写入函数//*********************************************************************** void LCD_write_data(unsigned char data){RS_SET;RW_CLR;EN_SET;DataPort = data;delay_ms(5);EN_CLR;}//*********************************************************************** // 显示屏清空显示//*********************************************************************** void LCD_clear(void){LCD_write_com(0x01);delay_ms(5);}//*********************************************************************** //函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字//*********************************************************************** void DisplayCgrom(uchar addr,uchar *hz){LCD_write_com(addr);delay_ms(5);while(*hz != '\0'){LCD_write_data(*hz);hz++;delay_ms(5);}}//****************************************************************// 显示屏初始化函数//*********************************************************************** void LCD_init(void){LCD_write_com(FUN_MODE); //显示模式设置delay_ms(5);LCD_write_com(FUN_MODE); //显示模式设置delay_ms(5);LCD_write_com(DISPLAY_ON); //显示开delay_ms(5);LCD_write_com(CLEAR_SCREEN); //清屏delay_ms(5);}//*****************************************************************//*****************************************************************/*打开ADC*/void ADC12(void){P6SEL |=0X0f; //使能ADC通道ADC12CTL0=ADC12ON+SHT0_15+MSC;//打开ADC,设置采样时间,多次转换ADC12CTL1=SHP+CONSEQ_3;//使用采样定时器;多通道转换ADC12MCTL0 |=INCH_0;//通道选择ADC12MCTL1 |=INCH_1;ADC12MCTL2 |=INCH_2;ADC12MCTL3 |=INCH_10+EOS;//以EOS结束此次转换ADC12IE=0X0F;//使能ADC中断ADC12CTL0 |=ENC+ADC12SC;//使能转换;开始转换_EINT();}/*ADC中断服务函数,各个通道转换值的存储*/#pragma vector=ADC_VECTOR__interrupt void ADC12ISR(void){caltmp[0]=ADC12MEM0;caltmp[1]=ADC12MEM1;caltmp[2]=ADC12MEM2;caltmp[3]=ADC12MEM3;}//*********************************************************************** *void xian_shi(void){int i,j,k,l;Temp=(caltmp[0]*3300)/4095;//计算十进制的电压值ptr[0]=Temp/1000;ptr[2]=Temp%1000/100;ptr[3]=Temp%100/10;ptr[4]=Temp%10;ptr[5]=11;ptr[1]=10;LCD_write_com(0x80);DisplayCgrom(0x80,"一通道电压");for(i=0;i<6;i++){delay_ms(10);LCD_write_data(shuzi[ptr]);}Temp=(caltmp[1]*3300)/4095;ptr[0]=Temp/1000;ptr[2]=Temp%1000/100;ptr[3]=Temp%100/10;ptr[4]=Temp%10;ptr[5]=11;ptr[1]=10;LCD_write_com(0x90);DisplayCgrom(0x90,"二通道电压");for(j=0;j<6;j++){delay_ms(10);LCD_write_data(shuzi[ptr[j]]);}Temp=(caltmp[2]*3300)/4095;ptr[0]=Temp/1000;ptr[2]=Temp%1000/100;ptr[3]=Temp%100/10;ptr[4]=Temp%10;ptr[5]=11;ptr[1]=10;LCD_write_com(0x88);DisplayCgrom(0x88,"三通道电压");for(k=0;k<6;k++){delay_ms(10);LCD_write_data(shuzi[ptr[k]]);}Temp=(caltmp[3]*3300)/4095;ptr[0]=Temp/1000;ptr[2]=Temp%1000/100;ptr[3]=Temp%100/10;ptr[4]=Temp%10;ptr[5]=11;ptr[1]=10;LCD_write_com(0x98);DisplayCgrom(0x98,"四通道电压");for(l=0;l<6;l++){delay_ms(10);LCD_write_data(shuzi[ptr[l]]);}}//*********************************************************************** // 主程序//*********************************************************************** void main(void){WDT_Init(); //看门狗设置Clock_Init(); //系统时钟设置Port_init(); //系统初始化,设置IO口属性delay_ms(100); //延时100msLCD_init(); //液晶参数初始化设置LCD_clear(); //清屏delay_ms(100);while(1){ADC12();delay_ms(10);xian_shi();}}。
概述MSP430F149的ADC12为SAR型12位AD,共有16路输入通道,其中8路独立的外部输入通道,2路接外部Vref+,Vref-,3路内部通道可分别测内部温度传感器、AVCC、和外部参考源。
P6口第二功能为AD输入端。
MSP430F149的10、11分别接外部电压参考源正负极,7脚可将内部电压参考源输出。
ADC12共有18个中断源,公用一个中断向量ADC12_VECTOR。
AD的参考源可选择内部电压参考源或外部电压参考源。
内部电压参考源有1.5V,2.5V可选,使用时向ADC12CTL0写入REFON+ REF2_5V就打开了2.5V。
外部电压参考源由REF+接入。
上电时若不设置参考源,则参考源为系统供电电压3.3V。
2 使用方法概述2.1程序架构中断方式1、设置ADC12工作模式,启动转换,开全局中断,等待中断2、写中断处理函数查询方式设置ADC12工作模式,启动转换,查询中断标志ADC12IFGwhile (!(0x01 & ADC12IFG));转换完毕读取采样值,系统自动清除中断标志2.2 使用概述主要参数配置设置工作方式:sing\\sequence\\re-sing\\re-sequencd;设置转换时间:SHTX设置触发方式:ADC12SC\\MSC\\TimerA\\ TimerB设置通道:外部通道\\内部Temperature sensor设置参考源:系统电压\\内部参考源\\外部参考源其他细节配置一般要配置采样转换模式为脉冲(SHP),打开ADC12(ADC12ON),使能ADC12转换(ENC),使能中断(如果采取中断模式),触发转换(若采用ADC12SC触发)。
解释ADC12模数转换是在SHI的上升沿初始化的。
SHI信号有四个来源:The ADC12SC bit;The Timer_A Output Unit 1;The Timer_B Output Unit 0;The Timer_B Output Unit 1。
MSP430单片机ADC12模块的总结在MSP430单片机系列中,很多都有12通道12位的ADC(简称ADC12模块)。
如MSP430F13X、MSP430F14X、MSP430F15X、MSP430F16X、MSP430F43X、MSP430F44X等系列。
较其它带A/D转换的单片机,MSP430的ADC精度高,设计灵活巧妙,给数据采集系统的设计带来了全新的思路。
一、ADC模块的常用性能指标1、分辨率表示输出数字量变化一个相邻数码所需输入模拟电压的变化量,它定义为转换器的满刻度电压与2n的比值,其中n为ADC的位数。
如:一个12位的ADC模块的分辨率为满电压刻度的1/4096。
2、量化误差是由于有限数字对模拟数值进行离散取值(量化)而引起的误差。
其理论值为一个单位分辨率,即±1/2LSB。
3、转换精度其反映的是ADC模块在量化上与理想的ADC模块进行AD转换的差值。
4、转换时间指ADC模块完成一次AD转换所需的时间,转换时间越短越能适应输入信号的变化。
此外还应考虑所使用的电压范围、工作温度、接口特性以及输出形式等性能。
二、ADC12主要特点1、12位转换精度,1位非线性微分误差,1位非线性积分误差;2、有多种时钟源提供给ADC12模块,而且模块本身内置时钟发生器;3、内置温度传感器;4、Timer_A/Timer_B硬件触发器;5、拥有8个可配置的外部模拟信号采样通道,拥有4个内部通道,用于Vcc电压值、温度、外部正负电压参考的测量;6、内置参考电源,并且参考电压有6种组合;7、模数转换有4种模式;8、16字转换缓存;¥2MC内部参考电沥的输出正请牡註曰外部参考沥的1]Vr*f-/V*T4f^AflCpq部参若电压控制REFON■INCH^-OAH1.5V or2.5V选控制莖考电压SREF2开关1?制ADCADC120N/ADC12忙标志采祥保持宇时開口ADG12CLKACLK辅1(叭—MCLK主翦田撕一BMCLX子系SSJ钟采翳入信号方向控制转换允许ADC12MaiO9、ADC12可关断内核支持超低功耗应用;10、采样速度快,最高可达200ksps;11、自动扫描;12、DMA使能;进行AD转换通常需要设置的内容有:转换通道、采样保持、参考电压、转换时钟、转换模式、结果缓存。
MSP430F149的ADC12模块1 概述MSP430F149的ADC12为SAR型12位AD,共有16路输入通道,其中8路独立的外部输入通道,2路接外部Vref+,Vref-,3路内部通道可分别测内部温度传感器、AVCC、和外部参考源。
P6口第二功能为AD输入端。
MSP430F149的10、11分别接外部电压参考源正负极,7脚可将内部电压参考源输出。
ADC12共有18个中断源,公用一个中断向量ADC12_VECTOR。
AD的参考源可选择内部电压参考源或外部电压参考源。
内部电压参考源有1.5V,2.5V可选,使用时向ADC12CTL0写入REFON+ REF2_5V就打开了2.5V。
外部电压参考源由REF+接入。
上电时若不设置参考源,则参考源为系统供电电压3.3V。
2 使用方法概述2.1程序架构中断方式1、设置ADC12工作模式,启动转换,开全局中断,等待中断2、写中断处理函数查询方式设置ADC12工作模式,启动转换,查询中断标志ADC12IFGwhile (!(0x01 & ADC12IFG));转换完毕读取采样值,系统自动清除中断标志2.2 使用概述主要参数配置设置工作方式:sing\\sequence\\re-sing\\re-sequencd;设置转换时间:SHTX设置触发方式:ADC12SC\\MSC\\TimerA\\ TimerB设置通道:外部通道\\内部Temperature sensor设置参考源:系统电压\\内部参考源\\外部参考源其他细节配置一般要配置采样转换模式为脉冲(SHP),打开ADC12(ADC12ON),使能ADC12转换(ENC),使能中断(如果采取中断模式),触发转换(若采用ADC12SC触发)。
解释ADC12模数转换是在SHI的上升沿初始化的。
SHI信号有四个来源:The ADC12SC bit;The Timer_A Output Unit 1;The Timer_B Output Unit 0;The Timer_B Output Unit 1。
故单次采样时只需要每次设置ADC12CTL0 |= ADC12SC就采样一次;重复采样时,如Rep-sing,设置ADC12CTL1 = SHS_1 +CONSEQ_2就选择了Rep-sing模式,每次采样通过定时器A触发。
3 相关寄存器1、ADC12CTL0SHT1x BitsSample-and-hold time. These bits define the number of ADC12CLK cycles inthe sampling period for registers ADC12MEM8 to ADC12MEM15.SHT0x BitsSample-and-hold time. These bits define the number of ADC12CLK cycles inthe sampling period for registers ADC12MEM0 to ADC12MEM7.ADC12ON0 ADC12 off1 ADC12 onENCENC Bit 1 Enable conversion0 ADC12 disabled1 ADC12 enabledADC12SC Bit 0 Start conversion. Software-controlled sample-and-conversion start. ADC12SC and ENC may be set together with one instruction. ADC12SC isreset automatically.0 No sample-and-conversion-start1 Start sample-and-conversionMSC Bit 7 Multiple sample and conversion. Valid only for sequence or repeated modes.0 The sampling timer requires a rising edge of the SHI signal to triggereach sample-and-conversion.1 The first rising edge of the SHI signal triggers the sampling timer, butfurther sample-and-conversions are performed automatically as soonas the prior conversion is completed.2、ADC12CTL1SHPSHP Bit 9 Sample-and-hold pulse-mode select. This bit selects the source of the sampling signal (SAMPCON) to be either the output of the sampling timer orthe sample-input signal directly.0 SAMPCON signal is sourced from the sample-input signal.1 SAMPCON signal is sourced from the sampling timer.SHSx Bits11-10Sample-and-hold source select00 ADC12SC bit01 Timer_A.OUT110 Timer_B.OUT011 Timer_B.OUT1CONSEQx Bits2-1Conversion sequence mode select00 Single-channel, single-conversion01 Sequence-of-channels10 Repeat-single-channel11 Repeat-sequence-of-channels3、ADC12IEADC12IEx Bits15-0Interrupt enable. These bits enable or disable the interrupt request for the ADC12IFGx bits.0 Interrupt disabled1 Interrupt enabled4、ADC12IFGADC12IFGx Bits15-0ADC12MEMx Interrupt flag. These bits are set when correspondingADC12MEMx is loaded with a conversion result. The ADC12IFGx bits are reset if the corresponding ADC12MEMx is accessed, or may be reset with software.0 No interrupt pending1 Interrupt pending5、ADC12MCTLXSREFx Bits6-4Select reference000 VR+ = AVCC an d VR− = AVSS001 VR+ = VREF+ and VR− = AVSS010 VR+ = VeREF+ and VR− = AVSS011 VR+ = VeREF+ and VR− = AVSS100 VR+ = AVCC and VR− = VREF−/ VeREF−101 VR+ = VREF+ and VR− = VREF−/ VeREF−110 VR+ = VeREF+ and VR− = VREF−/ VeREF−111 VR+ = VeREF+ and VR− = VREF−/ VeREF−INCHx Bits3-0Input channel select0000 A00001 A10010 A20011 A30100 A40101 A50110 A60111 A71000 VeREF+1001 VREF−/VeREF−1010 Temperature sensor1011 (AVCC – AVSS) / 21100 (AVCC – AVSS) / 21101 (AVCC – AVSS) / 21110 (AVCC – AVSS) / 21111 (AVCC – AVSS) / 2EOS Bit 7 End of sequence. Indicates the last conversion in a sequence.0 Not end of sequence1 End of sequence4实例4.1 single采样,参考电源为系统电源1.设置ADC12CTL0,使ADC12通道0采样保持时间为16 ADC12CLK(SHT0_2),开启ADC12模块(ADC12ON);2.设置ADC12CTL1,选择采样保持脉冲模式即SAMPCON为采样定时器(SHP)3.设置ADC12IE,是通道0中断使能(0x01);4.设置ADC12CTL0,使能AD转换(ENC)5.设置模拟信号输入IO口P607.设置ADC12CTL0,开启AD转换(ADC12SC),等待中断8.中断中读取通道0转换值ADC12MEM0ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12 ADC12CTL1 = SHP; // Use sampling timerADC12IE = 0x01; // Enable interruptADC12CTL0 |= ENC; // Conversion enabledP6SEL |= 0x01; // P6.0 ADC option selectP2DIR |= 0x01;ADC12CTL0 |= ADC12SC;#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR (void){if (ADC12MEM0 < 0x7FF)P2OUT = 0; // Clear P1.0 LED offelseP2OUT = 0XFF; // Set P1.0 LED on__low_power_mode_off_on_exit();// 与上面等价_BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from0(SR)}4.2 single采样参考源为2.5V在ADC12CTL0中设置参考源在ADC12MCTL0中为通道0选择参考源ADC12CTL0 = ADC12ON+SHT0_2+REFON+REF2_5V; // Turn on and set up ADC12ADC12CTL1 = SHP; // Use sampling timerADC12MCTL0 = SREF_1; // Vr+=Vref+for ( i=0; i<0x3600; i++); // Delay for reference start-upADC12CTL0 |= ENC;while (1){ADC12CTL0 |= ADC12SC; // Start conversionwhile ((ADC12IFG & BIT0)==0);_NOP(); // SET BREAKPOINT HERE}4.3 Repeat-single采样,模拟输入为内部Temperature sensor设置ADC12CTL1,采样保持源为定时器A,脉冲保持模式,Repeat-single模式ADC12CTL1 = SHS_1 + SHP + CONSEQ_2; // TA trig., rpt conv.设置ADC12MCTL0,通道0参考源为内部REF,模拟输入通道0选择为Temperature sensor ADC12MCTL0 = SREF_1 + INCH_10; // Channel A10, Vref+ADC12IE = 0x01; // Enable ADC12IFG.0ADC12CTL0 = SHT0_8 + REF2_5V + REFON + ADC12ON + ENC; // Config ADC12 TACCTL1 = OUTMOD_4; // Toggle on EQU1 (TAR = 0)TACTL = TASSEL_2 + MC_2; // SMCLK, cont-modewhile (!(0x01 & ADC12IFG)); // First conversion?FirstADCVal = ADC12MEM0; // Read out 1st ADC value_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt#pragma vector=ADC12_VECTOR__interrupt void ADC12ISR (void){if (ADC12MEM0 <= FirstADCVal + ADCDeltaOn)P1OUT &= ~0x01; // LED offelse P1OUT |= 0x01; // LED on}摄氏温度和温度传感器电压转换关系:0摄氏度对应986mv,1摄氏度温差对应1.97mv温差// oF = ((x/4096)*1500mV)-923mV)*1/1.97mV = x*761/4096 - 468// IntDegF = (ADC12MEM0 - 2519)* 761/4096IntDegF = (temp - 2519) * 761;IntDegF = IntDegF / 4096;// oC = ((x/4096)*1500mV)-986mV)*1/3.55mV = x*423/4096 - 278// IntDegC = (ADC12MEM0 - 2692)* 423/4096IntDegC = (temp - 2692) * 423;IntDegC = IntDegC / 4096;4.4 Repeat-sequence modeSequence模式时可以设置多个采样通道。