Sending a voltage to RS232

2019-02-19 07:20发布

问题:

I know that we can use pin no.3 to send the data as a output in RS232. But I am just wondering that there is another way to send only the voltage 5v to the RS232 in a short period? I just want that 5v to trigger a PIC Microcontroller to do something.

Thank you in advance.

回答1:

You could use the DTREnable (Data Terminal Ready) property of the SerialPort class to apply a positive voltage to those respective pins. This could be used to signal an MCU.

Something along the lines of...

serialPort.DtrEnable = true; //High
currentThread.Sleep(1000);
serialPort.DtrEnable = false; //Low
currentThread.Sleep(1000);

However! the voltage is likely to be incompatible as RS232 operates -25 to 25 volts for 1/0's. You will likely need an inline driver/receiver such as a MAX232 chip to operate between the MCU and computer, or dependant on your skill level you could build a receiver circuit.



回答2:

you can use RTS or DTR as long as you aren't using them on the PIC side for flow control



回答3:

PIC Microcontroller with TTL interface used logic as follows:
Logic 1 == 5 volt.
Logic 0 == 0 volt.

Computer with RS232 interface used logic as follows:
Logic 1 == -3 volt until -25 volt.
Logic 0 == 0 until 25 volt.

For connecting device TTL logic to RS232 logic can used MAX232 IC. MAX232 will translate your TTL logic to RS232 Logic.

Another options - cheaper and simple, used TRANSISTOR for convert TTL logic to RS232 logic vice versa, look at http://www.kmitl.ac.th/~kswichit/ap275/ap275.htm for details.

If need send data without hardware handshaking, only need pin 2 (RX), pin 3(TX), pin 5(GND). If need handshaking, add pin 7(RTS) AND pin 8(CTS).
Transmitte data as follows:

serialPort1.Open();
serialPort1.Write("your data in here");

Receive data as dollows:

public Form1()
{
    InitializeComponent();
    this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    serialPort1.Open();
}

void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    int i = 0;
    string[] DataReceived; 

    while (serialPort1.BytesToRead > 0) 
    {
        DataReceived[i] = Convert.ToByte(serialPort1.ReadByte()); // data already in here
        i++;         

        if (i == int.MaxValue-1)
          i = 0;            
    }
    // Parsing your data in here
}

If just need toggle output, used pin 4 (DTR) OR pint 7(RTS).
serialPort1.DtrEnable = true;ORserialPort1.RtsEnable = true;