我试图通过 C # 发送 / 接收一个字符串,在 C # 中我只是做:
SerialPort.WriteLine("A6");
但在 CCS 中,如果我尝试在 char 之后发送一个字符串 char,它根本不起作用,无论是 ReadLine 还是 ReadExisting!这是我尝试创建一个数组,所以每次我们进入 RXBUFF pragma,我们将接收到的 char 添加到数组中,直到数组已满(我随机定义数组大小为 2,这意味着我们处理 2-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)!
我刚刚中和了奇偶校验位,现在一切正常,谢谢大家!
这表明您不应该等待 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();
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(14条)