最近写了一个程序,用了两个中断:
#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; // 使能转换
}
希望我描述的够清楚了,更希望又高人帮忙解决。鞠躬!!!
补充一下:即使在主程序里不作任何判断,就是让它显示各数也不行了!!!
单片机是f149 |