MSP430程序库十ADC12模块

合集下载

MSP430单片机之ADC

MSP430单片机之ADC

一张图看懂MSP430单片机之ADC原创一,基础知识ADC即Analog to Digital Converter模数转换,把模拟信号进行量化,转换为数字量。

对于软件工程师来说,ADC内部的转换原理可以忽略,只需要了解其对外呈现的接口。

AD输入与输出之间的关系为:MSP430的ADC12内核模块是12位的,其最大输出为2^12 – 1 = 4095。

以VR-为参考点,当VIN小于或者等于VR-时得到的AD码值为0,当VIN大于或者等于VR+时,得到的AD码值为4095,当VIN处于VR-和VR+之间时,按线性比例转换。

这样,从MCU中读出AD码值,即可根据公式倒推回去计算出输入的模拟量电压。

二,ADC总体框图再补一张中文版的:三,分块解释1,ADC内核先来看看ADC最核心的部分。

当然少不了电压参考源VR+和VR-,以及模拟量输入部分。

模拟量输入部分是和“采样保持”电路连在一起的,这一部分后面再细说。

除此之外,与ADC内核相关的,还有以下几个信号:1,ADC12CLK。

在MCU中,任何模块都少不了时钟,ADC模块也不例外,必须有时钟信号它才能工作。

它有4个时钟源可以选择,并且可以1~8分频。

2,ADC12ON,这个是ADC内核的总开关,只有当ADC12ON这一位为1时,ADC内核模块才工作。

如果想要关闭ADC内核以降低功耗,可以将ADC12ON置为0.3,SAMPCON,采样控制信号。

该信号接至Convert,当SAMPCON为低电平时,ADC内核进行AD转换。

4,BUSY,用于指示内核模块是否正处于AD转换过程中。

2,采样保持。

MSP430寄存器手册

MSP430寄存器手册

2-时钟模块
微控网为你准备的 MSP430F 单片机入门必修课
微控网
MSP430F1XX 系列时钟模块图 时基模块结构如上图 : MSP430 系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制 振荡器(DCO),锁频环(FLL)及 FLL+等模块构成。由于 430 系列单片机中的型号不同, 而时钟模块也将有所不同。虽然不同型号的单片机的时基模块有所不同,但这些模块产 生出来的结果是相同的.在 MSP430F13、 14 中是有 TX2 振荡器的, 而 MSP430F11X,F11X1 中是用 LFXT1CLK 来代替 XT2CLK 时钟信号的.在时钟模块中有 3 个(对于 F13,F14)时钟 信号源(或 2 个时钟信号源,对于 F11X、F11X1): 1-LFXT1CLK: 低频 /高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较 常使用的晶体振荡器是 32768HZ。 2-XT2CLK: 高频时钟源.由外接晶体振荡器。需要外接两个振荡电容器,较常用 的晶体振荡器是 8MHZ。 3-DCOCLK: 数字可控制的 RC 振荡器。
微控网为你准备的 MSP430F 单片机入门必修课
微控网
1-复位模块
MSP430 单片机系统复位电路 从上 MSP430 系统复位电路功能模块图中可以看到了两个复位信号,一个是上电复位信 号 POR(Power On Reset)和上电清除信号 PUC(Power Up Clear)。 POR 信号是器件的复位信号,此信号只有在以下的事件发生时才会产生: □器件上电时。 □RST/NMI 引脚配置为复位模式,当 RST/NMI 引脚生产低电平时。 当 POR 信号产生时, 必然会产生 PUC 信号; 而 PUC 信号的产生时不会产生 POR 信号。 会引起产生 PUC 信号的事件: □POR 信号发生时。 □ 启动看门狗时,看门狗定时器计满时。 □ 向看门狗写入错误的安全参数值时。 □向片内 FLASH 写入错误的安全参数值时。 MSP430 单片机系统复位后器件的初始 当 POR 信号或 PUC 信号发生时引起器件复位后,器件的初始化状态为: □RST/NMI 引脚配置为复位模式。 □ I/O 引脚为输入模式。

MSP430程序库十二SVS(电源电压监控器)模块

MSP430程序库十二SVS(电源电压监控器)模块

MSP430程序库<十二>SVS(电源电压监控器)模块电源电压监控对于单片机来说,也是经常要用的模块。

当需要稳定的工业级产品时,经常要对电源电压监控,以保证单片机系统工作于正常环境或范围中。

MSP430F16x提供了一个现成的电源电压监控器模块SVS,方便检测电源电压或者是外部电压,可以设置为电压过低时复位或置标志位。

本程序即完成SVS的设置使用的程序库(msp430f14x没有此模块)。

硬件介绍:MSP430单片机含有的SVS模块可以很方便的监控电源电压或外部电压。

电源电压监控器(SVS)是用于监控AVCC电源电压或外部电压。

SVS的可配置当电源电压或外部电压下降到低于用户选择的电压级别时设置一个标志,或产生POR复位。

SVS模块有以下特点:可以监控AVCC电压;可选择产生复位信号;可软件设置SVS 比较器输出信号;低电压标志可以被锁定或被用户程序访问;有14个可供选择的电压门限;可以监控外部输入电压。

SVS模块可以很方便的监控电源电压或系统的其他电压,可以产生复位信号或是置标志位。

SVS模块仅有一个8位的寄存器,使用十分方便。

寄存器SVSCTL:高四位VLDx用来设置监控电源电压的门限、关闭SVS或者选择监控外部输入电压。

具体含义如下:当高四位是0时,SVS模块是关闭的;1-14分别是对电源电压监控的14个门限电压;15时,监控外部电压,门限电压是1.2v。

PORON位设置是否启动电压低于门限时,单片机复位:1 复位0 置标志位SVSFG SVSON位,这位和其他模块的ON位不太一样,SVSON位仅仅指示当前SVS模块是否打开,而不是用来开关模块的。

SVSOP位,这位是设置SVS内部比较器输出值:0 输出低电平1 输出高电平。

SVSFG位,标志位指示是否检测到低电压仅PORON 为0时有效出现低电压后置1;改为不会自动清零,必须软件清零。

另外,SVS模块值得一提的是:SVS门限电压已经设置回差带:每个SVS的水平已经滞后AVCC,接近临界值时,以减少小型电源电压的变化的敏感性。

MSP430 ADC10和ADC12

MSP430 ADC10和ADC12

•抗混叠滤波
所有信号的傅立叶级数都会分解出极高的频率,那 些无用的高频分量可进行AD欠采样。 欠采样就是用低采样率。 比如:人眼采样频率大约为24Hz。 车轮的转速只要小于12Hz,就能判断旋转方向.
•同步采样与分时复用
分时复用
同步采样
每一组通道都有各自独立的采样保持电路 和ADC模块。 共用控制电路的输入输出接口。
ADC12CONSEQx——转换模式选择位 0:单通道单次转换模式 1:序列通道单次转换模式 2:单通道多次转换模式 3:序列通道多次转换模式
ADC12MEM0~ADC12MEM15
转换存储寄存器: 该组寄存器均为16位寄存器
用来存放A/D转换结果。
用其中低12位,高4位在读出时为0
ADC12MCTLx
转换存储器控制寄存器 ADC12EOS——序列结束控制位 0:序列没有结束 1:该序列中最后一次转换
ADC12SREFx——参考电压源选择位 0:Vr+=AVcc,Vr-=AVss 1:Vr+=VREF+,Vr-=AVss 2,3:Vr+=VEREF+,Vr-=AVss 4:Vr+=AVcc,Vr-=VREF-/VEREF5:Vr+=VREF+,Vr-=VREF-/VEREF6,7:Vr+=VEREF+,Vr-=VREF-/VEREF-
转换时间:ADC12核将采样保持的模拟信号转换成数字所需要的时间。 转换时间=13 x (ADC12CLK/Fadc12clk) 在脉冲采样模式时完成一个模拟信号采样转换周期时间计数公式为: = (4 x ADC12CLK x N) + ( 13 x (ADC12CLK/Fadc12clk))
ADC12CTL0
SHITx 0 1 2 3 4 5 6 7 8 9 10 n 4 8 16 32 64 96 128 192 256 384 512 11 12 ~15 768 1024

MSP430ADC12转换模块总结

MSP430ADC12转换模块总结

MSP430ADC12转换模块总结MSP430ADC12转换模块是德州仪器(Texas Instruments)公司推出的一种12位模数转换器。

它主要应用于MSP430系列微控制器中,是一种用于模拟信号转换为数字信号的重要模块。

本文将对MSP430ADC12转换模块的原理、特点、应用和优缺点进行详细的总结。

一、原理1.设置输入通道和转换时钟。

2.开始转换,模块将自动切换到所选通道,并从该通道读取模拟输入信号。

3.模块以逐位的方式逼近比较,从最高有效位(MSB)开始,通过与DAC比较来确定该位是0还是14.继续逼近,直至得到完整的12位数字输出。

5.完成转换后,可以读取数字输出值,并根据需要进行后续处理。

二、特点1.高精度:MSP430ADC12转换模块具有12位分辨率,可以实现高精度的模拟信号转换。

2.快速转换:该模块支持多种转换速度选项,可根据应用需求选择合适的速度,实现快速转换。

3.多通道输入:MSP430ADC12模块支持多达16个输入通道,可以实现多种模拟信号的并行转换。

4.内部参考电压:模块内置了参考电压源,可以提供稳定的参考电压,减少外部硬件成本。

5.中断功能:该模块支持转换完成中断,当转换完成时,可以通过中断方式通知主控制器进行相应的处理。

6.低功耗:该模块工作时具有低功耗特性,可以在需要的时候进入低功耗模式,从而节省系统能量消耗。

三、应用1.传感器信号处理:可以将各种传感器(如温度、压力、湿度传感器)的模拟信号转换为数字信号,从而实现对传感器的精确测量和控制。

2.电力系统监测:可以对电力系统中的各种参数(如电压、电流、功率)进行模拟信号转换,实现对电力系统的实时监测和控制。

3.仪器仪表:可以将各种测量仪器(如多米表、示波器)的模拟信号转换为数字信号,提高仪器仪表的测量精度和稳定性。

4.通信系统:可以将通信系统中的模拟信号(如音频信号)转换为数字信号,实现通信数据的处理和传输。

四、优缺点1.高精度:具有12位分辨率,可以实现高精度的信号转换。

模数转换器ADC12的工作原理及使用(可编辑)

模数转换器ADC12的工作原理及使用(可编辑)

模数转换器ADC12的工作原理及使用//0>. 微控设计网中国MSP430单片机专业网站MSP430外围模块功能简介[4]作者:利尔达模数转换器ADC12的工作原理及使用基于模拟前端信号处理与控制技术的专业论坛、网站//. 微控设计网中国MSP430单片机专业网站MSP430F14X和44X系列单片机内嵌入一个高精度12位ADC转换模块。

该转换模块具有采样速率高,(最大采样速率达二十万次每秒,这无疑提高了测量精度)。

另外MSP430系列中的FE427也具有ADC模块功能,该模块中的16位ADC是采用∑-△转换技术来将模拟信号数字化的。

因此这两个模块转换的原理是有差别的,具体使用参见芯片参考手册。

在此讲座中只介绍MSP430F44X、14X系列的ADC转换模块。

从该模块电路看出,其模式转换是采用逐次逼近的方法来实现测量的。

该电路分5大功能模块组成,在配置上这5个模块都可以独立配置。

五五大大模块模块分析分析::1、带有采样/保持功能的ADC内核该采样器是以电菏为转换辅助量的及采用电荷重分布技术的逼近型ADC,其特点是高效经济。

其核心为1权电容网络。

其采样过程是一个电容充电过程。

其保持就是根据电容中的电菏不变实现在比较寄存器中的总电荷量在逐次逼近,随着逐次逼近过程的进行,权电容网络中的各电容两端的电压在不断变化,因而导致总电荷量在每个电容之间不断重新分布。

该原理要比传统逼近型ADC中控制精密电阻的相对精度要容易,因此实现较为经济,同时消除了电阻网络中因温度变化引起的阻值失配。

EXIT基于模拟前端信号处理与控制技术的专业论坛、网站//. 微控设计网中国MSP430单片机专业网站由于A/D转换的原理是基于电荷再分配,当内部开关切换输入信号进行采样时,会产生流入或流出电流,但这种电流由于外部的等效时间常数很小而不会影响转换精度。

但如果外部的阻抗很大,在确定的采样时间内,这些瞬变的电流就会影响采样的精度。

ADC12原理与应用

ADC12原理与应用
由上图可看出,ADC12 由以下 5 大功能模块构成: 一个带有采样与保持功能的 12 位转换器的 ADC12 内核; 内部参考电压发生器,同时有两种参考电压值可供选择; 可以选择的采样与转换过程中所需要的时钟信号源; 采样以及转换所需的时序控制电路; 转换结果有专门的桶型缓存。
ADC12 的主要特性归纳为如下: 采样速度快,最高可达 200ksps; 12 位转换精度,1 位非线性微分误差,一位非线性积分误差; 内置采样与保持电路,省去外部扩展的麻烦; 模块本身内置转换所需要时钟发生器,同时还有更多种时钟源可提供给 ADC12 模块; 内置温度传感器;
0: ADC12SC; 1: Timer_A.OUT1; 2: Timer_B.OUT0; 3: Timer_B.OUT1。 ADC12 模块提供多模拟量输入,确定了以上所讲述的控制位之后,就剩下选取哪个模 拟通道的模拟量送 ADC12 模块进行模数转换了。ADC12MCTLi 的最低 4 位所表示的数值将 为送达 ADC12 的模拟通道。 在进行模数转换的过程中,ADC12CTL1 的位 0 ――ADC12BUSY 位将为 1,读取转换 的结果必须在 ADC12BUSY 位为 0 之后,因为 ADC12BUSY 位为 1 表示正在转换,为 0 表 示转换完成。只有在转换完成之后才能读取正确结果。 ADC12 还有 4 种转换模式:单通道单次,单通道多次,多通道单次,多通道多次。这 里不详细讲述,下面的例子应用的是单通道单次转换模式。 下面以路灯控制器的设计为例说明 ADC12 的使用方法。路灯在一定的亮度值以上将熄 灭,而在亮度低于某个数值时亮起来。下面是简图。当亮度较大、光线较强时,光敏电阻的 电阻值比较小,这时它与下面 10K 分压,则送达 ADC12 的电压比较高;而当亮度较小、光 线较弱时,光敏电阻的电阻值比较大,这时它与下面 10K 分压,则送达 ADC12 的电压比较 低。通过 ADC12 模块转换出具体的表示光强度的数值(光线越强,转换后的数值越大,但 不成正比例),再设定一个开启路灯的阀值数据,则可以通过实际测量的光强度数据与阀值 数据比较得到是否开启路灯的目的。

MSP430引脚功能介绍和寄存器详细分类汇编

MSP430引脚功能介绍和寄存器详细分类汇编

引脚功能引脚名称序号I/O 说明Avcc 64 模拟供电电源正端.只为ADC和DAC的模拟部分供电Avss 62 模拟供电电源负端.只为ADC和DAC的模拟部分供电DVcc 1 数字供电电源正端.为所有数字部分供电DVss 63 数字供电电源负端.为所有数字部分供电P1.0/TACLK 12 I/O 通用数字I/O引脚/定时器A时钟信号TACLK输入P1.1/TA0 13 I/O 通用数字I/O引脚/定时器A捕捉:CCI0A输入,比较:OUT0输出P1.2/TA1 14 I/O 通用数字I/O引脚/定时器A捕捉:CCI1A输入,比较:OUT1输出P1.3/TA2 15 I/O 通用数字I/O引脚/定时器A捕捉:CCI2A输入,比较:OUT2输出P1.4/SMCLK 16 I/O 通用数字I/O引脚/SMCLK信号输出P1.5/TA0 17 I/O 通用数字I/O引脚/定时器A,比较:OUT0输出P1.6/TA1 18 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出P1.7/TA2 19 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出P2.0/ACLK 20 I/O 通用数字I/O引脚/ACLK输出P2.1/TAINCLK 21 I/O 通用数字I/O引脚/定时器A,INCLK上的时钟信号P2.2/CAOUT/TA0 22 I/O 通用数字I/O引脚/定时器A捕获:CCI0B输入/比较器输出P2.3/CA0/TA1 23 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出/比较器A输入P2.4/CA1/TA2 24 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出/比较器A输入P2.5/Rosc 25 I/O 通用数字I/O引脚,定义DCO标称频率的外部电阻输入P2.6/ADC12CLK/ 26 I/O 通用数字I/O引脚,转换时钟-12位ADC,DMA通道0外部触发器P2.7/TA0 27 I/O 通用数字I/O引脚/定时器A比较:OUT0输出P3.0/STE0 28 I/O 通用数字I/O引脚,USART0/SPI模式从设备传输使能端P3.1/SIMO0/SDA 29 I/O 通用数字I/O引脚,USART0/SPI模式的从入/主出,I2C数据P3.2/SOMI0 30 I/O 通用数字I/O引脚,USART0/SPI模式的从出/主入P3.3/UCLK0/SCL 31 I/O 通用数字I/O引脚,USART0/SPI模式的外部时钟输入,USART0 P3.4/UTXD0 32 I/O 通用数字I/O引脚,USART0/UART模式的传输数据输出P3.5/URXD0 33 I/O 通用数字I/O引脚,USART0/UART模式的接收数据输入P3.6/UTXD1 34 I/O 通用数字I/O引脚,USI1/UART模式的发送数据输出P3.7/URXD1 35 I/O 通用数字I/O引脚,USI1/UART模式的接收数据输入P4.0/TB0 36 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR0P4.1/TB1 37 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR1P4.2/TB2 38 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR2P4.3/TB3 39 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR3P4.4/TB4 40 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR4P4.5/TB5 41 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR5P4.6/TB6 42 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR6P4.7/TBCLK 43 I/O 通用数字I/O引脚,输入时钟TBCLK-定时器B7P5.0/STE1 44 I/O 通用数字I/O引脚,USART1/SPI模式从设备传输使能端P5.1/SIMO1 45 I/O 通用数字I/O引脚,USART1/SPI模式的从入/主出P5.2/SOMI1 46 I/O 通用数字I/O引脚,USART1/SPI模式的从出/主入P5.3/UCLK1 47 I/O 通用数字I/O引脚,USART1/SPI模式的外部时钟输入,USART0/SPI 模式的时钟输出- 8 -P5.4/MCLK 48 I/O 通用数字I/O引脚,主系统时钟MCLK输出P5.5/SMCLK 49 I/O 通用数字I/O引脚,子系统时钟SMCLK输出P5.6/ACLK 50 I/O 通用数字I/O引脚,辅助时钟ACLK输出P5.7/TboutH/ 51 I/O 通用数字I/O引脚,将所有PWM数字输出端口为高阻态-定时器B7P6.0/A0 59 I/O 通用数字I/O引脚,模拟量输入A0-12位ADCP6.1/A1 60 I/O 通用数字I/O引脚,模拟量输入A1-12位ADCP6.2/A2 61 I/O 通用数字I/O引脚,模拟量输入A2-12位ADCP6.3/A3 2 I/O 通用数字I/O引脚,模拟量输入A3-12位ADCP6.4/A4 3 I/O 通用数字I/O引脚,模拟量输入A4-12位ADCP6.5/A5 4 I/O 通用数字I/O引脚,模拟量输入A5-12位ADCP6.6/A6/DAC0 5 I/O 通用数字I/O引脚,模拟量输入A6-12位ADC,DAC.0输出P6.7/A7/DAC1/ 6 I/O 通用数字I/O引脚,模拟量输入A7-12位ADC,DAC.1输出,SVS输入RST/NMI 58 I 复位输入,不可屏蔽中断输入端口或者Bootstrap Lload启动(FLASHTCK 57 I 测试时钟,TCK是芯片编程测试和bootstrap loader启动的时钟输入端口TDI 55 I 测试数据输入,TDI用作数据输入端口,芯片保护熔丝连接到TDITDO/TDI 54 I/O 测试数据输出端口,TDO/TDI数据输出或者编程数据输出引脚TMS 56 I 测试模式选择,TMS用作芯片编程和测试的输入端口VeREF+ 10 I/P 外部参考电压的输入VREF+ 7 O 参考电压的正输出引脚VREF-/VeREF- 11 O 内部参考电压或者外加参考电压的引脚XIN 8 I 晶体振荡器XT1的输入端口,可连接标准晶振或者钟表晶振XOUT/TCLK 9 I/O 晶体振荡器XT1的输出引脚或测试时钟输入XT2IN 53 I 晶体振荡器XT2的输入端口,只能连接标准晶振XT2OUT 52 O 晶体振荡器XT2的输出引脚时钟模块76543210 DCO.2DCO.1DCO.0MOD.4MOD.3MOD.2MOD.1MOD.0DCO.0-DCO.4 定义8 种频率之一,可以分段调节DCOCLK 频率,相邻两种频率相差10%。

MSP430简介(超详细·)

MSP430简介(超详细·)

msp430简介MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱.一、IO口(一)、P口端口寄存器:1、PxDIR 输入/输出方向寄存器(0:输入模式 1:输出模式)2、PxIN 输入寄存器输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。

3、PxOUT 输出寄存器寄存器内的内容不会受引脚方向改变的影响。

4、PxIFG 中断标志寄存器(0:没有中断请求 1:有中断请求)该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受;5、PxIES 中断触发沿选择寄存器(0:上升沿中断 1:下降沿中断)6、PxSEL 功能选择寄存器(0:选择引脚为I/O端口 1:选择引脚为外围模块功能)7、PxREN 上拉/下拉电阻使能寄存器(0:禁止 1:使能)(二)、常用特殊P口:1、P1和P2口可作为外部中断口。

重要MSP430F149ADC12头文件摘要

重要MSP430F149ADC12头文件摘要

MPS430头文件摘要及注释一.ADC121..定义采样保持时间(ADC12CTL0)#define SHT0_0 (0*0x100u) //定义ADC12MEM0——ADC12MEM7采样#define SHT0_1 (1*0x100u) //保持时间为ADCCLK的多少个周期 eg:#define SHT0_2 (2*0x100u) //SHT0_0 代表采样保持时间为4个ADCCLK#define SHT0_3 (3*0x100u) //周期同理 SHT0_1为8个周期#define SHT0_4 (4*0x100u)#define SHT0_5 (5*0x100u)#define SHT0_6 (6*0x100u)#define SHT0_7 (7*0x100u)#define SHT0_8 (8*0x100u)#define SHT0_9 (9*0x100u)#define SHT0_10 (10*0x100u)#define SHT0_11 (11*0x100u)#define SHT0_12 (12*0x100u)#define SHT0_13 (13*0x100u)#define SHT0_14 (14*0x100u)#define SHT0_15 (15*0x100u)#define SHT1_0 (0*0x1000u) //定义ADC12MEM8——ADC12MEM15采样#define SHT1_1 (1*0x1000u) //保持时间为ADCCLK的多少个周期#define SHT1_2 (2*0x1000u) //使用方法同SHT0_x#define SHT1_3 (3*0x1000u)#define SHT1_4 (4*0x1000u)#define SHT1_5 (5*0x1000u)#define SHT1_6 (6*0x1000u)#define SHT1_7 (7*0x1000u)#define SHT1_8 (8*0x1000u)#define SHT1_9 (9*0x1000u)#define SHT1_10 (10*0x1000u)#define SHT1_11 (11*0x1000u)#define SHT1_12 (12*0x1000u)#define SHT1_13 (13*0x1000u)#define SHT1_14 (14*0x1000u)#define SHT1_15 (15*0x1000u)2.转换模式选择(ADC12CTL1)#define CONSEQ_0 (0*2u) //单通道单次转换#define CONSEQ_1 (1*2u) //多通道单次转换#define CONSEQ_2 (2*2u) //单通道多次转换#define CONSEQ_3 (3*2u) //多通道多次转换3..ADC12内核时钟源选择(ADC12CTL1)#define ADC12SSEL_0 (0*8u) //ADC内部时钟源 ADC12OSC #define ADC12SSEL_1 (1*8u) //ACLK#define ADC12SSEL_2 (2*8u) //MCLK#define ADC12SSEL_3 (3*8u) //SMCLK4.ADC时钟分频选择(ADC12CTL1)//分频数=三位二进制数加#define ADC12DIV_0 (0*0x20u) //1分频即不分频#define ADC12DIV_1 (1*0x20u) //2分频#define ADC12DIV_2 (2*0x20u)#define ADC12DIV_3 (3*0x20u)#define ADC12DIV_4 (4*0x20u)#define ADC12DIV_5 (5*0x20u)#define ADC12DIV_6 (6*0x20u)#define ADC12DIV_7 (7*0x20u) //8分频5..采样触发输入源选择(ADC12CTL1)#define SHS_0 (0*0x400u) //ADC12SC 位#define SHS_1 (1*0x400u) //TimerA_OUT1#define SHS_2 (2*0x400u) //TImerB_OUT0#define SHS_3 (3*0x400u) //TimerB_OUT16.转换结果数据存储寄存器选择(ADC12CTL1)#define CSTARTADD_0 (0*0x1000u) //结果存在ADC12MEM0 #define CSTARTADD_1 (1*0x1000u)#define CSTARTADD_2 (2*0x1000u)#define CSTARTADD_3 (3*0x1000u)#define CSTARTADD_4 (4*0x1000u)#define CSTARTADD_5 (5*0x1000u)#define CSTARTADD_6 (6*0x1000u)#define CSTARTADD_7 (7*0x1000u)#define CSTARTADD_8 (8*0x1000u)#define CSTARTADD_9 (9*0x1000u)#define CSTARTADD_10 (10*0x1000u)#define CSTARTADD_11 (11*0x1000u)#define CSTARTADD_12 (12*0x1000u)#define CSTARTADD_13 (13*0x1000u)#define CSTARTADD_14 (14*0x1000u)#define CSTARTADD_15 (15*0x1000u)注:在单通道单次转换情况下,转换结果存储寄存器的选择与ADC转换通道选择并没有必然联系,即从不同转换通道进入的数据经转换后,其结果在不引起错误的前提下,可存入任一个转换结果存储寄存器。

MSP430单片机原理解读

MSP430单片机原理解读

第 2 章MSP430 单片机原理与 C 语言基础MSP430系列超低功耗单片机有200多种型号,TI公司用3~ 4位数字表示其型号。

其中第一位数字表示大系列,如MSP430F1xx系列、MSP430F2xx系列、MSP430F4xx系列、MSP430F5xx系列等。

在每个大系列中,又分若干子系列,单片机型号中的第二位数字表示子系列号,一般子系列越大,所包含的功能模块越多。

最后1~2 位数字表示存储容量,数字越大表示RAM 和ROM 容量越大。

430 家族中还有针对热门应用而设计的一系列专用单片机。

如SP430FW4xx 系列水表专用单片机、MSP430FG4xx 系列医疗仪器专用单片机、MSP430FE4xx 系列电能计量专用单片机等。

这些专用单片机都是在同型号的通用单片机上增加专用模块而构成的。

最新的MSP430型号列表可以通过TI公司网站下载。

在开发单片机应用系统时,第一步就是单片机的选型,选择合适的单片机型号往往就能事半功倍。

单片机选型基本方法是选择功能模块最接近项目需求的系列,然后根据程序复杂程度估算存储器和RAM 空间,并留有适当的余量,最终决定选用的单片机型号。

本章节以MSP430F249单片机为学习目标,介绍单片机的基本结构和工作原理,读者可以举一反三、触类旁通,而不必每种型号都去学习却无法深入掌握。

2.1 MSP430F249单片机基本结构与原理2.1.1MSP430F249的主要结构特点供电电压范围1.8V~3.6V 。

超低功耗:活动状态270uA(1MHz,2.2V);待机模式0.3uA;关机模式0.1uA。

16位RISC精简指令集处理器。

时钟系统:多种时钟源,可灵活使用。

时钟频率达到16MHz ;具有内部振荡器;可外接32kHz 低频晶振;外接时钟输入。

12位A/D转换器,内部参考电压,采用保持电路。

16位定时器A,3个捕获/比较寄存器。

16 位定时器B,7 个捕获/比较寄存器。

msp430的一些常用的C语言控制程序---ADC12(1)

msp430的一些常用的C语言控制程序---ADC12(1)

msp430的一些常用的C语言控制程序---ADC12(1)说说关于AD 的程序吧:就写一下最简单的单通道单次采集吧://查询方式获取AD 值#include //我们的系统板子是msp430f149,所以得用这个头文件~void ADC_Init(void);unsigned ADC_Result;void main(void){ WDTCTL = WDTPW + WDTHOLD; ADC_Init(); while(1){ ADC12CTL0 |= ADC12SC;//ADC12SC 是当SAMPCON 由采样定时器产生,ADC12SC 由0 改为1 启动转换while(ADC12CTL1 & BIT0 == 1);//当ADC12BUSY == 1 时等待ADC_Result = ADC12MEM0;//这块可单步运行时在IAR 中观察到,或者有LED,可能对它处理一下显示~ }}//void ADC_Init(void) //初始化时钟{ P6DIR &= ~BIT6;//设置p6.6为输入,这个口和板子上的接口有关.对了,149 内置的是12 位AD,精度足够一般用了P6SEL |= BIT6; //选择P6.6 的第二功能口ADC12CTL0 = ADC12ON + REFON + SHT0_6 ;//AD 电源打开、参考电压打开、采样时间分频设置,一般6 或8 ADC12CTL0 &= ~REF2_5V; //选择1.5V 参考电压,这个因为采集到的电压值变化有关ADC12CTL1 |= SHP + CONSEQ_0+ SHS_0; //使用采样时钟,单通道单次采样ADC12MCTL0 = SREF_1 + INCH_6; //选择AD 参考电压和输入通道ADC12CTL0 |= ENC; //ADC 转化使能,此处一定得放在后面,要不结果容易出错} 这就是最简单的AD 采集了,430 还有另外三种模式,原理都差不多,就是多寄存器中的各位操作,这里我没有用中断模式,另外的三中模式得用中断方式来获得数据tips:感谢大家的阅读,本文由我司收集整编。

MSP430F149的ADC操作

MSP430F149的ADC操作

MSP430F149的ADC操作1)ADC图解图1 ADC的原理图理解:1.ADC的时钟来源可以有四个(ACLK/MCLK/SMCLK/ADC12SO)由ADC12SSELx来选择。

并且可以由ADC12DIVx控制选择分频。

2.ADC的采样参考电压可以由SREF0,SREF1来选择四种参考电压。

3.INCHx控制选择模拟电压输入口。

4.SHSx选择控制方式。

2)ADC的内核1.ADC的转换公式当采样最高电压高过或等于参考电压的时候,是最大值0FFFH。

当采样最低电压低于或是等于参考电压的时候,是最小值000H。

2.控制ADC12的内核可以通过ADC12CTL0和ADC12CTL1两个寄存器来控制。

当不使用的时候可以通过ADC12ON位来控制关闭内核以达到低功耗的目的。

当修改转换使能标志ENC的时候,要先判断ADC12内核是否在进行转换工作,如果在转换工作期间关闭ENC(置零)那么最终得到错误的结果。

3)ADC的时钟来源ADC可以有四种时钟来源。

而ADC12OSC是ADC内置的一个时钟源,大概频率在5MHZ左右,不过该时钟源由个人设备、供电电压和外部温度的影响很大。

4)ADC的参考电压发生器ADC内部可以提供一个可以产生1.5V或是2.5V的产考电压发生器。

当设计使用的时候,需要将一个10uF的电容和一个0.1uF的电容并联到它的输出端。

而且使用的时候,打开发生器至少需要等待17ms以让参考电压达到一个稳定的值。

5)ADC的低功耗当ADC内核不适用的时候,它会自动进入关闭模式,在使用的时候自动苏醒。

而它的参考电压却不会自动关闭,要用手通过REFON手动关闭。

6)ADC的采样保持触发源它的触发源由四种选择。

1.ADC12SC位控制。

2.定时器A输出控制3.定时器B输出控制4.定时器B输出控制7)ADC的采样保持时间ADC的采样保持时间有两种模式。

1.拓展型采样时钟模式。

这个时候,采样的时间由SHI决定,也就是当SHI上升沿的时候开始采样,下降沿的时候结束采样。

MSP430程序库八DAC12的使用

MSP430程序库八DAC12的使用

// 启动效验 DAC
while((DAC12_0CTL & DAC12CALON) != 0); // 等待效验完成
break;
//模块 0
case 1:case'1': DAC12_1CTL |= DAC12CALON;
// 启动效验 DAC
while((DAC12_1CTL & DAC12CALON) != 0); // 等待效验完成
default :
return;
//参数错误
}
}
输出函数的参数也和初始化的 module 参数含义相同,这个函数比较简单,只是按照要输出的值赋给 DAT 寄存器。 DAC12 的程序库就这么多,DAC12 还可以严格按时间更新数据,以输出一定频率的波形,可以设置为 TA out1 上升沿更新数据,或 TB out2 上升沿更新。另外还可以和 DMA 共同使用,完成更复杂的功能;这里均没有实现,需要的话可以根据寄存器功能来实现。 程序部分就到这了。
case 2:case'2':
DAC12_0Init(DAC12AMPx);
DAC12_1Init(DAC12AMPx); break;
//模块 0、1
case 3:case'3':
DAC12_0Init(DAC12AMPx);
DAC12_1Init(DAC12AMPx);
DAC12_0CTL |= DAC12GRP; break; //无校验
*
压;内部 2.5v 参考电压:需要 AD 设置参考源打开 2.5.
*********************************************************/

MSP430引脚功能介绍和寄存器详细分类

MSP430引脚功能介绍和寄存器详细分类

MSP430引脚功能介绍和寄存器详细分类引脚功能引脚名称序号I/O 说明Avcc 64 模拟供电电源正端.只为ADC和DAC的模拟部分供电Avss 62 模拟供电电源负端.只为ADC和DAC的模拟部分供电DVcc 1 数字供电电源正端.为所有数字部分供电DVss 63 数字供电电源负端.为所有数字部分供电P1.0/TACLK 12 I/O 通用数字I/O引脚/定时器A时钟信号TACLK 输入P1.1/TA0 13 I/O 通用数字I/O引脚/定时器A捕捉:CCI0A输入,比较:OUT0输出P1.2/TA1 14 I/O 通用数字I/O引脚/定时器A捕捉:CCI1A输入,比较:OUT1输出P1.3/TA2 15 I/O 通用数字I/O引脚/定时器A捕捉:CCI2A输入,比较:OUT2输出P1.4/SMCLK 16 I/O 通用数字I/O引脚/SMCLK信号输出P1.5/TA0 17 I/O 通用数字I/O引脚/定时器A,比较:OUT0输出P1.6/TA1 18 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出P1.7/TA2 19 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出P2.0/ACLK 20 I/O 通用数字I/O引脚/ACLK输出P2.1/TAINCLK 21 I/O 通用数字I/O引脚/定时器A,INCLK上的时钟信号P2.2/CAOUT/TA0 22 I/O 通用数字I/O引脚/定时器A捕获:CCI0B输入/比较器输出P2.3/CA0/TA1 23 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出/比较器A输入P2.4/CA1/TA2 24 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出/比较器A输入P2.5/Rosc 25 I/O 通用数字I/O引脚,定义DCO标称频率的外部电阻输入P2.6/ADC12CLK/ 26 I/O 通用数字I/O引脚,转换时钟-12位ADC,DMA通道0外部触发器P2.7/TA0 27 I/O 通用数字I/O引脚/定时器A比较:OUT0输出P3.0/STE0 28 I/O 通用数字I/O引脚,USART0/SPI模式从设备传输使能端P3.1/SIMO0/SDA 29 I/O 通用数字I/O引脚,USART0/SPI模式的从入/主出,I2C数据P3.2/SOMI0 30 I/O 通用数字I/O引脚,USART0/SPI模式的从出/主入P3.3/UCLK0/SCL 31 I/O 通用数字I/O引脚,USART0/SPI模式的外部时钟输入,USART0 P3.4/UTXD0 32 I/O 通用数字I/O引脚,USART0/UART模式的传输数据输出P3.5/URXD0 33 I/O 通用数字I/O引脚,USART0/UART模式的接收数据输入P3.6/UTXD1 34 I/O 通用数字I/O引脚,USI1/UART模式的发送数据输出P3.7/URXD1 35 I/O 通用数字I/O引脚,USI1/UART模式的接收数据输入P4.0/TB0 36 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR0P4.1/TB1 37 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR1P4.2/TB2 38 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR2P4.3/TB3 39 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR3P4.4/TB4 40 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR4P4.5/TB5 41 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR5P4.6/TB6 42 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR6P4.7/TBCLK 43 I/O 通用数字I/O引脚,输入时钟TBCLK-定时器B7P5.0/STE1 44 I/O 通用数字I/O引脚,USART1/SPI模式从设备传输使能端P5.1/SIMO1 45 I/O 通用数字I/O引脚,USART1/SPI模式的从入/主出P5.2/SOMI1 46 I/O 通用数字I/O引脚,USART1/SPI模式的从出/主入P5.3/UCLK1 47 I/O 通用数字I/O引脚,USART1/SPI模式的外部时钟输入,USART0/SPI 模式的时钟输出- 8 -P5.4/MCLK 48 I/O 通用数字I/O引脚,主系统时钟MCLK输出P5.5/SMCLK 49 I/O 通用数字I/O引脚,子系统时钟SMCLK输出P5.6/ACLK 50 I/O 通用数字I/O引脚,辅助时钟ACLK输出P5.7/TboutH/ 51 I/O 通用数字I/O引脚,将所有PWM数字输出端口为高阻态-定时器B7P6.0/A0 59 I/O 通用数字I/O引脚,模拟量输入A0-12位ADC P6.1/A1 60 I/O 通用数字I/O引脚,模拟量输入A1-12位ADC P6.2/A2 61 I/O 通用数字I/O引脚,模拟量输入A2-12位ADC P6.3/A3 2 I/O 通用数字I/O引脚,模拟量输入A3-12位ADC P6.4/A4 3 I/O 通用数字I/O引脚,模拟量输入A4-12位ADC P6.5/A5 4 I/O 通用数字I/O引脚,模拟量输入A5-12位ADCP6.6/A6/DAC0 5 I/O 通用数字I/O引脚,模拟量输入A6-12位ADC,DAC.0输出P6.7/A7/DAC1/ 6 I/O 通用数字I/O引脚,模拟量输入A7-12位ADC,DAC.1输出,SVS输入RST/NMI 58 I 复位输入,不可屏蔽中断输入端口或者Bootstrap Lload启动(FLASHTCK 57 I 测试时钟,TCK是芯片编程测试和bootstrap loader启动的时钟输入端口TDO/TDI 54 I/O 测试数据输出端口,TDO/TDI数据输出或者编程数据输出引脚TMS 56 I 测试模式选择,TMS用作芯片编程和测试的输入端口VeREF+ 10 I/P 外部参考电压的输入VREF+ 7 O 参考电压的正输出引脚VREF-/VeREF- 11 O 内部参考电压或者外加参考电压的引脚XIN 8 I 晶体振荡器XT1的输入端口,可连接标准晶振或者钟表晶振XOUT/TCLK 9 I/O 晶体振荡器XT1的输出引脚或测试时钟输入XT2IN 53 I 晶体振荡器XT2的输入端口,只能连接标准晶振XT2OUT 52 O 晶体振荡器XT2的输出引脚时钟模块DCO.0-DCO.4 定义8 种频率之一,可以分段调节DCOCLK 频率,相邻两种频率相MOD.0-MOD.4 定义在32 个DCO 周期中插入的Fdco+1 周期个数,而在下的DCO 周期中为Fdco 周期,控制改换DCO 和DCO+1 选择的两种频率。

MSP430 ADC10和ADC12解读

MSP430 ADC10和ADC12解读
常用单位是ksps和Msps,表示每秒采样千/百万次(kilo / Million Samples per Second)。
ADC时钟源的选择
000: 1分频 001: 2分频 010:3分频 011:4分频 100:5分频 101:6分频 110:7分频 111:8分频
00: 5MHz 01: ACLK 10: MCLK 11: SMCLK
ADC转换结果
ADC10MEM0:用来存放得到的AD值
ADC转换模式
ADC10CONSEQx------ADC10CTL1 (1)单通道单次转换模式 00
(2)序列通道单次转换模式 01
(3)单通道多次转换模式 10
(4)序列通道多次转换模式 11
ADC12
采样与转换
ADC12完成对一个模拟信号模数转换过程由两部分组成:采样保持和转换.
ADC10
性能概述
8通道,采样率200ksps,精度10位 带内部基准1.5V或2.5V,也可外接基准电压。 内置通道可直接对内部温度传感器、芯片供电电 压和外部基准电压采样 AD采样起始信号可软件触发,也可由Timer_A控制 单通道单次采样、单通道重复采样、多通道轮流 采样、多通道重复采样4种转换模式 可单独关闭ADC和基准电压源以便降低功耗 采样数据可自动存储在指定的存储空间中
ADC时钟 A/D转换启动信号 电源
参考电源
A/D
数字量输出
转换器
输出使能信号 A/D转换完成信号
模拟量输入信号
数字地
模拟地
•分辨率和采样率的区别
一般分辨率高、采样率就低。 SAR型ADC位数越高,比较的次数就越多, 速度就越慢。
•采样定理
当采样频率大于信号中最高频率的2倍时, 采样之后的数字信号完整地保留了原始信 号中的信息。

ADC_12序列通道多次采集

ADC_12序列通道多次采集

/****************************************************** *************************** 程序名:ADC_12序列通道多次采集* 功能:实现对序列通道(A0~A7)多次采集* 说明:采用430内部ADC_12序列道多次采集模式* 注意:峰峰值不能大于3.3V* 接口:A0-->P6.0* A1-->P6.1* A2-->P6.2* A3-->P6.3* A4-->P6.4* A5-->P6.5* A6-->P6.6* A7-->P6.7** LCD_RS --> P9.0* LCD_RW --> P9.1* LCD_EN --> P9.2* LCD_PSB --> P9.3* LCD_RST --> P9.4* LCD_DATA --> P8******************************************************** ************************/#include "msp430x54x.h" //MSP430f5438头文件#include "12864.h" //LCD12864头文件#include "XT2.h" //XT2头文件/****************************************************** **************************用到的宏定义******************************************************* *************************/#define uchar unsigned char //一些变量的定义#define uint unsigned int#define ulong unsigned long#define CPU_F ((double)8000000)#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))/****************************************************** **************************变量定义区******************************************************* ************************/ulong dat_AD0, AD0, i0; //其实这些变量定义一组就行了,变量可以复用的ulong dat_AD1, AD1, i1;ulong dat_AD2, AD2, i2;ulong dat_AD3, AD3, i3;ulong dat_AD4, AD4, i4;ulong dat_AD5, AD5, i5;ulong dat_AD6, AD6, i6;ulong dat_AD7, AD7, i7;uint ADCbuf0[4]={0,0,0,0}; //这里用二维数组更好定义和么多数组只是为了直观一点方便调试程序uint ADCbuf1[4]={0,0,0,0};uint ADCbuf2[4]={0,0,0,0}; //这些数组用于存储每次采集到的数据uint ADCbuf3[4]={0,0,0,0};uint ADCbuf4[4]={0,0,0,0};uint ADCbuf5[4]={0,0,0,0};uint ADCbuf6[4]={0,0,0,0};uint ADCbuf7[4]={0,0,0,0};/****************************************************** **************************函数定义区******************************************************* ************************/void ADC12(void); //ADC12初始化设置void ADC12_display(void); //AD数据和电压显示/****************************************************** **************************函数名:main(void)*功能:主函数*参数:无*返回值:无******************************************************* ************************/void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗XT2_init(); //TX2时钟初始化ADC12(); //ADC12初始化设置//P2DIR=0xff;//P2SEL |=0x80; //测试ADC12CLK用的33KHzLCD_init(); //LCD12864初始化LCD_play(); //界面显示_EINT(); //打开全局中断while(1){ADC12_display(); //AD数据和电压显示}}/****************************************************** **************************函数名:ADC12()*功能:ADC12初始化设置*参数:无*返回值:无******************************************************* ************************/void ADC12(void){// ADC12ON=1:打开ADC12;//P6SEL |= 0x02; //p6.1为模拟输入// ADC12MSC=1:(多重采样转化控制位)采样信号由SHI仅首次触发)// ADC12SHT0_8: ADC12SHT0x = 1000;采样周期为256个ADC12CLK,ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8 ; // ADC12SHP : SAMPCON 信号来自采样定时器SAMPCON 为高表示正在采样ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3+ ADC12SSEL_1; // ADC12CONSEQ_3: 序列通道重复转换模式ADC12MCTL0 =ADC12INCH_0+ADC12SREF_0; // ADC12SSEL_1: 时钟源选择ACLK=33KHz,不分频ADC12MCTL1 =ADC12INCH_1+ADC12SREF_0; // ADC12SREF_0:参考电压(3.3V)A VCC+和A VssADC12MCTL2 =ADC12INCH_2+ADC12SREF_0; // ADC12SSEL_1: 时钟源选择ACLK=33KHz,不分频ADC12MCTL3 =ADC12INCH_3+ADC12SREF_0; // ADC12INCH_x: 输入通道为AxADC12MCTL4 =ADC12INCH_4+ADC12SREF_0; // ADC12EOS:表明一个序列的最后一次转换是序列结束ADC12MCTL5 =ADC12INCH_5+ADC12SREF_0; //ADC12MCTL6 =ADC12INCH_6+ADC12SREF_0; // ADC12CTLx: ADC12控制寄存器xADC12MCTL7=ADC12INCH_7+ADC12SREF_0+ADC12EOS; // ADC12MCTLx: ADC12_A转换存储控制寄存器x//ADC12MSC=1适用于-序列-转换或者-重复转换-模式// ADC12IE: ADC12_A中断使能寄存器//起始地址ADCMEM0,采样脉冲由采样定时器产生,////A VCC: 模拟电源//ADC12IE = 0xff; // 使能ADC12IFGx 位的中断请求ADC12CTL0 |= ADC12ENC; // ADC12ENC: 使能采样转换ADC12CTL0 |= ADC12SC; // ADC12SC: 启动采样转换}/****************************************************** **************************函数名:ADC12_display(void)*功能:AD数据和电压显示*参数:无*返回值:无******************************************************* ************************/void ADC12_display(void){uint dat_V0; //用于电压数据显示uint dat_V1;uint dat_V2;uint dat_V3;uint dat_V4;uint dat_V5;uint dat_V6;uint dat_V7;//这些数据显示太啰嗦了dat_V0=(uint)(((dat_AD0>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x81); //数据显示地址write_date(0x30+dat_V0/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V0/100%10);write_date(0x30+dat_V0/10%10);write_date(0x30+dat_V0%10);dat_V1=(uint)(((dat_AD1>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x85); //数据显示地址write_date(0x30+dat_V1/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V1/100%10);write_date(0x30+dat_V1/10%10);write_date(0x30+dat_V1%10);dat_V2=(uint)(((dat_AD2>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x91); //数据显示地址write_date(0x30+dat_V2/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V2/100%10);write_date(0x30+dat_V2/10%10);write_date(0x30+dat_V2%10);dat_V3=(uint)(((dat_AD3>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x95); //数据显示地址write_date(0x30+dat_V3/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V3/100%10);write_date(0x30+dat_V3/10%10);write_date(0x30+dat_V3%10);dat_V4=(uint)(((dat_AD4>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x89); //数据显示地址write_date(0x30+dat_V4/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V4/100%10);write_date(0x30+dat_V4/10%10);write_date(0x30+dat_V4%10);dat_V5=(uint)(((dat_AD5>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x8d); //数据显示地址write_date(0x30+dat_V5/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V5/100%10);write_date(0x30+dat_V5/10%10);write_date(0x30+dat_V5%10);dat_V6=(uint)(((dat_AD6>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x99); //数据显示地址write_date(0x30+dat_V6/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V6/100%10);write_date(0x30+dat_V6/10%10);write_date(0x30+dat_V6%10);dat_V7=(uint)(((dat_AD7>>2)*3.3/4095)*1000); //扩大1000倍dat_AD>>2相当于dat_AD/4write_com(0x9d); //数据显示地址write_date(0x30+dat_V7/1000);write_date(0x2e); //显示小数点write_date(0x30+dat_V7/100%10);write_date(0x30+dat_V7/10%10);write_date(0x30+dat_V7%10);}/****************************************************** *************************函数名:ADC12_ISR(void)功能:转换存储寄存器--中断服务程序参数:ADC12IV返回值:无******************************************************* ************************/#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR(void){switch(__even_in_range(ADC12IV,34)){case 0: break; // Vector 0: 无中断case 2: break; // Vector 2: ADC12MEMSx溢出case 4: break; // Vector 4: 转换时间溢出case 6: // Vector 6: ADC12IFG0ADCbuf0[i0]=ADC12MEM0;//每次转换后转换存储寄存器旳值赋值给数组i0++;if(i0==4) //数值累加4次再取平均值以减小误差{for(i0=0;i0<4;i0++){AD0 = AD0+ADCbuf0[i0]; //数组旳值又累加给变量AD0}dat_AD0 = AD0; //变量AD0赋值给dat_AD0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430程序库<十>ADC12模块
msp430内部含有ADC12模块,可以完成12位的模数转换,当对精度或其他指标要求不高时,可以选用430单片机内部的ADC12完成模数转换工作。

这里主要实现了一个比较通用的ADC12模块初始化程序,具体的数据存储和处理需要自己在中断处理函数中添加。

硬件介绍:
msp430单片机内的ADC12模块的特点如下:12位转换精度,1位非线形误差,1位非线形积分误差;多种时钟源给ADC12模块,切本身自带时钟发生器;内置温度传感器;
TimerA/TimerB硬件触发器;8路外部通道和4路内部通道;内置参考电压源和6种参考电压组合;4种模式的模数转换;16bit的转换缓存;ADC12关闭支持超低功耗;采用速度快,最高200Kbps;自动扫描和DMA使能。

430内部的ADC12功能还是蛮强大的,可以有定时器触发模数转换开始,还可以和内部的DMA模块共同使用,完成高速的采样转储等高级功能。

这个AD的转化公式如下,可以根据它计算采样的模拟电压值:
使用AD是还要注意采样时间,430单片机的模数ADC12模块的等效模拟电压输入电路如下:
其中V S是信号源电压,R S是信号源内阻,V I在Ax(ADC12模块模拟输入端)上的电压,R I单片机内多路开关等效电阻,V C是保持电容上的电压(ADC12模块采样的电压),C I 是电容的值。

需要根据这些值计算采样时间:
代入单片机上的参数后公式如下:
我的程序中采样时间设的是4us,可以算出如果用我的程序(不更改采样时间)的话,最大信号源内阻可以是6.8k,当信号源内阻更大时,可以自己按要求设采样时间(在程序的初始化函数内的寄存器设置部分)。

还有,ADC模数转换时要求参考电压等很稳定,为了达到这个要求,德州仪器要求这部分的电路如下:
即:所有参考源和电源均并联一组0.1uF和10uF的电容。

硬件部分就说这么多了;如果需要更详细的说明,参考用户指南。

程序实现:
程序主要实现的是一个比较通用的初始化程序,内容如下:
程序先判断n 通道总数是否超过了可用的个数,超过则返回零然后设置ADC12CTL0和ADC12CTL1中不需要特殊设置的部分,然后在设置通道模式(根据rep参数的值);for 循环设置的是每个存储寄存器的设置ADC12MCTLx ;*(char*)(ADC12MCTL0_ + n - 1) |= EOS; //序列结束这句加入序列结束标志;最后设置中断寄存器并返回成功设置标志。

其中比较特殊的是ADC12MCTL0_,这个是430提供的头文件中定义的A DC12MCTL0的地址值,以其为指针首址操作ADCMCTLx寄存器,从而利用循环设置寄存器的内容,大量减少了代码行数。

参数channels[]是每个存储寄存器的设置(除EOS位之外的),含义如下:
这是从用户指南里复制来的,每一位和ADC12MCTLx的意义相同(去掉EOS位),所以可用宏定义来制定这个参数,如:
这是3个通道A0-A2采样,多次采样。

启动转换函数:
ADC初始化完成后,调用此函数开始AD转换,转换完成后(一个序列通道,如:刚才的0-2),程序自动进入AD中断,用户需要在这里为自己的函数添加处理逻辑;这里只存储了转化的结果:
该程序实现的是多次A0-A2 32次转换,把结果存入results数组。

单次时,仅仅采样一次(A0-A2)可用自己更改处理函数。

程序部分就完成了,调用时注意要自己实现处理逻辑或存储逻辑。

使用示例:
本程序使用方式还是加入C文件,包含H文件;不过和之前的程序不同的是要自己实现中断处理逻辑。

使用示例参见程序库中的ADC12.
这里实现的是3通道多次转换,参考电压都是内部参考电压。

自己实现的处理逻辑参见前面的程序实现的最后一部分。

ADC12模块部分就到这里了,有什么不足之处,欢迎提出建议、讨论。

相关文档
最新文档