msp430 f149中断问题

最近写了一个程序,用了两个中断:#pragmavector=TIMERA0_VECTOR__interruptvoidTimerA(void)和#pragmavector... 最近写了一个程序,用了两个中断:
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
定时器A进入中断修改产生的PWM德占空比,频率大约30K,
ADC进行电压采样,这是代码
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
_EINT();
_BIS_SR(LPM0_bits + GIE);
if(index0< Num_of_Results)
results0[index0++] = ADC12MEM0; // Move results
if(index0< Num_of_Results)
results1[index1++] = ADC12MEM1; // Move results
}
我在主程序里执行操作,当index0==Num_of_Results(32)时,把采样数据显示出来。
现在如果屏蔽掉其中任一个中断,则另一个中断能正常工作。但是,两个都打开的话,两个就都不行了。主程序里不再显示,定时器A也不会改占空比了。
ADC的初始化如下
void ADC12Init( void )
{
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_3; // 选择存储器地址,使用采样定时器
ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = INCH_1 +EOS; // 表示序列的最后一个端口 // ref+=AVcc, channel = A1
P6SEL |= BIT0; //使能ADC通道
P6SEL |= BIT1; //使能ADC通道

P6DIR |= BIT0;
P6DIR |= BIT1;
P6OUT |= BIT0;
P6OUT |= BIT1;

ADC12IE = 0x03; // 使能ADC中断,p6.1,.2端口转换完成后进入中断
ADC12CTL0 |= ENC; // 使能转换
}
希望我描述的够清楚了,更希望又高人帮忙解决。鞠躬!!!
补充一下:即使在主程序里不作任何判断,就是让它显示各数也不行了!!!
展开
 我来答
liangsai
2013-09-02 · TA获得超过835个赞
知道小有建树答主
回答量:1508
采纳率:0%
帮助的人:642万
展开全部
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
_EINT();
_BIS_SR(LPM0_bits + GIE);
上面这两句最好在main里面 估计程序停这里不走了
SHT0_8小了会不精确SHT0_12也可以
ad没必要中断吧?中断多了就卡了;
更多追问追答
追问
不用ADC中断,显示部分怎么搞?中断主要是弄一个32次取样求平均值的功能。
如果我开了ADC中断,它什么时候会自己退出来?
追答
for循环采集32次即可
ADC12CTL0 |=ENC;
ADC12CTL0 |= ADC12SC;
for(Cnt_ADC12=0;Cnt_ADC12<MAX_SAMPLE_TIMES;Cnt_ADC12++)
{ // Start conversion

while ((ADC12IFG &BIT0)==0);
results = ADC12MEM0 ; //存结果,清除IFG

Sum_results += results;

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式