SerialPort& CCS字符串通信

时间:2014-07-21 19:11:16

标签: c# file-transfer

我正在尝试通过C#发送/接收字符串,在C#中我只是这样做:

SerialPort.WriteLine("A6");

但是在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];
    }
}
在C#中

 listBox2.Items.Add(SerialPort.ReadExisting());

我得到无意义的文字,如:?? A ???有时候:???? 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)! 谁能告诉我为什么会这样?

2 个答案:

答案 0 :(得分:1)

我刚刚中立了Parity位,现在一切正常,谢谢大家!

答案 1 :(得分:0)

这表示您不应该等待RX ISR内的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();
}