在一段程序里面增加串口采样对外部设备进行控制,无法进入串口中断,经过测试,在屏蔽ADC采样端口设置语句之后,可以进入中断。
采样端口语句 : ADC10AE0 |= 0x03;
是否ADC采样和串口中断有冲突?该如何解决
另外两个中断函数,不知是否影响。
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
j = UCA0RXBUF; // TX -> RXed character
if(j=='a')
{ P2OUT|=BIT3;
while((IFG2&UCA0TXIFG)==0); //查询发送是否结束
{IFG2&=~UCA0TXIFG; //清除发送一标志位
UCA0TXBUF = 'a';
}
}
if(j=='b')
{ P2OUT&=~BIT3;
while((IFG2&UCA0TXIFG)==0); //查询发送是否结束
{IFG2&=~UCA0TXIFG; //清除发送一标志位
UCA0TXBUF = 'b';
}
}
}
灰小子:
两个中断有可能相互影响的,尤其是在中断服务程序执行时间比较长的时候。
看你的USCIAB0RX_VECTOR,里面有多个while,执行时间就会比较长
HG:
先进一步判断一下:
1. 在进入中断ISR的时候把中断标志位清除。
2. 把串口中if (j = xx) 的两个判断语句先去掉。