我正在尝试通过C#发送/接收字符串,在C#中我只是这样做:
SerialPort.WriteLine("A6");
Run Code Online (Sandbox Code Playgroud)
但是在CCS中,如果我尝试在char之后发送字符串char它根本不起作用,无论是ReadLine还是ReadExisting!这是我尝试创建一个数组,所以每次我们输入RXBUFF编译指示时,我们将接收到的字符添加到数组,直到数组已满(我随机定义数组大小为2,这意味着我们处理2 -char-length strings),最后通过在char之后发送char来发送字符串:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
if(__even_in_range(UCA1IV,18) == 0x02){ // Vector 2 - RXIFG
if(counter==0)
{
Data[0]=UCA1RXBUF;
counter++;
}
else
{
Data[1]=UCA1RXBUF;
counter=0;
UCA1TXBUF=Data[0];
while(!(UCA1IFG & UCTXIFG)); // until UCTXBUF1 is empty
UCA1TXBUF=Data[1];
}
}
Run Code Online (Sandbox Code Playgroud)
在C#中:
listBox2.Items.Add(SerialPort.ReadExisting());
Run Code Online (Sandbox Code Playgroud)
我得到无意义的文字,如:?? A ??? 有时候:???? A?等..但是:
listBox2.Items.Add(SerialPort.ReadLine());
Run Code Online (Sandbox Code Playgroud)
在我第一次按发送按钮发送"A6"时,我什么都没得到,第二次我感觉不合理,就像ReadExisting行为一样.
顺便说一句,即使我尝试以最简单的方式发送字符串(没有数组和条件),我的意思是这样的:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
UCA1TXBUF='A';
while(!(UCA1IFG & UCTXIFG)); // until UCTXBUF1 is empty
UCA1TXBUF='6';
Run Code Online (Sandbox Code Playgroud)
我也在列表框中得到不一致的项目.
但是,如果我这样做:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
UCA1TXBUF=UCA1RXBUF;
Run Code Online (Sandbox Code Playgroud)
我在列表框中得到"A6",一切正常(使用ReadLine 和 ReadExisting)!谁能告诉我为什么会这样?