4414|6

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

#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
static unsigned int index = 0;
static unsigned long int cnt = 0;
/*************************************************************************/
void init_timerA()
{
TACTL=SSEL0+TACLR;
TACCTL0=CCIE;
TACCR0=32768;

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

#pragma vector=ADC_VECTOR
__interrupt void adc()
{ ADC12IFG=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
cnt++;
ADC12CTL0 &=~ ENC;(后来加入的)
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TIMERA0()
{ADC12IE = 0;
ADC12CTL0 &=~ ENC;

TACTL=0;

}
刚开始我想测量1秒钟ad转换的次数;用timerA定时一秒中断后停止ad转换;
但发现cnt变量一直在增加
后来我在AD中断中断停止AD,的确转换了一次,这就怪了,为什么一秒到后
cnt还不停止?

最新回复

这是指序列通道多次转换  详情 回复 发表于 2006-9-29 17:27
 
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的程序具体我没有看,说一点你注意一下是不是这个问题:序列通道多次采样,比如你要才16次,但第15次你就要将ENC复位。因为你第十六次进中断再复位的话,第十七次已经开始采样了,会多采一次。
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
好像是我的TIMERA坏了
用TIMERB就解决问题了
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用:

你的程序具体我没有看,说一点你注意一下是不是这个问题:序列通道多次采样,比如你要才16次,但第15次你就要将ENC复位。因为你第十六次进中断再复位的话,第十七次已经开始采样了,会多采一次。
但是如果中断执行完AD还没有转换结束,那么第16次的值就不能获得了
是否是这样的?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
停止的条件的ENC↓并且EOS=1;
十五次的时候拉低,只满足一个条件,16次会正常采样,到了16次完成两个条件都满足就退出了。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
你的意思是说 如果AD正在转换时,ENC为0并不能使AD停止,当本次转换完毕后才停止
 
 
 

回复

83

帖子

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
快速回复 返回顶部 返回列表