1、MSP430F14X基本程序 电子设计大赛 ADC121 概述 MSP430F14X的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、打开了2.5V。外部电压参考源由REF+接入。上电时若不设置参考源,则参考源为系统供电电压3.3V。2 使用方法概述2.1程序架构中断方式 1、设置 ADC12工作模式,启动转换,开全局中断,等待中断 2、写中断处理函数查询方式 设置ADC12工作模式,启动转换,查询中断标志ADC12IFG while (!(0x01 & ADC12IFG);转换完毕读取采样值,系统自动清除中断标志2.2 使用概述主要参数配置设置工作方式:singsequencere-singre-sequencd;设置转换时间:SHTX设置触发方式:ADC12SCMSCTimerA TimerB设置通道:外部通道内部Tem
3、perature 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就采样一次;
4、重复采样时,如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 ADC12
5、CLK 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. ADC
6、12SC 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 th
7、e 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 thesampling signal (SAMPCON) to be either the output of the sa
8、mpling 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 s
9、elect00 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 Bits1
10、5-0ADC12MEMx Interrupt flag. These bits are set when correspondingADC12MEMx is loaded with a conversion result. The ADC12IFGx bits arereset if the corresponding ADC12MEMx is accessed, or may be reset withsoftware.0 No interrupt pending1 Interrupt pending5、ADC12MCTLXSREFx Bits6-4Select reference000 V
11、R+ = AVCC and VR = AVSS001 VR+ = VREF+ and VR = AVSS010 VR+ = VeREF+ and VR = AVSS011 VR+ = VeREF+ and VR = AVSS100 VR+ = AVCC and VR = VREF/ VeREF101 VR+ = VREF+ and VR = VREF/ VeREF110 VR+ = VeREF+ and VR = VREF/ VeREF111 VR+ = VeREF+ and VR = VREF/ VeREFINCHx Bits3-0Input channel select0000 A0000
12、1 A10010 A20011 A30100 A40101 A50110 A60111 A71000 VeREF+1001 VREF/VeREF1010 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 sequ
13、ence4实例程序应用 ADC12内部模块演示程序之单通道多次采样/MSP430高级实验开发组件 - ADC12内部模块演示程序之单通道多次采样/时钟设置:/ACLK=N/A,MCLK=SMCLK=default(DCO800k)/当前演示程序功能描述:/利用MSP430F14X的AD0,进行单通道多次转换实验,P60悬空即可/通过断点在View-Watch中观察转换结果results多次/*/#include #define Num_of_Results 8static unsigned int resultsNum_of_Results; /保存转换结果void main(void) WD
14、TCTL = WDTPW+WDTHOLD; P6SEL |= BIT0; ADC12CTL0 = ADC12ON + SHT0_8 + MSC; ADC12CTL1 = SHP + CONSEQ_2; /采样定时器,单通道多次转换 ADC12IE = BIT0; ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC; _BIS_SR(GIE);#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) static unsigned int index = 0; resultsindex = ADC12MEM0; /保
15、存结果 index = (index+1)%Num_of_Results; /此处添加断点观察results ADC12内部模块演示程序之多通道单次采样/MSP430高级实验开发组件 - ADC12内部模块演示程序之多通道单次采样/时钟设置:/ACLK=N/A,MCLK=SMCLK=default(DCO800k)/当前演示程序功能描述:/利用MSP430F14X的AD0AD2,进行多通道单次转换实验,P60P62悬空即可/通过断点在View-Watch中观察转换结果A0_Results.A1_Results.A2_Results一次/*/#include unsigned int A0_Re
16、sults; /保存A0结果unsigned int A1_Results; /保存A1结果unsigned int A2_Results; /保存A2结果void main(void) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 P6SEL |= (BIT0 + BIT1 + BIT2); /端口的第二功能 ADC12CTL0 = ADC12ON + MSC + SHT0_8; /打开ADC12,设置采样时间 ADC12CTL1 = SHP + CONSEQ_1; /使用采样时钟,多通道单次采样 ADC12MCTL0 = INCH_0; /A0,ref+ = AVCC
17、ADC12MCTL1 = INCH_1; /A1,ref+ = AVCC ADC12MCTL2 = INCH_2 + EOS; /A1,ref+ = AVCC ADC12IE = BIT2; /允许P63中断 ADC12CTL0 |= ENC; /允许进行转换 ADC12CTL0 |= ADC12SC; /开始进行转换 _BIS_SR(GIE); /允许系统总中断#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) A0_Results = ADC12MEM0; /保存A0转换结果 A1_Results = ADC12MEM1; /保存
18、A1转换结果 A2_Results = ADC12MEM2; /保存A2转换结果 _NOP(); /在此处添加断点观察数据 ADC12内部模块演示程序之多通道多次采样/MSP430高级实验开发组件 - ADC12内部模块演示程序之多通道多次采样/时钟设置:/ACLK=N/A,MCLK=SMCLK=default(DCO800k)/当前演示程序功能描述:/利用MSP430F14X的AD0AD2,进行多通道多次转换实验,P60P62悬空即可/通过断点在View-Watch中观察转换结果A0_Results.A1_Results.A2_Results多次/*/#include unsigned in
19、t A0_Results; /保存A0结果unsigned int A1_Results; /保存A1结果unsigned int A2_Results; /保存A2结果unsigned char counters = 0;void main(void) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 P6SEL |= (BIT0 + BIT1 + BIT2); /端口的第二功能 ADC12CTL0 = ADC12ON + MSC + SHT0_8; /打开ADC12,设置采样时间 ADC12CTL1 = SHP + CONSEQ_3; /使用采样时钟,多通道单次采样 ADC
20、12MCTL0 = INCH_0; /A0,ref+ = AVCC ADC12MCTL1 = INCH_1; /A1,ref+ = AVCC ADC12MCTL2 = INCH_2 + EOS; /A1,ref+ = AVCC ADC12IE = BIT2; /允许P63中断 ADC12CTL0 |= ENC; /允许进行转换 ADC12CTL0 |= ADC12SC; /开始进行转换 _BIS_SR(GIE); /允许系统总中断#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) A0_Results = ADC12MEM0; /保存
21、A0转换结果 A1_Results = ADC12MEM1; /保存A1转换结果 A2_Results = ADC12MEM2; /保存A2转换结果 _NOP(); /在此处添加断点观察数据 ADC12内部模块演示程序之内部参考电压输入(单通道单次转换模式)/MSP430高级实验开发组件 - ADC12内部模块演示程序之内部参考电压输入(单通道单次转换模式)/时钟设置:/ACLK=N/A,MCLK=SMCLK=default(DCO800k)/当前演示程序功能描述:/利用MSP430F14X的AD6,采集通道6(P66)输入,以Veref+作为参考电压进行AD转换/Veref+通过外部引脚输入
22、(P10左边第二个引脚内侧),可以连接至AVCC间接使用之/通过断点在View-Watch中观察转换结果ADC12MEM0/*/#include void main(void) WDTCTL = WDTPW+WDTHOLD; /关闭看门狗 P6SEL |= BIT6; /端口的第二功能P66 ADC12CTL0 = ADC12ON + SHT0_2; /打开ADC12,设置采样定时期 ADC12CTL1 = SHP; /使用采样定时器 ADC12MCTL0 = SREF_2; /Vr+ = VeREF+,使用外部的参考电压输入 ADC12CTL0 |= ENC; /允许进行AD转换 while
23、 (1) ADC12CTL0 |= ADC12SC; /启动一次转换 while (ADC12IFG & BIT0)=0); /等待转换完成 _NOP(); /加入断点可用来观察ADC12MEM0的结果 ADC12内部模块演示程序之内部参考电压输入/MSP430高级实验开发组件 - ADC12内部模块演示程序之内部参考电压输入/时钟设置:/ACLK=N/A,MCLK=SMCLK=default(DCO800k)/当前演示程序功能描述:/利用MSP430F14X的AD6,采集通道6(P66)输入,以Vref+作为参考电压进行AD转换/软件设置Vref+为内部的2.5V参考电压发生器/通过断点在V
24、iew-Watch中观察转换结果ADC12MEM0/*/#include void main(void) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 P6SEL |= BIT6; /设置端口第二功能 ADC12CTL0 = ADC12ON + SHT0_2 + REFON + REF2_5V; /启动ADC12,使用内部参考电压,2.5V ADC12CTL1 = SHP; /使用采样定时器 ADC12MCTL0 = SREF_1; /Vr+ = Vref+ ADC12CTL0 |= ENC; /允许转换 while (1) ADC12CTL0 |= ADC12SC; /启
25、动转换 while(ADC12IFG&BIT0)=0); /等待转换完成 _NOP(); /加入断点可用来观察ADC12MEM0的结果 ADC12内部模块演示程序之内部温度传感器/MSP430高级实验开发组件 - ADC12内部模块演示程序之内部温度传感器/时钟设置:/ACLK = n/a, MCLK = SMCLK = default DCO 800kHz, ADC12CLK = ADC12OSC/当前演示程序功能描述:/利用MSP430F14X内部的温度传感器,通过ADC12的通道10进行AD转换/计算取得摄氏温度和华氏温度,通过断点在View-Watch中观察温度值/由于定标问题, 可能
26、会存在温度的误差/*/#include unsigned int long temp;unsigned int long TemperF; /华氏温度unsigned int long TemperC; /摄氏温度void main(void) WDTCTL = WDTPW + WDTHOLD; /关闭系统看门狗 ADC12CTL0 = SHT0_8 + REFON + ADC12ON; /内部1.5V参考电压,打开ADC12模块,设置采样保持定时器 ADC12CTL1 = SHP; /采使用采样定时器 ADC12MCTL0 = SREF_1 + INCH_10; /参考电压和通道选择 ADC
27、12IE = BIT0; /ADC12MEM0 ADC12CTL0 |= ENC; /允许转换 _BIS_SR(GIE); /开启系统中断 while(1) ADC12CTL0 |= ADC12SC; /开始采样并AD转换 /oF = (x/4096)*1500mV)-923mV)*1/1.97mV = x*761/4096 - 468 /IntDegF = (ADC12MEM0 - 2519)* 761/4096 TemperF = (temp - 2519) * 761; TemperF = TemperF / 4096; /简化的华氏温度转换公式 /oC = (x/4096)*1500m
28、V)-986mV)*1/3.55mV = x*423/4096 - 278 /IntDegC = (ADC12MEM0 - 2692)* 423/4096 TemperC = (temp - 2692) * 423; TemperC = TemperC / 4096; /简化的摄氏温度转换公式 _NOP(); /加入断点可用来观察IntDegF和IntDegC结果 #pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) temp = ADC12MEM0; /保存转换结果 ADC12内部模块演示程序之外部输入/*/MSP430高级实验开发组件 - ADC
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1