zoukankan      html  css  js  c++  java
  • C#串口编程测试收发

    原文:http://www.cnblogs.com/vsdot/archive/2013/04/23/3263348.html

     
    基本传递方法:RS232传输要有1位起始位,8位数据位、1位校验位(可选)、1位停止位,也就是说传一个字节要用时11位的时间.
     
    举例:6个字节要6*11=66位时间。每位1/9600秒,共用66/9600=0.006875秒。

    虚拟串口软件

    当我们没有设备时我们可以用虚拟串口软件来模拟串口操作。下面我来介绍一款软件VSPD虚拟串口软件。大家可以去天空软件站下载。

    下载来安装成功后如下图所示: clip_image002 然后你就点击添加端口,我上图中的COM2和COM3就是VSPD添加的,这个时候你把COM2和Com3看做是一个真实的串口,然后用两个软件连接,就相当于一个串口了(我们可以用一个收,一个发:比如你的程序在接收com2,那么你用串口测试软件连接com1发送,不能连接com2,会失败的,因为这是虚拟的;串口测试软件中要发送的数据是16进制的,以空格为分界不管有几个空格,如果要发空格要发0A,注意不区分大小写),我用一个串口测试器和我们自己编写的软件进行测试:如下图所示,我们的串口测试器(网上搜下载简便串口测试)已经连接到COM3上了, clip_image004

    监听串口程序

    直接上代码,在控制台程序中添加如下源码就可以直接运行了:

    using System;

    using System.IO.Ports;

    using System.Text;

    namespace PortDataReceived

    {

        class PortDataReceived

        {

            public static void Main()

            {

                SerialPort mySerialPort = new SerialPort("COM2");

                mySerialPort.BaudRate = 9600;

                mySerialPort.Parity = Parity.None;

                mySerialPort.StopBits = StopBits.One;

                mySerialPort.DataBits = 8;

                mySerialPort.Handshake = Handshake.None;

                mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

                mySerialPort.Open();

                Console.WriteLine("Press any key to continue...");

                Console.WriteLine();

                Console.ReadKey();

                mySerialPort.Close();

            }

            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)

            {

                SerialPort sp = (SerialPort)sender;

                string indata = sp.ReadExisting();

                Console.WriteLine("Data Received:");

                Console.Write(StrToHex(indata));

            }

            public static string StrToHex(string mStr) //返回处理后的十六进制字符串

            {

                return BitConverter.ToString(ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");

            }

        }

    }

       

    clip_image006运行结果如下图: 数据完全正确,发出的数据和接受的数据都一样,而且此时VSDM的界面有简单变化: clip_image008 总结:本文写了一个用虚拟串口软件编写的C#串口编程实例。希望对大家有帮助。

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.IO.Ports;

    namespace 串口收发测试

    {

    class Program

    {

    static void Main(string[] args)

    {

    SerialPort mySerialPort = new SerialPort("COM2");

    mySerialPort.BaudRate = 9600;

    mySerialPort.Parity = Parity.None;

    mySerialPort.StopBits = StopBits.One;

    mySerialPort.DataBits = 8;

    mySerialPort.Handshake = Handshake.None;

    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

    mySerialPort.Open();

    //mySerialPort.WriteLine("A"); //这是发送,com1收到41 0A

    mySerialPort.Write("A"); //这是发送,com1收到41

    Console.WriteLine("串口COM2已打开,按任意键关闭程序... ...");

    Console.WriteLine();

    Console.ReadKey();

    mySerialPort.Close();

    }

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)

    {

    SerialPort sp = (SerialPort)sender;

    string indata = sp.ReadExisting();

    Console.WriteLine("Data Received 1:"+indata);

    Console.WriteLine("Data Received 2:" + StrToHex(indata));

    }

    public static string StrToHex(string mStr) //返回处理后的十六进制字符串

    {

    //先专为10进制,在专为16进制

    return BitConverter.ToString(ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " "); //

    }

    }

    }

  • 相关阅读:
    CSS中的外边距合并问题
    Web性能优化的途径
    HTML5读书笔记——canvas元素(续)
    HTML5读书笔记——canvas元素
    2016/9/8日志
    【每日一醒】【架构师之路】设计文档之惑
    华为是个好公司,但不全是好员工——记初次压力面试的体验
    忐忑的一天,心里还是小兴奋的
    atexit()函数
    年终心结,心绪的总结!
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/3561546.html
Copyright © 2011-2022 走看看