串口调试过程中,在接收函数中设置断点,通过串口调试助手发送但直接响应断点,发送多个字节,只有最后一个字节响应断点,这是什么问题?中断响应不是一帧有多少个字节就响应多少次中断吗?还是我设置的问题。程序的设置如下:
时间设置为内部DCO 8M:
WDTCTL = WDTPW + WDTHOLD; //关闭看门口
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
BCSCTL2 |= SELM_2 + SELS; //MCLK = SMCLK = XT2
串口0初始化:
void initTR0(void) //串口A0为232接口,读取测距机数据
{
P3SEL |= 0xF0; // P3.4,5 = USART0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; //串口时钟选择SMCLK
UCA0BR0 = 0xA0; //8M/19200 417 ,地位
UCA0BR1 = 0x01; //高位
UCA0MCTL = UCBRS0; //修正值
UCA0CTL1 &= ~UCSWRST; //Initialize USART state machine
UC0IE |= UCA0RXIE; //开启串口0接收中断
}
串口接收中断响应:
#pragma vector=USCIAB0RX_VECTOR
__interrupt void usart0_rx (void)
{
//while(!(IFG2 & UCA0TXIFG)); //USCI_A0 发送寄存器准备好了?
//UCA0TXBUF = UCA0RXBUF; // 发送寄存器将接收的数据发送出去
if(Flag == 0)
{
if(UCA0RXBUF == 0x44) //判断是帧头读取数据
{
laserData[0] = UCA0RXBUF;
Flag = 1;
m = 1;
}
}
else
{
laserData[m] = UCA0RXBUF;
m++;
if(12 == m)
{
Flag = 0;
m = 0;
}
}
}
在主程序中开总中断:
_EINT(); //开总中断