原文: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虚拟串口软件。大家可以去天空软件站下载。

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

监听串口程序

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

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("-", " ");

        }

    }

}

   

运行结果如下图: 数据完全正确,发出的数据和接受的数据都一样,而且此时VSDM的界面有简单变化: 总结:本文写了一个用虚拟串口软件编写的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("-", " "); //

}

}

}

C#串口编程测试收发的更多相关文章

  1. 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案

    城市经纬度 json https://www.cnblogs.com/innershare/p/10723968.html 理解SignalR ASP .NET SignalR 是一个ASP .NET ...

  2. storysnail的Linux串口编程笔记

    storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...

  3. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...

  4. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

  5. PB串口编程资料(转)

    ----MSCOMM32参数基本介绍2008年03月29日 星期六 上午 11:37MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能.MSComm控件在串口编程时非常方便,程序 ...

  6. Linux串口编程详解(转)

    串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...

  7. 转:C#串口编程

    本文用来简单介绍一下C#串口编程的知识,主要以实例为内容. 凡是串口设备和计算机交互的时候都用到串口,在C#中我们如何来操作串口呢? 大话串口工作原理 实际串口是用来和外部设备进行交换数据的,我抽象出 ...

  8. 多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)

    老有人觉得MSComm通讯控件很土,更有人大声疾呼:忘了它吧.确实当我们对串口编程有了一定的了解后,应该用API函数写一个属于自己的串口程序,由于编程者对程序了解,对程序修改自如.但我一直没有停止过用 ...

  9. linux串口编程参数配置详解(转)

    1.linux串口编程需要的头文件 #include <stdio.h>         //标准输入输出定义#include <stdlib.h>        //标准函数 ...

随机推荐

  1. UVA-11925 Generating Permutations (逆向思维)

    题目大意:给出1~n的某个排列,问由升序变到这个排列最少需要几次操作.操作1:将头两个数交换:操作2:将头一个数移动最后一个位置. 题目分析:反过来考虑,将这个排列变为升序排列,那么这个变化过程实际上 ...

  2. MyBatise代码自动生成时候Oralce的number类型BigDecimal问题

    使用MyBatise的代码自动生成工具时候,即便在配置文件中定义了 <javaTypeResolver> <property name="forceBigDecimals& ...

  3. https ddos检测——研究现状

    from: https://jyx.jyu.fi/bitstream/handle/123456789/52275/1/URN%3ANBN%3Afi%3Ajyu-201612125051.pdf 相关 ...

  4. bzoj4129

    题解: 树上+可修改莫队 莫队的每一块 可以用一个栈 每一次dfs个数>sqrt(n)(自己选的)的时候就可以跳出了 然后不要忘记分出来最后一块 代码: #include<bits/std ...

  5. mmap实现大文件快速拷贝

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. linux下部署tomcat服务器之安装jdk

    如果一开始安装过jdk的可以卸载 rpm -qa | grep java rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x8 ...

  7. 1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!

    1月中旬,阿里云云栖社区 联合 博文视点 为大家带来十本技术书籍(机器学习.Java.大数据等).以下为书籍详情,文末还有福利哦! 书籍名称:Oracle数据库问题解决方案和故障排除手册 内容简介 & ...

  8. Spinner的用法

    1.先自定义一个数组 2.在new一个ArrayAdapter方法: ArrayAdapter<String> adapter = new ArrayAdapter<String&g ...

  9. Ext.js树结构

    1.app.js Ext.onReady(function(){ Ext.QuickTips.init(); Ext.Loader.setConfig({ enabled:true }); Ext.a ...

  10. hasura graphql server (haskell)构建

    安装 &&运行pg(docker) version: '3.6' services: postgres: image: postgres environment: - "PO ...