MSP430F14X基本程序 电子设计大赛 ADC12.docx
- 文档编号:5390675
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:16
- 大小:18.91KB
MSP430F14X基本程序 电子设计大赛 ADC12.docx
《MSP430F14X基本程序 电子设计大赛 ADC12.docx》由会员分享,可在线阅读,更多相关《MSP430F14X基本程序 电子设计大赛 ADC12.docx(16页珍藏版)》请在冰点文库上搜索。
MSP430F14X基本程序电子设计大赛ADC12
1概述
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.5V。
外部电压参考源由REF+接入。
上电时若不设置参考源,则参考源为系统供电电压3.3V。
2使用方法概述
2.1程序架构
中断方式
1、设置 ADC12工作模式,启动转换,开全局中断,等待中断
2、写中断处理函数
查询方式
设置ADC12工作模式,启动转换,查询中断标志ADC12IFG
while(!
(0x01&ADC12IFG));转换完毕读取采样值,系统自动清除中断标志
2.2使用概述
主要参数配置
设置工作方式:
sing\\sequence\\re-sing\\re-sequencd;
设置转换时间:
SHTX
设置触发方式:
ADC12SC\\MSC\\TimerA\\TimerB
设置通道:
外部通道\\内部Temperaturesensor
设置参考源:
系统电压\\内部参考源\\外部参考源
其他细节配置
一般要配置采样转换模式为脉冲(SHP),打开ADC12(ADC12ON),使能ADC12转换(ENC),使能中断(如果采取中断模式),触发转换(若采用ADC12SC触发)。
解释
ADC12模数转换是在SHI的上升沿初始化的。
SHI信号有四个来源:
TheADC12SCbit;TheTimer_AOutputUnit1;TheTimer_BOutputUnit0;TheTimer_BOutputUnit1。
故单次采样时只需要每次设置ADC12CTL0|=ADC12SC就采样一次;重复采样时,如Rep-sing,设置ADC12CTL1=SHS_1+CONSEQ_2就选择了Rep-sing模式,每次采样通过定时器A触发。
3相关寄存器
1、ADC12CTL0
SHT1xBits
Sample-and-holdtime.ThesebitsdefinethenumberofADC12CLKcyclesin
thesamplingperiodforregistersADC12MEM8toADC12MEM15.
SHT0xBits
Sample-and-holdtime.ThesebitsdefinethenumberofADC12CLKcyclesin
thesamplingperiodforregistersADC12MEM0toADC12MEM7.
ADC12ON
0ADC12off
1ADC12on
ENC
ENCBit1Enableconversion
0ADC12disabled
1ADC12enabled
ADC12SCBit0Startconversion.Software-controlledsample-and-conversionstart.
ADC12SCandENCmaybesettogetherwithoneinstruction.ADC12SCis
resetautomatically.
0Nosample-and-conversion-start
1Startsample-and-conversion
MSCBit7Multiplesampleandconversion.Validonlyforsequenceorrepeatedmodes.
0ThesamplingtimerrequiresarisingedgeoftheSHIsignaltotrigger
eachsample-and-conversion.
1ThefirstrisingedgeoftheSHIsignaltriggersthesamplingtimer,but
furthersample-and-conversionsareperformedautomaticallyassoon
asthepriorconversioniscompleted.
2、ADC12CTL1
SHP
SHPBit9Sample-and-holdpulse-modeselect.Thisbitselectsthesourceofthe
samplingsignal(SAMPCON)tobeeithertheoutputofthesamplingtimeror
thesample-inputsignaldirectly.
0SAMPCONsignalissourcedfromthesample-inputsignal.
1SAMPCONsignalissourcedfromthesamplingtimer.
SHSxBits
11-10
Sample-and-holdsourceselect
00ADC12SCbit
01Timer_A.OUT1
10Timer_B.OUT0
11Timer_B.OUT1
CONSEQxBits
2-1
Conversionsequencemodeselect
00Single-channel,single-conversion
01Sequence-of-channels
10Repeat-single-channel
11Repeat-sequence-of-channels
3、ADC12IE
ADC12IExBits
15-0
Interruptenable.ThesebitsenableordisabletheinterruptrequestfortheADC12IFGxbits.
0Interruptdisabled
1Interruptenabled
4、ADC12IFG
ADC12IFGxBits
15-0
ADC12MEMxInterruptflag.Thesebitsaresetwhencorresponding
ADC12MEMxisloadedwithaconversionresult.TheADC12IFGxbitsare
resetifthecorrespondingADC12MEMxisaccessed,ormayberesetwith
software.
0Nointerruptpending
1Interruptpending
5、ADC12MCTLX
SREFxBits
6-4
Selectreference
000VR+=AVCCandVR−=AVSS
001VR+=VREF+andVR−=AVSS
010VR+=VeREF+andVR−=AVSS
011VR+=VeREF+andVR−=AVSS
100VR+=AVCCandVR−=VREF−/VeREF−
101VR+=VREF+andVR−=VREF−/VeREF−
110VR+=VeREF+andVR−=VREF−/VeREF−
111VR+=VeREF+andVR−=VREF−/VeREF−
INCHxBits
3-0
Inputchannelselect
0000A0
0001A1
0010A2
0011A3
0100A4
0101A5
0110A6
0111A7
1000VeREF+
1001VREF−/VeREF−
1010Temperaturesensor
1011(AVCC–AVSS)/2
1100(AVCC–AVSS)/2
1101(AVCC–AVSS)/2
1110(AVCC–AVSS)/2
1111(AVCC–AVSS)/2
EOSBit7Endofsequence.Indicatesthelastconversioninasequence.
0Notendofsequence
1Endofsequence
4实例程序应用
●ADC12内部模块演示程序之单通道多次采样
//MSP430高级实验开发组件-ADC12内部模块演示程序之单通道多次采样
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//当前演示程序功能描述:
////利用MSP430F14X的AD0,进行单通道多次转换实验,P60悬空即可
////通过断点在View->Watch中观察转换结果results多次
/*********************************************************/
#include
#defineNum_of_Results8
staticunsignedintresults[Num_of_Results];//保存转换结果
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;
P6SEL|=BIT0;
ADC12CTL0=ADC12ON+SHT0_8+MSC;
ADC12CTL1=SHP+CONSEQ_2;//采样定时器,单通道多次转换
ADC12IE=BIT0;
ADC12CTL0|=ENC;
ADC12CTL0|=ADC12SC;
_BIS_SR(GIE);
}
#pragmavector=ADC_VECTOR
__interruptvoidADC12ISR(void){
staticunsignedintindex=0;
results[index]=ADC12MEM0;//保存结果
index=(index+1)%Num_of_Results;//此处添加断点观察results
}
●ADC12内部模块演示程序之多通道单次采样
//MSP430高级实验开发组件-ADC12内部模块演示程序之多通道单次采样
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//当前演示程序功能描述:
////利用MSP430F14X的AD0~AD2,进行多通道单次转换实验,P60~P62悬空即可
////通过断点在View->Watch中观察转换结果A0_Results.A1_Results.A2_Results一次
/*********************************************************/
#include
unsignedintA0_Results;//保存A0结果
unsignedintA1_Results;//保存A1结果
unsignedintA2_Results;//保存A2结果
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P6SEL|=(BIT0+BIT1+BIT2);//端口的第二功能
ADC12CTL0=ADC12ON+MSC+SHT0_8;//打开ADC12,设置采样时间
ADC12CTL1=SHP+CONSEQ_1;//使用采样时钟,多通道单次采样
ADC12MCTL0=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);//允许系统总中断
}
#pragmavector=ADC_VECTOR
__interruptvoidADC12ISR(void){
A0_Results=ADC12MEM0;//保存A0转换结果
A1_Results=ADC12MEM1;//保存A1转换结果
A2_Results=ADC12MEM2;//保存A2转换结果
_NOP();//在此处添加断点观察数据
}
●ADC12内部模块演示程序之多通道多次采样
//MSP430高级实验开发组件-ADC12内部模块演示程序之多通道多次采样
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//当前演示程序功能描述:
////利用MSP430F14X的AD0~AD2,进行多通道多次转换实验,P60~P62悬空即可
////通过断点在View->Watch中观察转换结果A0_Results.A1_Results.A2_Results多次
/*********************************************************/
#include
unsignedintA0_Results;//保存A0结果
unsignedintA1_Results;//保存A1结果
unsignedintA2_Results;//保存A2结果
unsignedcharcounters=0;
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P6SEL|=(BIT0+BIT1+BIT2);//端口的第二功能
ADC12CTL0=ADC12ON+MSC+SHT0_8;//打开ADC12,设置采样时间
ADC12CTL1=SHP+CONSEQ_3;//使用采样时钟,多通道单次采样
ADC12MCTL0=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);//允许系统总中断
}
#pragmavector=ADC_VECTOR
__interruptvoidADC12ISR(void){
A0_Results=ADC12MEM0;//保存A0转换结果
A1_Results=ADC12MEM1;//保存A1转换结果
A2_Results=ADC12MEM2;//保存A2转换结果
_NOP();//在此处添加断点观察数据
}
●ADC12内部模块演示程序之内部参考电压输入(单通道单次转换模式)
//MSP430高级实验开发组件-ADC12内部模块演示程序之内部参考电压输入(单通道单次转换模式)
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//当前演示程序功能描述:
////利用MSP430F14X的AD6,采集通道6(P66)输入,以Veref+作为参考电压进行AD转换
////Veref+通过外部引脚输入(P10左边第二个引脚内侧),可以连接至AVCC间接使用之
////通过断点在View->Watch中观察转换结果ADC12MEM0
/*********************************************************/
#include
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
P6SEL|=BIT6;//端口的第二功能P66
ADC12CTL0=ADC12ON+SHT0_2;//打开ADC12,设置采样定时期
ADC12CTL1=SHP;//使用采样定时器
ADC12MCTL0=SREF_2;//Vr+=VeREF+,使用外部的参考电压输入
ADC12CTL0|=ENC;//允许进行AD转换
while
(1){
ADC12CTL0|=ADC12SC;//启动一次转换
while((ADC12IFG&BIT0)==0);//等待转换完成
_NOP();//加入断点可用来观察ADC12MEM0的结果
}
}
●ADC12内部模块演示程序之内部参考电压输入
//MSP430高级实验开发组件-ADC12内部模块演示程序之内部参考电压输入
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//当前演示程序功能描述:
////利用MSP430F14X的AD6,采集通道6(P66)输入,以Vref+作为参考电压进行AD转换
////软件设置Vref+为内部的2.5V参考电压发生器
////通过断点在View->Watch中观察转换结果ADC12MEM0
/*********************************************************/
#include
voidmain(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;//启动转换
while((ADC12IFG&BIT0)==0);//等待转换完成
_NOP();//加入断点可用来观察ADC12MEM0的结果
}
}
●ADC12内部模块演示程序之内部温度传感器
//MSP430高级实验开发组件-ADC12内部模块演示程序之内部温度传感器
//时钟设置:
////ACLK=n/a,MCLK=SMCLK=defaultDCO~800kHz,ADC12CLK=ADC12OSC
//当前演示程序功能描述:
////利用MSP430F14X内部的温度传感器,通过ADC12的通道10进行AD转换
////计算取得摄氏温度和华氏温度,通过断点在View->Watch中观察温度值
////由于定标问题,可能会存在温度的误差
/*********************************************************/
#include
unsignedintlongtemp;
unsignedintlongTemperF;//华氏温度
unsignedintlongTemperC;//摄氏温度
voidmain(void){
WDTCTL=WDTPW+WDTHOLD;//关闭系统看门狗
ADC12CTL0=SHT0_8+REFON+ADC12ON;
//内部1.5V参考电压,打开ADC12模块,设置采样保持定时器
ADC12CTL1=SHP;//采使用采样定时器
ADC12MCTL0=SREF_1+INCH_10;//参考电压和通道选择
ADC12IE=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)*1500mV)-986mV)*1/3.55mV=x*423/4096-278
//IntDegC=(ADC12MEM0-2692)*423/4096
TemperC=(temp-2692)*423;
TemperC=TemperC/4096;//简化的摄氏温度转换公式
_NOP();//加入断点可用来观察IntDegF和IntDegC结果
}
}
#pragmavector=ADC_VECTOR
__interruptvoidADC12ISR(void){
temp=ADC12MEM0;//保存转换结果
}
●ADC12内部模块演示程序之外部输入
/**********************************************************/
//MSP430高级实验开发组件-ADC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430F14X基本程序 电子设计大赛 ADC12 MSP430F14X 基本 程序 电子设计 大赛