我试图通过C#发送/接收一个字符串,在C#中我只需要:
SerialPort.WriteLine("A6");但是在CCS中,如果我尝试在char之后发送一个字符串字符,它根本不起作用,无论是ReadLine还是ReadExisting!这就是我尝试创建数组的方法,因此每次输入RXBUFF实用程序时,我们都会将接收到的字符添加到数组中,直到数组满为止(我随机地将数组大小定义为2,这意味着我们处理2- char长度字符串),最后通过在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];
}
}在C#中:
listBox2.Items.Add(SerialPort.ReadExisting());我收到无意义的短信,比如:?a?有时:?等等,但有:
listBox2.Items.Add(SerialPort.ReadLine());当我第一次按下发送"A6“的发送按钮时,我什么也得不到,第二次我也没有感觉到,就像ReadExisting行为一样。
顺便说一下,即使我试图以最简单的方式发送字符串(没有数组和条件),我的意思是这样:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
UCA1TXBUF='A';
while(!(UCA1IFG & UCTXIFG)); // until UCTXBUF1 is empty
UCA1TXBUF='6';我还会在列表框中得到不一致的条目。
然而,如果我这样做:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
UCA1TXBUF=UCA1RXBUF;我确实在列表框中得到了"A6“,一切都很好(使用ReadLine 和 ReadExisting)!有人能告诉我为什么会这样吗?
发布于 2014-07-22 03:09:25
我刚刚中和了奇偶校验位,现在一切正常,谢谢大家!
发布于 2014-07-22 00:31:31
这表明您不应该在RX中等待TX标志。RX中断例程应该简单地填充FIFO缓冲区(字节队列),以便您可以在其他地方解析它的内容(主例程?),然后在需要时创建响应。
RX ISR的伪代码应该如下所示:
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
FIFO_Enqueue(&RxBuffer, UCA1RXBUF);在main()循环的某个地方,您可以解析它的内容:
while (1)
{
// find the first occurrence of "A6" and dequeue it
if (FIFO_StartsWith(&RxBuffer, "A6")
SendResponse();
}https://stackoverflow.com/questions/24872835
复制相似问题