msp430单片机AD转换

msp430单片机AD转换

2010-08-01 20:14:05|  分类: msp430单片机|举报|字号 订阅

一。简单介绍:

ADC12模块中是由以下部分组成:输入的16路模拟开关(外部8路,内部4路),ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成。

四种采样模式:

(1)单通道单次转换模式

(2)序列通道单词转换模式

(3)单通道多次转换模式

(4)序列通道多次转换模式

个人觉得(3)模式应该是使用较多的,

对选定的通道进行多次转换,直到关闭该功能或ENC=0。进行如下设置:
x=CSStartAdd,指向转换开始地址
ADC12MEMx存放转换结果 
ADC12MCTLx寄存器中定义了通道和参考电压
在这种模式下,改变转换模式,不必先停止转换,在当前正在进行的转换结束后,可改变转换模式。该模式的停止可有如下几种办法:
使用CONSEQ=0的办法,改变为单通道单次模式。
使用ENC=0直接使当前转换完成后停止。
使用单通道单次模式替换当前模式,同时使ENC=0  
    ADC控制寄存器
ADC12CTL0 转换控制寄存器0
ADC12CTL1 转换控制寄存器1
ADC12IE   中断使能寄存器
ADC12IFG  中断标志寄存器
ADC12IV   中断向量寄存器
ADC12MEM0-15 存储控制寄存器0-15
ADC12MCTL0-15 存储控制寄存器0-15
一般做法:在大循环里开始转换,转换完毕引发中断,我们在中断里记录并处理转换数据。

二。ADC12寄存器说明
-----------------------------------------------------------------------
寄存器类型           寄存器缩写                寄存器含义
-----------------------------------------------------------------------
转换控制寄存器       ADC12CTL0                 转换控制寄存器0 
                     ADC12CTL1                 转换控制寄存器1 
-----------------------------------------------------------------------
中断控制寄存器       ADC12IFG                  中断标志寄存器 
                     ADC12IE                   中断使能寄存器 
                     ADC12IV                   中断向量寄存器 
-----------------------------------------------------------------------
存储及其控制寄存器   ADC12MCTL0~ADC12MCTL15   存储控制寄存器0~15 
                     ADC12MEM0~ADC12MEM15     存储寄存器0~15 
-----------------------------------------------------------------------
1.ADC12CTL0 控制寄存器0,各位定义:
bit15~12   bit11~8   bit7   bit6   bit5   bit4      bit3         bit2        bit1   bit0
SHT1        SHT0       MSC    2.5V   REFON  ADC12 ON  ADC12 TOVIE  ADC12 TVIE   ENC    ADC12 SC 
ADC12SC——采样/转换控制位。在不同条件下,ADC12SC的含义如下所示:
--------|---------------------------------------------------------------------
ENC=1,  | SHP=1:  ADC12SC由0变为1启动A/D转换; A/D转换完成后ADC12SC自动复位 
ISSH=0  |  SHP=0:  ADC12SC保持高电平采样; ADC12SC复位时启动一次转换 
--------|---------------------------------------------------------------------
ENC——转换允许位。
0:ADC12为初始状态,不能启动A/D转换;
1:首次转换由SAMPCON上升沿启动
ADC12TVIE——转换时间溢出中断允许位(当前转换还没完成时,又发生一次采样请求,则会发生转换时间溢出)
0:没发生转换时间溢出
1:发生转换时间溢出
ADC12OVIE——溢出中断允许位(当ADC12MEMx中原有数据还没有读出,而又有新的转换结果数据要写入时,则发生溢出)
0:没发生溢出
1:发生溢出
ADC12ON——ADC12内核控制位
0:关闭ADC12内核
1:打开ADC12内核
REFON——参考电压控制位
0:内部参考电压发生器关闭
1:内部参考电压发生器打开
2.5V——内部参考电压的电压值选择位
0:选择1.5V内部参考电压
1:选择2.5V内部参考电压
MSC——多次采样转换位(CONSEQ<>0表示当前转换模式不是单通道单次转换)
-----------|---------------------------------------------------------------------------------------------
有效条件   | MSC值    含义
SHP=1      |  0       每次转换需要SHI信号的上升沿触发采样定时器     
CONSEQ<>0  |  1       仅首次转换由SHI信号的上升沿触发采样定时器,而后采样转换将在前一次转换完成后立即进行 
-----------|---------------------------------------------------------------------------------------------
SHT1、SHT0——采样保持定时器1,采样保持定时器0
分别定义保存在转换结果寄存器ADC12MEM8~ADC12MEM15和ADC12MEM0~ADC12MEM7中的转换采样时序与采样时钟ADC12CLK的关系。采样周期是ADC12CLK周期乘4的整数倍,即:
SHITx   0   1   2   3   4    5   6   7   8   9  10   11    12~15 
n       1   2   4   8  16   24  32  48  64  96  128  192   256 
2.ADC12CTL1 转换控制寄存器1(大多数3~15位,只有在ENC=0时才可被修改),各位定义:
bit15~12    bit11~10  bit9  bit8   biy7~5     bit4~3      bit2~1    bit0
CSSTARTADD   SHS        SHP   ISSH   ADC12 DIV   ADC12 SSEL   CONSEQ     ADC12 BUSY
CSSTARTADD——转换存储器地址位。该4位所表示的二进制数0~15分别对应ADC12MEM0~15。可以定义单次转换地址或序列转换的首地址。
SHS——采样触发输入源选择位。
0:ADC12SC
1:Timer_A.OUT1
2:Timer_B.OUT0
3:Timer_B.OUT1
SHP——采样信号(SAMPCON)选择控制位。
0:SAMPCON源自采样触发输入信号
1:SAMPCON源自采样定时器,由采样输入信号的上升沿触发采样定时器
ISSH——采样输入信号方向控制位
0:采样输入信号为同向输入
1:采样输入信号为反向输入
ADC12DIV——ADC12时钟源分频因子选择位。分频因子为该3位二进制数加1
ADC12SSEL——ADC12内核时钟源选择
0:ADC12内部时钟源——ADC12OSC
1:ACLK
2:MCLK
3:SMCLK
CONSEQ——转换模式选择位
0:单通道单次转换模式
1:序列通道单次转换模式
2:单通道多次转换模式
3:序列通道多次转换模式
ADC12BUSY——ADC12忙标志(只用于单通道单次转换模式,在其它转换模式下,该位无效)
0:表示没有活动的操作
1:表示ADC12正处于采样期间、转换期间或序列转换期间
3.ADC12MEM0~ADC12MEM15 转换存储寄存器
该组寄存器均为16位寄存器,用来存放A/D转换结果。中用其中低12位,高4位在读出时为0
4.ADC12MCTLx 转换存储控制寄存器(所有位只有在ENC为低电平时可修改,在POR时各位被复位)
对于每个转换存储器有一个对应的转换存储器控制寄存器,所以在进行CSSTARTADD转换存储器地址位设置的同时,也确定了ADC12MCTLx。该寄存器各位含义如下:
bit7   bit6~4   bit3~0
EOS    SREF      INCH 
EOS——序列结束控制位
0:序列没有结束
1:该序列中最后一次转换
SREF——参考电压源选择位
0:Vr+=AVcc,Vr-=AVss
1:Vr+=VREF+,Vr-=AVss
2,3:Vr+=VEREF+,Vr-=AVss
4:Vr+=AVcc,Vr-=VREF-/VEREF-
5:Vr+=VREF+,Vr-=VREF-/VEREF-
6,7:Vr+=VEREF+,Vr-=VREF-/VEREF-
INCH——选择模拟输入通道
0~7:A0~A7
8:VeREF+
9:VREF-/VeREF-
10:片内温度传感器的输出
11~15:(AVCC-AVSS)/2
5.ADC12IFG 中断标志寄存器 为16位,其中中断标志位ADC12IFG.x对应于转换存储寄存器ADC12MEMx。各位含义如下:
bit15   bit14    ......      bit1   bit0 
IFG15   IFG14    ......      IFG1   IFG0 
ADC12IFG.x置位:转换结束,并且转换结果已经装入转换存储寄存器。
ADC12IFG.x复位:ADC12MEMx被访问。
6.ADC12IE 中断使能寄存器 为16位,对应于ADC12IFG寄存器。各位含义如下:
bit15   bit14    ......     bit1   bit0 
IE.15   IE.14    ......     IE.1   IE.0 
ADC12IE.x=1:允许相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。
ADC12IE.x=0:禁止相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。
7.ADC12IV 中断向量寄存器 
ADC12是一个多源中断:有18个中断标志(ADC12IFG.0~ADC12IFG.15与ADC12TOV,ADC12OV),但只有一个中断向量。所以需要设置这18个标志的优先级顺序,按照优先级顺序安排中断标志的响应,高优先级的请求可以中断正在服务的低优先级。

三。标准程序参考:

#include "msp430x14x.h"
void InitADC12();
unsigned char wait;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
   WDTCTL = WDTPW + WDTHOLD;
  InitADC12();
  return 0;
}
void InitADC12()
{
    //_DINT();
    ADC12CTL0 &= ~ENC; //只有在ENC复位的情况下才能对ADC12CTL0、1进行设置!!!
    ADC12CTL0 = MSC + REFON + REF2_5V + SHT0_15 + SHT1_15;
    /*MSC:多次采样转换位,只对序列采样或者多次多次转换有效。
        0:采样定时器需要SHI信号的上升沿触发
        1:首次需要采样定时器SHI信号触发,之后的转换在上次转换之后随即开始。*/
    ADC12CTL1 |= SHP + CONSEQ_0;
    /*SHP: 1:采样信号源自采样定时器 0:采样信号源自采样输入信号
    CONSEQ: 0: 单通道单次转换 1:序列通道单词转换 2:单通道多次转换 3:序列通道多次转换
    CSTARTADD_x(0~15):转换起始位置 */
    ADC12MCTL0 = EOS + SREF_0 + INCH_7;
    /* EOS:序列结束位
    SREF: 参考电压选择
    INCH:模拟输入通道选择 */
    ADC12IE |= 0x0001;//开相应模拟通道中断,转换完毕后引发中断
    _EINT();
    //ADC12CTL0 |= ADC12ON + ENC; //修改!!!// 这样写是不对的
    ADC12CTL0 |= ADC12ON;
    ADC12CTL0 |= ENC;

wait = 0; //此处可定义变量,指示转换是否完成
    ADC12CTL0 |= ENC+ADC12SC; //转换开始 若希望在其他时间开始转换 可将次句放在别处逼比必
    while(wait==0)
      ;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC()
{int result[7];
        wait=1;
        result[0] = ADC12MEM0;
        /*unsigned char q0;
    int *pmem=ADC12MEM;
                    //转换结束的标志位置位
    for(q0=0;q0<16;q0++)
    {
        AdMem[q0]= *pmem;
        pmem++;
    }*/
}

时间: 2024-11-10 19:51:01

msp430单片机AD转换的相关文章

51单片机 AD转换

在数逻的课程中,已经学习过AD转换的概念:将模拟信号采样.量化.编码后转换为数字信号.但是未学习过通过单片机编程,显示结果. 编码分有舍有入.只舍不入两种,量化误差前者更小.=2Vm/(2^n+1  - 1 ) 注意,为了达到精确度高.稳定性好的目的,最好将所有器件的模拟地和数字分别连接,最后将模拟地和数字地仅在一点相连. 此处,使用的是STC12C5A60S2内部的AD转换. 1 /* 功能:使用12C5A60S2内部AD读取外部电压,显示在1602上 */ 2 3 #include "STC

温故《单片机基础》之——AD转换

重新翻开这本书,还是有收获的,这里记录点ADC的知识点,虽然书上有些知识点跟不上时代的发展,但是基本上,还算比较系统的,也不是很过时,零几年的技术,数字电路的基本原理是没变过.这里结合自己的项目实际和书上的知识点整理一下. 1.ADC的采样过程,这个四步骤基本上,没变过,采样.保持.量化.编码,而且在∑△还有一个数字滤波器的. 2.在采样的前端,通常需要有传感器.放大器,传感器有温度传感器.光电传感器.湿度传感器.流量传感器.压力传感器.机械量传感器pH传感器等,目前我接触过温度传感器.光电传感

MSP430教程14:MSP430单片机ADC12模块

MSP430模数转换模块--ADC12   MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,他具有高速度,通用性等特点.大部分都内置了ADC模块.而有些不带ADC模块的片子,也可通过利用内置的模拟比较器来实现AD的转换.在系列产品中,我们可以通过以下列表来简单地认识他们的ADC功能实现. 系列型号       ADC功能实现      转换精度   MSP430X1XX2    比较器实现        10位   MSP430F13X      ADC模块         

(七)ADC0809 模数转换的学习 AD转换

ADC0808 引脚功能各引脚功能如下: 1-5和26-28(IN0-IN7):8路模拟量输入端 8.14.15和17-21:8位数字量输出端 22(ALE):地址锁存允许信号,输入,高电平有效. 6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换). 7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平). 9(OE):数据输出允许信号,输入,高电平有效.  

STM32F10X入门指南---AD转换

首先,点击下面的链接下载我们需要使用的代码.链接 1.添加必要的文件: 之前我们说过,有三个文件是必须添加的,这三个文件分别是:startup_stm32f10x_xd.s ,stm32f10x_rcc.c ,system_stm32f10x.c.其中,前面的xd是根据你的芯片的容量来选择的.这三个文件都可以在千帆提供的代码中找到.文件路径:Core.rar\Core\STM32\Source\Must . 另外,如果想操作IO口,必须添加千帆的一个库文件DeviceBase.cpp.文件路径:

MSP430单片机学习视频

MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗.具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor). MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路.数字电路模块和微处理器集成在一个芯片上,以提供"单片机"解决方案.该系列单片机多应用于需要电池供电的便携式仪器仪表中.       与51单片机相比较,430单片机的视频教程要少得多,主要有以下几种: 1.郭天祥&q

s5pv210 AD转换

1:ADC:Analog-to-Digital Converter,模拟信号转数字信号,自然界一般为模拟信号,而SoC需要数字信号,所以之间通信需要ADC. 2:转换原理: 以逐次逼近式AD转换为例: 这里以8位为例,而S5pv210SoC是可选10bit.12bit: (1) 首先发出"启动信号"信号S.当S由高变低时,"逐次逼近寄存器SAR"清0,DAC输出Vo=0,"比较器"输出1.当S变为高电平时, "控制电路"使SA

STM8S AD转换

终于把bochs和gdb连起来了,下面描述下步骤以作记录. 1.安装bochs 前面有篇文章介绍了bochs源码编译安装过程,这里安装也非常相似,只是命令稍微有些不同 ./configure --enable-gdb-stub make make install 2.下载调试映像 http://oldlinux.org/Linux.old/bochs/linux-0.11-gdb-rh9-050619.tar.gz 在这里下载压缩包,里面含有不少东西,要在ubuntu下使用需要修改配置的内容,参

对MSP430单片机__delay_cycles精确延时的说明及改正

在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, 该函数原型是: __intrinsic void __delay_cycles(unsigned long __cycles);该内部函数实现__cycles个CPU周期的延时,但对于该参数的设置,我要陈述一下: __cycles需要我们传递的是CPU运行的周期个数 网上普遍的用法是: #defi