MSP430F14X基本程序 电子设计大赛 ADC12.docx

上传人:b****7 文档编号:11156406 上传时间:2023-02-25 格式:DOCX 页数:16 大小:18.91KB
下载 相关 举报
MSP430F14X基本程序 电子设计大赛 ADC12.docx_第1页
第1页 / 共16页
MSP430F14X基本程序 电子设计大赛 ADC12.docx_第2页
第2页 / 共16页
MSP430F14X基本程序 电子设计大赛 ADC12.docx_第3页
第3页 / 共16页
MSP430F14X基本程序 电子设计大赛 ADC12.docx_第4页
第4页 / 共16页
MSP430F14X基本程序 电子设计大赛 ADC12.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

MSP430F14X基本程序 电子设计大赛 ADC12.docx

《MSP430F14X基本程序 电子设计大赛 ADC12.docx》由会员分享,可在线阅读,更多相关《MSP430F14X基本程序 电子设计大赛 ADC12.docx(16页珍藏版)》请在冰豆网上搜索。

MSP430F14X基本程序 电子设计大赛 ADC12.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1