4119|6

92

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】149的AD [复制链接]

求助一段149的测量(××cc-××ss)/2的一段程序
12位时FFF是否对应着参考电压值?
我用mem0测得值还是比较准的

用mem2 根本没有反应
请高手指点迷津
程序如下
void adc_ini()
{
ADC12CTL0 &=~ENC;
ADC12CTL0=REFON+REF2_5V+SHT0_15+SHT1_15;

ADC12CTL1=CSTARTADD_0+SHP;
ADC12MCTL0=INCH_11+EOS+SREF_1;
ADC12CTL0|=ADC12ON;
ADC12CTL0|=ENC;
}
main()
{ while(1)
{
int i,result;
adc_ini();
ADC12CTL0|=ADC12SC;
for (i=0;i<1000000;i++);
ADC12CTL0 &=~ENC;
result=ADC12MEM0;

}
}
为什么说result为无效变量 不能获得数值

最新回复

那个最后一句怎么理解啊~  详情 回复 发表于 2011-7-31 10:23
 
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#include "msp430x44x.h" // Standard Equations

#define Num_of_Results 8

static unsigned int A0results[Num_of_Results]; // These need to be global in
static unsigned int A1results[Num_of_Results]; // this example. Otherwise, the
static unsigned int A2results[Num_of_Results]; // compiler removes them because
static unsigned int A3results[Num_of_Results]; // they are not used

void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
P6SEL = 0x0F; // Ena××e A/D channel inputs
ADC12CTL0 = ADC12ON+MSC+SHT0_8; // Turn on ADC12, extend sampling time
// to ××oid overflow of results
ADC12CTL1 = SHP+CONSEQ_3; // Use sampling timer, repeated sequence
ADC12MCTL0 = INCH_0; // ref+=××cc, channel = A0
ADC12MCTL1 = INCH_1; // ref+=××cc, channel = A1
ADC12MCTL2 = INCH_2; // ref+=××cc, channel = A2
ADC12MCTL3 = INCH_3+EOS; // ref+=××cc, channel = A3, end seq.
ADC12IE = 0x08; // Ena××e ADC12IFG.3
ADC12CTL0 |= ENC; // Ena××e conversions
_EINT(); // Ena××e interrupts
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits); // Enter and stay in LPM0
}

interrupt[ADC_VECTOR] void ADC12ISR (void)
{
static unsigned int index = 0;

A0results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
A1results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
A2results[index] = ADC12MEM2; // Move A2 results, IFG is cleared
A3results[index] = ADC12MEM3; // Move A3 results, IFG is cleared
index = (index+1)%Num_of_Results; // Increment results index, modulo
}
给你个例程吧
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

关于ADC

[quote=lsdfae18]

#include "msp430x44x.h" // Standard Equations

#define Num_of_Results 8

static unsigned int A0results[Num_of_Results]; // These need to be global in
static unsigned int A1results[Num_of_Results]; // this example. Otherwise, the
static unsigned int A2results[Num_of_Results]; // compiler removes them because
static unsigned int A3results[Num_of_Results]; // they are not used

void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
P6SEL = 0x0F; // Ena××e A/D channel inputs
ADC12CTL0 = ADC12ON+MSC+SHT0_8; // Turn on ADC12, extend sampling time
// to ××oid overflow of results
ADC12CTL1 = SHP+CONSEQ_3; // Use sampling timer, repeated sequence
ADC12MCTL0 = INCH_0; // ref+=××cc, channel = A0
ADC12MCTL1 = INCH_1; // ref+=××cc, channel = A1
ADC12MCTL2 = INCH_2; // ref+=××cc, channel = A2
ADC12MCTL3 = INCH_3+EOS; // ref+=××cc, channel = A3, end seq.
ADC12IE = 0x08; // Ena××e ADC12IFG.3
ADC12CTL0 |= ENC; // Ena××e conversions
_EINT(); // Ena××e interrupts
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits); // Enter and stay in LPM0
}

interrupt[ADC_VECTOR] void ADC12ISR (void)
{
static unsigned int index = 0;

A0results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
A1results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
A2results[index] = ADC12MEM2; // Move A2 results, IFG is cleared
A3results[index] = ADC12MEM3; // Move A3 results, IFG is cleared
index = (index+1)%Num_of_Results; // Increment results index, modulo
}


版主,你给的这个例程看起来真舒服,不过,有几个地方,我不大理解:
A0results[index] = ADC12MEM0; 这个不仅仅完成了赋值的过程吗,怎么会给相应标志位IFG清零了呢?
ADC12MCTL0 = INCH_0; 这个不仅仅完成通道选择吗,怎么ref+=××cc,是否ADC12MCTLx寄存器默认值就为0x0000h?那么其他的寄存器呢?包括I/O口,其初始值,也就是默认值为什么呢,我找了好久,都没有找到汇总资料,希望版主能够提供,Tks!
还有,我看了很多程序,ISR中都有低功耗唤醒语句,如:LMP4_EXIT语句。这里好像没有看到?

Thanks! & BestRegards!!谢谢版主。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
标志位IFG没有清零啊
不知道是否影响AD转换啊
请高人指点
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
ADC12MEMX被访问过就会清出标志位.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

6
 
"A0results[index] = ADC12MEM0; 这个不仅仅完成了赋值的过程吗,怎么会给相应标志位IFG清零了呢?"访问ADC12MEMx后会自动清零的。
“ADC12MCTLx”默认值是POR复位。
所有寄存器的初始状态在USER GUIDE中的每个模块寄存器部分都有。无初始状态的:例如BASIC TIMER的都会单独在NOTE中写明
“LMP4_EXIT语句”是退出低功耗,但AD转换不需要CPU干预,这个程序没有做其他事情所以没有唤醒的语句。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

7
 
那个最后一句怎么理解啊~
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表