楼主,可能是你断点下的有问题,把断点直接下在中断程序里面,单片机接收到第一字节的数据后就停到断点处,当你单步运行下去的时候单片机已经接收到了最后一字节,是故 你只是看到最后一字节数据,一般说来,我都会再进入中断的时候 加上中断禁止 __disable_interrupt(),出来的时候再打开中断__enable_interrupt(); 这个样子你再试试看是不是接收到第一字节,
另外,写串口程序的时候,可以再加一个定时器程序,来判断串口通信结束,这样子方便些,以前写过一个485的,完全一样,你可以参考一下
/*********** rs485 接收中断 ***********/
#pragma vector=USART0RX_VECTOR
__interrupt void RS485_rx(void)
{
__disable_interrupt();
TACTL_bit.TAMC = 0;//stop timerA
// temp_data[frmindex++] = RXBUF0;
rs485_rxdata[rs485rxdata_len++] = RXBUF0;
TAR = 1; //定时器A计数器置1
TACTL_bit.TAMC = 1;//start timerA, up mode
__enable_interrupt();
}
/******* rs485 接收完成判定 ******/
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer(void)
{
__disable_interrupt();
//unsigned char i;
if (TACTL_bit.TAIFG == 1)
{
TACTL_bit.TAIFG = 0;//clear interrupt flag
TACTL_bit.TAMC = 0;//stop timer
// rs485rxdata_index = frmindex ;//rs485 接收数据长度
// for(i=0; i
{
// rs485_rxdata = temp_data;
}
rs485_valid = 1;
frmindex = 0;
}
__enable_interrupt();
} |