原文: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. python高级编程之列表推导式

    1. 一个简单的例子 在Python中,如果我们想修改列表中所有元素的值,可以使用 for 循环语句来实现. 例如,将一个列表中的每个元素都替换为它的平方: >>> L = [1, ...

  2. ansible入门01

    1.批量操作 1.操作系统选型与安装: 1.安装在实体机上: 批量安装: PXE(预引导执行环境):需要网卡上有DHCP客户端去加载bootloadder cobbler: kickstack: 2. ...

  3. angular学习笔记系列一

    首先我们要明确一点,angular在web应用的角色,在传统的多页面web应用程序中,服务器根据输出数据和html模板渲染好页面所需的html输出到页面(所谓的服务器装配程序),随着单页面应用程序和a ...

  4. jquery MD5

    /** * jQuery MD5 hash algorithm function * * <code> * Calculate the md5 hash of a String * Str ...

  5. react 拖拽排序---原生

    定义css, 两个动画 .drag-up { -webkit-animation: dragup ease 0.2s 1; animation: dragup ease 0.2s 1; -webkit ...

  6. 【C++基础】sort函数

    sort函数的时间复杂度为O(n*logn),排序方法类似于快排. # 头文件 #include<algorithm> using namespace std; # 参数 第一个参数:要排 ...

  7. 创建一个新的进程os.fork

    import os pid = os.fork()功能:创建新的进程参数:无返回值:失败返回一个负数 成功:在原有进程中返回一个新的进程的PID号 在新的进程中返回0 *子进程会复制父进程全部代码段, ...

  8. 使用 Windows 10 中的加速度计(Accelerometer,重力传感器)

    在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果. Windows 10 UWP 中的加速 ...

  9. 随笔——python截取http请求报文响应头

    随笔——python截取http请求报文响应头 标签: pythonhttp响应头 2014-05-29 09:32 2114人阅读 评论(0) 收藏 举报  分类: 随笔(7)  版权声明:本文为博 ...

  10. sql语句学习(第二季

    union操作符 -- 4.查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩 -- (包括有成绩的和无成绩的) 两个表联查的时候,有时候一个表在另一个表没有数据,即使使用了join,还是nu ...