1、 寄存器 ADC12CTL0:SHT1 SHT0 MSC 2.5V REFON ADC120N ADC12TOVIE ADC12TVIE ENC ADC12SC15-12 11-8 7 6 5 4 3 2 1 0操作寄存器 ADC12CTL1 CSSTARTADD SHS SHP ISSH ADC12DIV ADC12SSEL CONSEQ ADC12BUSY15-12 11-10 9 8 7-5 4-3 2-1 0ADC12MCTL 转换存储控制寄存器的操作:EOS SREF INCH7 6 5 4 3 2 1 0ADC12IE 为中断使能寄存器ADC12IE.15 14 .1 0ADC12
2、IFGADC 编程的流程如下:1 初始化,void Adc12int()ADC12CTL0 /使 AD 模块处于初始状态ADC12CTL0 = ADC12MSC+ADC12SHT0_15+ADC12SHT1_15;/使用外部部 3.3V 参考电压,使用采样保持器。/#define ADC12ENC (0x0002u) #define ADC12MSC (0x0080u)#define ADC12SHT0_15 (15*0x100u)#define ADC12SHT1_15 (15*0x1000u)/一、寄存器 ADC12CTL0:SHT1 SHT0 MSC 2.5V REFON ADC120N
3、 ADC12TOVIE ADC12TVIE ENC ADC12SC15-12 11-8 7 6 5 4 3 2 1 0ADC120SC :ADC12 内部时钟源(启动)ENC 位为转换允许,1 允许 AD 转换,0 时为不允许转换,即复位状态;由于ADC12CTL0 和 ADC12CTL1 的一些位和 ADCMCTILX 的所有位必须在 ENC 位复位时才能修改。因而初始过程为:ENC 复位设置转换启动方式打开参考电压选择采样保持器时间SHT1 SHT0 采样保持定时器 1 和 0,定义转换结果中转换时序与采样时钟ADC12CLK 的关系。程序设置都为 1,MSC 多次采样、转换位。有效条件:
4、CONSE!=0,MSC1 表示仅首次转换同 SHI 信号的上升沿触发采定时器,采样转换在前一转换完成立即进行。程序中设置为 1MSC 的作用是:在顺序转换或重复转换中,若 MSC 置 1 则只需最初有一个触发信号,随后都会在前一次转换完成后,自动进入下一次转换。否则的话,每次转换完成都还需另个的触发信号。-DATASHEET.本文来自: 高校自动化网(W) 详细出处参考(转载请保留本链接):http:/ 内部参考电压选择位:01.5V,12.5VREFON 参考电压控制位 0 内部参考电压关闭 1 则为打开ADC12ON 内核控制位 0 关闭 1 打开ADC12TOVIE 转换时间溢出中断允
5、许 0 没发生转换时间溢出 1 则表示发生ADC12TVIE 溢出中断允许位 0 没有发生溢出 1 表示发生溢出以上 5 个位都设置 0。整个初始化意为选择使用外部参考源2 打开 ADC12 模块void Adc12Open(uchar doit)if(doit=0)ADC12CTL0 |= ADC12ON;ADC12CTL0 |= ADC12ENC; /允许转换else if(doit=100)ADC12CTL0 /不允许转换ADC12CTL0 #define ADC12ON (0x0010u) #define ADC12ENC (0x0002u) 寄存器 ADC12CTL0 中的 ADC1
6、2ON 复位时关闭 ADC12 的内核,置位时打开 ADC12的内核。寄存器同初始化,其实也可以看是初始化的一个步骤。即将 ADC12CTL0 中的ADC12ON 和 ENC 置位,打开内核,允许 ADC 转换。3 AdcDo 函数设置 AD 转换所使用的的模式和转换首地址。AdcDo(0,2);void AdcDo(uint adr,uchar mod)ADC12CTL1 = (adr12)+ADC12SHP+(mod1); /SHP 意思为由采样定时器控制采样#define ADC12SHP (0x0200u) 二、操作寄存器 ADC12CTL1 CSSTARTADD SHS SHP IS
7、SH ADC12DIV ADC12SSEL CONSEQ ADC12BUSY15-12 11-10 9 8 7-5 4-3 2-1 0CSSTARTADD 转换存储器地址位,这 4 位表示二进制 0-15 分别对应ADC12MEM0-15.可以定义单次转换地址或序列转换的首地址。(程序中设置为0)扩展采样模式(SHP=0):即 SHI 信号直接决定采样时间,参看 DATASHEET 和时序图;脉冲采样模式时,SHI 只负责输入一个上升沿信号来触发采样,而采样时间由ADC12CLK 及 SHT0_X 或 SHT1_X 决定。SHS 采样触发输入源选择位0 ADC12SC 1 TIMER_A.OU
8、T1 2 TIMER_B.OUT0 3 TIMER_B.OUT1 (程序中为 1)SHP 采样信号(SAMPCON)选择控制位0 采样信号源自采样触发输入信号 1 源自采样定时器,由输入信号(即采样信号)的上升沿触发采样定时器。 (程序中为 0)ISSH 采样输入信号方向控制位 (程序中为 0)0 同向输入 1 反向输入ADC12DIV ADC12 时钟源分频因子选择位,分频因子为 3 位二进制加一。 (程序中为 0 即分频因子为 0)ADC12SSEL ADC12 内核时钟源选择0 ADC12 内部时钟源:ADC120SC 1 ACLK 2 MCLK 3 SMCLK (程序中为 0,选 AD
9、C 内部时钟)CONSEQ 转换模式选择位0 单通道单次转换 1 序列通道单次转换 2 单通道多次转换 3 序列通道多次转换 (程序中为 2)ADC12BSSY ADC12 忙标志0 表示没有活动 1 表示正处于采样期间、转换、或序列转换期间。 (程序中为 0)注:只用于单通道单次转换模式3-15 位只能大 ENC=0 的前提下才能修改,因而初始化时是让 ENC 为复位。4 SetTongDaovoid SetTongDao(uchar tongdao,uchar eos,uchar mem,uchar verf,uchar inter) 4 0 0 2 1char *pmem_ctl= AD
10、C12MCTL;pmem_ctl += mem;/pmem_ctl 加上 mem,所指向的即为要操作的寄存器 ADC12MCTLx*pmem_ctl = tongdao+ (eos7) + (verf4);if(inter=0)ADC12IE elseADC12IE |= (0x1mem);此函数的功能是设置通道。有关通道的设置是针对某个转换存储器,应该设置以下内容:1、选择转换通道 2、选择的通道是否是转换序列的最后一个通道3、选择转换参考电压 4、转换完毕后是否触发中断指针变量 pmem_ctl 指向 ADC12MCTL 的基地址,参数 mem 的取值为 015,对应各存储器。pmem_c
11、tl 加上 mem,所指向的即为要操作的寄存器 ADC12MCTLx,在本模块中,应当至少使转换序列的最后一个通道转换完成时触发中断,以便置位等待转换结束的标志变量 Wait,Wait 为全局变量。实质是对三、ADC12MCTL 转换存储控制寄存器的操作:EOS SREF INCH7 6 5 4 3 2 1 0EOS 为序列结束控制位 0 表示序列还没有结束 EOS=1 表示此序列中最后一次转换 (程序中取 0,取外部中断源)EOS 位于所需 AD 通道中最后一个通道的 ADC12MCTLX 中,并且,中断允许是最后一个通道对应的 ADC12MEMX 对应的中断允许置位。SREF 参考电压选择
12、位 (程序中取 2/3)0 VR+=AVCC,VR=AVSS (采集两路模拟电源) 1 VR+=VREF+ (内部参考源),VR-=AVSS (模拟电源) 23 VR+=VAREF+(外部参考),VR-=AVSS (模拟电源) 4 VR+=AVCC,VR-=VREF_/VEREF-5 VR+ =VREF+,VR-= REF_/VEREF- 6,7 VR+=VEREF+,VR-=VREF-/VEREF-INCH (程序中取 0)0-7 A0-A7 (此为 8 路外部通道)8 VEREF+ 9 Veref+ 10 片内温度传感器输出 11(Avcc-Avss)/2 此为 4 路内部部通道12-15
13、 A12 - A15其中四、ADC12IE 为中断使能寄存器ADC12IE.15 14 .1 0意思 1 为允许相应的中断标志位 ADC12IFG.X 在置位时发生中断请求,0 为禁止中断。顺便介绍五、ADC12IFG各位为 1 表示转换结束,且转换结果已经装入转换存储器,0 表示 ADC12MEMX被仿问。因此上面的程序中,如果 INTER=则禁止中断,1 则允许中断。5 Adc12Govoid Adc12Go()uchar q0;for(q0=0;q016;q0+) AdMemq0=0;Wait=0;ADC12CTL0 |= ADC12ENC+ADC12SC; /转换开始while(Wai
14、t=0) ; /等待转换结束此函数功能为使用软件方式 AD,全局数组 ADMEM 用来存储转换结果,在启动前前 16 位全部赋 0 并复位转换完成标示 WAIT。启动转换的方法为将 ADC12CTL0的 ENC 置位,将寄存器在 ADC12CTL0 中的 ADC12SC 位置位,ADC12 采样保持时间与采样频率(由于近期要做简易示波器,要用到高频采样,所以对 MSP430 内部的 ADC12 进行了一些实验。技术手册中说明 ADC12 的最高采样频率可以达到 200ksps,但是经过研究发现ADC12 的最高采样频率只有 165KHz;采样保持时间与转换时间是不可避免的。以下为微控资料:【采
15、样与转换】ADC12 完成对一个模拟信号模数转换过程由两部分组成:采样保持和转换.完成采样转换周期时间= 采样保持时间 +转换时间采样保持时间:由产生 SAMPCON 信号开始到结束所需时间,这期间 ADC 进行对模拟信号采样保持。在脉冲采样模式时(SHP=1),采样时间: Tsample 4 x ADC12CLK x N。式中,Tsample 为采样保持时间,ADC12CLK 为 ADC12 内核时钟周期,N 则由 SHT1(SHT0)的 4 位二进制码决定。采样保持时间与 ADC12 模块的等效输入电路有关。从 ADC12 模块输入看 ADC内部等效为一个电阻(2K) 与一个电容 (30p
16、f)相串联.这个内部 RC 常数直接影响着最小的采样保持时间参数.所以,在采样转换中有一个最小采样保持时间值概念.这个最小采样保持时间值从上式中可以看出是由 ADC12CLK 时间周期决定(N=1 时) ,也就是说 ADC12CLK 的最高频率;这个频率不能超出 MSP430 芯片手册中所指定的最高频率( 最小采样保持时间值)。关于脉冲采样模式(SHP=1)这个最小采样保持时间值因芯片不同,详情可以查看相应的芯片手册。转换时间:ADC12 核将采样保持的模拟信号转换成数字所需要的时间,这个转换时间在脉冲采样模式和扩展采样模式都是相同的。转换时间=13 x (ADC12CLK/Fadc12clk
17、)在脉冲采样模式时完成一个模拟信号采样转换周期时间计数公式为:= (4 x ADC12CLK x N) + ( 13 xADC12CLK/Fadc12clk)以上内容来自微控论坛,因为要使用最高采样频率,对输入时钟以及采样保持时间不清楚,1611 头文件中并未指出 SHTx_x 对应的分频因子具体是多少,所以自己亲自实验测量。输入信号为 1kHz,ADC 输入时钟为 SMCLK,时钟频率为 8MHz。#define SHT0_0 (0*0x100u)/分频因子为 N=0(此时无保持时间,无法运行)#define SHT0_1 (1*0x100u)/分频因子为 N=8.8(对应采样频率为 166
18、k)#define SHT0_2 (2*0x100u)/分频因子为 N=8.8 (对应采样频率为 166k)#define SHT0_3 (3*0x100u)/分频因子为 N=9 (对应采样频率为 162k)#define SHT0_4 (4*0x100u)/分频因子为 N=16 (对应采样频率为 104k)#define SHT0_5 (5*0x100u)/分频因子为 N=24 (对应采样频率为 73k)#define SHT0_6 (6*0x100u)/分频因子为 N=32 (对应采样频率为 57k)#define SHT0_7 (7*0x100u)/分频因子为 N=48 (对应采样频率为 39k)#define SHT0_8 (8*0x100u)/分频因子为 N=64 (对应采样频率为 30k)可见 ADC12 的最高采样频率为 165KHz,实验数据没有进行数据统计,内容仅供参考。补充:SHP=1 时为脉冲采样模式( pulse mode),此时采样由采样定时器的上升沿触发, Tsample 4 x ADC12CLK x N,分频因子 N 决定了采样保持时间的长短。SHP=0 时为扩展采样模式(extended sample ),采样由 SHI 信号触发,(无采样保持时间,)SAMPCON 信号在高电平时采样下降沿转换,转换时间为 13 个 ADC12CLK。