rtsenable不能按预期工作

时间:2012-09-05 16:19:46

标签: c# serial-port

我编写了一个简单的winform应用程序来读取从微控制器接收到RS232 DE9串行端口的数据。我需要控制何时应该发送数据,因此我控制RtsEnable属性。程序结构与此类似。

byte[] data = new byte[serialPort1.BytesToRead];
serialport1.RtsEnable = true;

private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
    serialPort1.Read(data, 0, data.Length);
    serialport1.RtsEnable = false;
    this.Invoke(new EventHandler(ProcessData));
    serialport1.RtsEnable = true;
}

现在,问题很简单。当RtsEnable首先设置为true时,它实际上不设置为true。当我调试时,它显示为RtsEnable = true。但是当我检查电路中的电压时,RT仍然不高。

我不认为我的电路有问题,因为我手动检查了serail端口的电压输出。所以,我认为它必须与我的代码相关。

知道为什么会这样吗? 提前致谢

1 个答案:

答案 0 :(得分:-1)

RtsEnable不设置RTS,只允许设置它。 要设置(拉低)RTS(以及类似的DTR),您需要将握手设置为XonXoff。

示例:

   private void btnReset_Click(object sender, EventArgs e)
    {
        comm.MycomPort.RtsEnable = true;
        comm.MycomPort.Handshake = System.IO.Ports.Handshake.XOnXOff;
        comm.MycomPort.RtsEnable = false;
    }

这将暂时拉低RTS(如果使用MycomPort.DtrEnable,则为DTR) 它将保持低电平直到禁用,因此您可以添加一个计时器以保持低电平持续时间。

相关问题