c# 串口的读写

来源:互联网 发布:python 程序 编辑:程序博客网 时间:2024/05/01 05:44

做项目正好做到了这部分,查了很多相关的资料,终于成功了,这次利用到串口主要是因为gprs模块,发现串口也分2线和四线的2线的不支持全双工,四线的才支持,所以做之前要先把硬件是否支持弄清楚。

串口的读写分为两种形式:多线程,和单线程。

多线程需要自己起一个线程运行监听串口的功能,单线程可以使用c#自带的DataReceived。

首先,c#中有using System.IO.Ports;库里面有个专门提供给串口的类SerialPort,这个类介绍:




代码使用实例;


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;




namespace chuankou
{
    public partial class Form1 : Form
    {
        SerialPort _serialPort = null;
        SerialPort spSend = null;
        public Form1()
        {
            InitializeComponent();
            _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
        }


        void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(DoUpdate));


        }


        private void DoUpdate(object s, EventArgs e)
        {
            this.textBox2.Text += _serialPort.ReadExisting();
        }
        private void DoUpdate1(object s, EventArgs e)
        {
            this.textBox4.Text += spSend.ReadExisting();
        }


        private void btnStart_Click(object sender, EventArgs e)
        {
            //_serialPort = new SerialPort();com1


            //_serialPort.Handshake = Handshake.RequestToSendXOnXOff;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
            _serialPort.Open();


            //this.btnStart.Enabled = false;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //spSend = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
            //spSend.Open();
            byte[] f = new byte[200];
            byte[] bytes = Encoding.UTF8.GetBytes(textBox1.Text);
            //_serialPort.Write(bytes,0,textBox1.Text.Length);
            _serialPort.Write(textBox1.Text);
            //spSend.Close();
            int i = 0;
        }


        private void button3_Click(object sender, EventArgs e)
        {
            //spSend = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            //spSend.Open();
            spSend.Write(textBox3.Text);
            //spSend.Close();
        }


        private void button4_Click(object sender, EventArgs e)
        {
            spSend = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            //spSend.Open();
            spSend.DataReceived += new SerialDataReceivedEventHandler(spSend_DataReceived);
            spSend.Open();
        }


        void spSend_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(DoUpdate1));
        }
    }
}


界面:


左边两个是发送,右边两个是接收,使用了串口模拟工具进行了模拟:Configure Virtual Serial Port Driver(虚拟串口驱动)


结果成功完成了全双工的串口通讯。

源代码下载http://download.csdn.net/detail/bjut_yue/5347388

原创粉丝点击