MSP430单片机ADDC12电压采集程序

作者&投稿:薛背 (若有异议请与网页底部的电邮联系)
求msp430F2012单片机ADC采集直流电压信号程序!谢谢!!!~

有什么问题呢?你要在数码管上显示的是正弦波的有效值吧?按照有效值的定义,是指一个周期内所有采样点的方均根值。因此,程序的关键是以下三点:第一、采样频率必须满足采样定理的要求。如果正弦波失真较小,建议采样频率取正弦波基波频率的10倍。第二、获取正弦波的周期,由此得出参与方均根运算的点数。对于固定频率的信号测量,如果精度要求不是很高,这个值可以是常数。否者需要通过频率测量电路测量获取。另外还有一种简单的方法,就是不管频率,按照固定点数进行运算。这种方法需要运算至少10个以上的周期才能弥补非整周期运算带来的误差,而且精度要求越高,需要的运算点数也越多。第三、有了上述两部,剩下的就是运算了。先平方,再求和,再开方。主要就是算法的问题了,如果采用高级语言,这一点非常简单,如果采用汇编语言,可以找一找相关的运算子程序库。很多年前原先我就在网上下载过开方的汇编子程序。
该回答来自21ic

1,选择参考电压。
2,确定采样通道。
3,初始化完了就可以采样了。
4,电压范围对应0~10的12次方-1.自己算吧。
求采纳

/**********************************************
*功 能:单通道采样一次,选用内部的参考电压2.5V
*入口参数:channel:选择的采样通道 0~7
*出口参数:采样得到的数字值
***********************************************/
unsigned int sample1(int channel)
{
switch(channel)
{ case 0: P6SEL |= BIT0; break; //A0
case 1: P6SEL |= BIT1; break; //A1
case 2: P6SEL |= BIT2; break;
case 3: P6SEL |= BIT3; break;
case 4: P6SEL |= BIT4; break;
case 5: P6SEL |= BIT5; break;
case 6: P6SEL |= BIT6; break;
case 7: P6SEL |= BIT7; break; //A7
default:P6SEL |= BIT0;
}
ADC12CTL0 = ADC12ON + SHT0_2 +REF2_5V;//2.5V内部参考电压
ADC12CTL1 = SHP; //采样信号来源采样定时器
ADC12MCTL0 =(unsigned char)channel; //VR+=VREF+,VR-=AVss
ADC12CTL0 |= ENC; //使能
ADC12CTL0 |= ADC12SC; //开始采样转换
while((ADC12IFG & BIT0)==0);
return (unsigned int)(ADC12MEM0);
}
/**********************************************
*功 能:单通道采样一次,选用外部参考电压2.5V
*入口参数:channel:选择的采样通道 0~7
*出口参数:采样得到的数字值
***********************************************/
unsigned int sample2(int channel)
{
switch(channel)
{ case 0: P6SEL |= BIT0; break; //A0
case 1: P6SEL |= BIT1; break; //A1
case 2: P6SEL |= BIT2; break;
case 3: P6SEL |= BIT3; break;
case 4: P6SEL |= BIT4; break;
case 5: P6SEL |= BIT5; break;
case 6: P6SEL |= BIT6; break;
case 7: P6SEL |= BIT7; break; //A7
default:P6SEL |= BIT0;
}
ADC12CTL0 = ADC12ON + SHT0_2 +REF2_5V;//2.5V内部参考电压
ADC12CTL1 = SHP; //采样信号来源采样定时器
ADC12MCTL0 =SREF_2+(unsigned char)channel; //Vr+=VeEF+,Vr-=AVss
ADC12CTL0 |= ENC; //使能
ADC12CTL0 |= ADC12SC; //开始采样转换
while((ADC12IFG & BIT0)==0);
return (unsigned int)(ADC12MEM0);
}
#include <msp430x44x.h>
#include "ADC12.c"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P5DIR |= 0x02; // P5.1 output
for (;;)
{
if(sample1(1)<120)
P5OUT &= ~0x02;
else P5OUT |= 0x02;
}
}
// ADC12 interrupt service routine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
if (ADC12MEM0 < 120)
P5OUT &= ~0x02; // Clear P5.1 LED off
else
P5OUT |= 0x02; // Set P5.1 LED on
_BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
这么久了,还请采纳,俺可是付出的啊


单片机指令
单片机指令功能一览表助记符 代码 说明MOV A,Rn E8~EF 寄存器AMOV A,direct E5 dircet 直接字节送AMOV A,@Ri ER~E7 间接RAM送AMOV A,#data 74...MOVX @Ri,A F2~F3 A送外部数据(8位地址)MOVX @DPTR,A F0 A送外部数据(16位地址)PUSH dircet C0 dircet 直接字节进栈,SP加1 POP dircet D0 ...

单片机RAM中,sp的作用是什么
SP 指的是堆栈指针 详细解释如下:堆栈是一种数据结构,和他相类似的有队列。如果对数据结构有这样的要求:先将数据放到该区内,先放的后出后放的先出。这种结构这是堆栈。也就是说堆栈的数据操作口只有一端。它常用到回朔等算法当中,说到数据结构,当然就要提到算法。而队列的操作正好与之相反。先...

单片机上电复位后pc和sp内容
PC和SP内容为0000H和07H1。单片机上电复位后,PC(程序计数器)和SP(堆栈指针)的初始值由芯片设计确定。PC的初始值为0000H,表示程序的执行将从存储器中地址为0000H的位置开始。SP的初始值为07H1,表示堆栈指针指向存储器中地址为07H1的位置,用于存储函数调用和中断处理时的数据。

假设单片机的sp的值为43,执行一条lcall指令后,sp等于,求过程
SP先加1,后存数据到SP指向的地址。所以,执行LCALL 指令后,SP先加1,再把LCALL指令后面的指令的地址保存到堆栈中...

当“SP被赋值后”单片机复位后其值应为多少?
SP值为07H。复位期间不产生ALET和~PSEN信号。复位后PC值为0000H。P0---P3口值为FFH。一、单片机简介:单片机(Microcontrollers)是一种集成电路芯片。单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM。单片机只读存储器ROM、多种I\/O口和中断系统、定时器\/计数器等功能...

单片机中的SP设置问题
如果是51单片机的话上电后SP默认的是07h,寄存器组默认的是第一组就是00h-07h这8个单元,写程序的时候将自定义变量区设定在堆栈深度以外就可以了。一般是将4个寄存器组单元地址预留出来。

假设单片机的sp的值为43,执行一条lcall指令后,sp等于,求过程
SP还是43,LCALL执行时会改变SP,但执行后,SP会返回原值。除非在子程序中PUSH和POP不一致。

单片机知识!!!
10、假定,SP=60H,A=30H,B=70H,执行下列指令:PUSHA PUSHB 后,SP的内容为 62 ,61H单的内容为 30H ,62H单元的内容为 70H 。1、单片机与普通计算机的不同之处在于其将( CPU)、( 存储器 )、I\/O口(串口、并口等) 、ROM(程序存储器)集成于一块芯片上。2...

求单片机大神, 问题(A)为嘛是55H不是56H 。(SP)为什么是50H_百度...
假设程序从DELAY子程序正常返回,也就是接着执行主程序的POP ACC语句。此时SP = 60H。执行的时候会把60H的数据弹出到ACC,并且SP减1。因为前面有 MOV A,#55H MOV R0,#A10 ;A10已经定义为60H。所以R0 = 60H MOV @R0,A ;所以(60H) = 55H 所以执行完POP ACC后,AC...

大神,帮忙做下,急!
(A) 0013H (B) 000BH (C) 0023H (D) 0003H 18. 89C51\/S51单片机的当前工作寄存器组的选择与PSW中的(D )标志位状态有关。(A) CY (B) P (C) OV (D) RS0 RS1 19. 89C51\/S51单片机的奇偶校验位P始终随着(C ) 变化而变化。(A) B (B) DPTR (C) ACC (D) SP 20. 串行口...

昭阳区15562874332: MSP430单片机ADDC12电压采集程序
糜磊西沙: /********************************************** *功 能:单通道采样一次,选用内部的参考电压2.5V *入口参数:channel:选择的采样通道 0~7 *出口参数:采样得到的数字值 ***********************************************/ unsigned int sample1(int channel) ...

昭阳区15562874332: msp430的adc12的参考电压有没有限制,msp430采用的是3.3V的电源,参考电压能不能设置为5V?
糜磊西沙: 430的ADC12参考电压可以外部提供,但是不能超过电源电压.也就是不能用5V.

昭阳区15562874332: msp430做ADC12时,参考电压用3.3V,寄存器是怎样设置的? -
糜磊西沙: #include "msp430x14x.h" //初始化ADC12 P6SEL |= 0x01; // 使能ADC通道,默认的VREF为VCC ADC12CTL0 = ADC12ON+SHT0_5+MSC; // 打开ADC,设置采样时间 /*选择内部参考电压源*/ // ADC12CTL0|= REFON+REF2_5V; // ADC...

昭阳区15562874332: msp430 AD转换最大可转换电压是多少 -
糜磊西沙: AD转换电压最大电压就是参考电压.参考电压可以直接取ACC(可在寄存器中设置,430ACC最大可以3.6V),选择外部参考电压最大理论上也可以到VCC,但最好稍小点.如果用内部参考电压可选1.5V和2.5V两档.

昭阳区15562874332: msp430的AD转换 -
糜磊西沙: 是对应的电压数据.传感器出来的已经是电压了,就是AD前端的模拟信号.你要查一下你用的AD芯片datasheet手册看一下输入AD芯片的模拟信号经过AD后换算成的数字信号是多少,如果是8位AD应该是8位2进制数噢.数码管的话去查一下数码管如何点亮的程序即可.

昭阳区15562874332: 跪求msp430F149中的ADC12外部参考电源的正输入端VEREF+可输入的最大电压是多少 -
糜磊西沙: 最大电压就是VCC,对149来说,那就是3.3V喽,超过3.3V他会认为是最大值的,我试过5V的,芯片没问题,不过前提是加一个10K电阻,不会削减电压的.再高的话,我就没试过了.

昭阳区15562874332: msp430一段有关AD数模转换 参考电压设置的c程序 高手请进 -
糜磊西沙: 对这个就是设置的参考电压为2.5v 如果改成 ADC12CTL0 = ADC12ON+REFON+SHT0_6;//为1.5v参考电压 如果改成 ADC12CTL0 = ADC12ON+SHT0_6; // Setup ADC12, ref., sampling time ADC12CTL1 = SHP; // Use sampling timer ADC12MCTL0 = INCH_10+SREF_0; // 则选择的为以电源电压为基准 有时内部的基准会不是很准 在精确采集的时候 一定要用万用表测一下参考电压的值 用测的值计算 2.5v只是理论上的值

昭阳区15562874332: msp430输出电压怎么设定? -
糜磊西沙: P1DIR 是方向寄存器 控制输出高低电平的是P1OUT默认上电复位后 P1OUT、P1DIR 为全零.P1DIR |= 0x01;等于把p1.0置位输出.而这时控制输出高低电平的寄存器P1OUT 为全零.所以你看到的360mV是低电平输出 360mV也算正常.给你一个P1.0输出高低电平的例子 低电平:P1DIR |= 0x01;P1OUT &= ~0x01; 高电平:P1DIR |= 0x01;P1OUT |= 0x01;当然如果有与其他功能复用的IO,要保证P1SEL寄存器为零.

昭阳区15562874332: 有关msp430的A/D转换中参考电压源选择位的疑问,请大家... -
糜磊西沙: 这位道友看来没弄懂AD转换的原理啊...建议把书还是仔细看看. 选择1就是 选择2.5V为参考电压源 2.5V对应的值就是0x0fff. 0x0fff,是最大值. 0x000,也就是最小值.我们以电压值为纵坐标,0x0ff这些值为横坐标,就可以画一条斜线,这就是AD转换的特性曲线,每个不同的值就对应着不同的转换电压值....

昭阳区15562874332: msp430 AD转换的原理? -
糜磊西沙: msp430单片机的模数转换模块--ADC12 ADC12模块中由以下部分组成:输入的16路模拟开关,ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成.ADC12的模块内核...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网