4547|6

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】请教定时器串口中断问题!急! [复制链接]

各位好:此问题已困扰很久,我用的是449的片子,要用定时器A产生200Hz的采样频率,定时器时钟才用SMCLK,为1M,下面是所有程序:
#include <msp430x44x.h>
void init_TimerA(void);
void init_ADC12(void);
char adc_Flag = 0;
int newValue;
void main(void)
{
int datasign1=0, data_x1[500];
WDTCTL = WDTHOLD + WDTPW; //停止看门狗
_DINT(); //关闭中断
init_TimerA();
init_ADC12(); //初始化ADC12
_EINT(); //使能中断
while(1)
{
if(adc_Flag ==1)
{
adc_Flag = 0;
data_x1[datasign1]=newValue;
datasign1++;
}
}
}

void init_ADC12(void)
{
P6SEL |= 0x01; // Ena××e A/D channel A0
ADC12CTL0 &= ~(ENC); //设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL0 = ADC12ON+MSC; // Turn on ADC12, set sampling time
ADC12CTL1 = SHP+CONSEQ_2+ADC12SSEL_1; // Use sampling timer, set mode,ADC12时钟源为MCLK.
ADC12IE = 0x01; // Ena××e ADC12IFG.0
ADC12MCTL0|=INCH_0+SREF_0;
ADC12CTL0 |= ENC; // Ena××e conversions


}

void init_TimerA(void)
{
FLL_CTL0 |= XCAP14PF; // Configure load caps
TACTL = TASSEL1 + TACLR; // SMCLK, clear TAR
CCTL0 = CCIE; // CCR0 interrupt ena××ed
CCR0 = 5000;
TACTL |= MC0; // Start Timer_a in upmode
}


#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
ADC12CTL0 &=~ENC;
newValue = ADC12MEM0;
adc_Flag = 1; //指示有数据要显示
ADC12CTL0 |= ENC+ADC12SC;

}


问题是,程序进入到了中断程序后就跳不出来了,所以无法往下进行
请问各位问题会出在哪呢?谢谢!!!

最新回复

你把你的ADCIE这句屏蔽掉,应该可以执行下句,你的中断产生生不是TA中断,并且CCR0中断是自动清除的,产生中断的是ADC中断,应为你的配置ADC是多次采样单通道,并且把MSN打开,那么第一次J进入中断后将ADCSC打开ADC开始转换,完毕后自动又开始采样转换,反复,也就是说,在下一个TA中断来前其实ADC是一直反复采样转换也就是反复进入中断拉.根据你的意图,我建议你在ADC里面配置为单通道单次转换,并且触发源可以直接选择用TA不需要再ADCSC  详情 回复 发表于 2008-12-20 00:18
 
点赞 关注

回复
举报

117

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
请教了
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
怎么没人理啊?55555555555555
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
ADC12CTL1 = SHP+CONSEQ_2+ADC12SSEL_2;这个才是选的MCLK,你在试试,别的看不出问题
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
中断程序中加一句
CCTL0&=~CCIFG;
试试。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
AD12定时采样一般每必要这么处理。ADC12内有脉冲采样模式,你看下用户手册,看懂了脉冲采样你就不会这么写了。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
你把你的ADCIE这句屏蔽掉,应该可以执行下句,你的中断产生生不是TA中断,并且CCR0中断是自动清除的,产生中断的是ADC中断,应为你的配置ADC是多次采样单通道,并且把MSN打开,那么第一次J进入中断后将ADCSC打开ADC开始转换,完毕后自动又开始采样转换,反复,也就是说,在下一个TA中断来前其实ADC是一直反复采样转换也就是反复进入中断拉.根据你的意图,我建议你在ADC里面配置为单通道单次转换,并且触发源可以直接选择用TA不需要再ADCSC
 
 
 

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

随便看看
查找数据手册?

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