前一段时间用C#串口操作开发,由于以前没有接触过C#串口操作刚开始觉得很难,后来查了一些资料后发现其实并没什么大不了的。现把C#串口操作总结一下。那么这里分成两步向你介绍C#串口操作的具体过程:第一步C#串口操作的控件只能引用Mscomm控件(1)、将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中。要注意的是,MSComm控件是要授权的,所以必须将其使用“执照”Licence 在注册表中登记注册,下一步就是注册方法。至于为什么要这样做,可以看看下面的网页:http://support.microsoft.com/support/kb/articles/q151/7/71.asp (2)、用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->"运行",再在中填入(假设操作安装在C盘,WIN2000): Regsvr32  C:\winnt\system32\Mscomm32.ocx (3)、在注册表中手工新建一个主键项:先在点击“开始”->"运行",再在中填入regedit命令打开注册表,找到HKEY_CLASSES_ROOT\Licenses,在其中添加主键:4250E830-6AC2-11cf-8ADB-00AA00C00905 并将内容设置为: kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

第二步在工具箱中”添加项“的COM组件中添加Microsoft Comm Control,version 6.0引用。

这样利用MSComm控件就可以开始C#串口操作了!

一、C#串口操作之读取串口数据:

  1. try
  2. {
  3. axMSComm2.CommPort = 1i;
  4. axMSComm2.InputMode =
  5. MSCommLib.InputModeConstants.comInputModeBinary;
  6. //用于设置或返回传输数据的类型,
  7. //此例程是通过Input属性以二进制方式检取回数据
  8. axMSComm2.PortOpen = true;
  9. //打开端口
  10. axMSComm2.InBufferCount = 0;
  11. //用于返回输入缓冲区内的等待读取得字节个数
  12. }
  13. catch (Exception e)
  14. {
  15. MessageBox.Show(e.ToString());
  16. }
  17. 在axMSComm的OnComm事件里写:
  18. private void axMSComm2_OnComm(object sender, EventArgs e)
  19. {
  20. switch (axMSComm2.CommEvent)  //查询CommEvent属性
  21. {
  22. case (short)(MSCommLib.OnCommConstants.comEvReceive):
  23. //当接收缓冲区内字符数达到RThreshold值,
  24. //进入CommData()子程序
  25. CommData(); //接收缓冲区内数据
  26. break;
  27. }
  28. }
  29. private void CommData() //接收数据
  30. {
  31. int BufferDataNumStart = 0;
  32. //定义第一次查询缓冲区内数据个数
  33. int BufferDataNumEnd = 0;
  34. //定义最后一次查询缓冲区内数据个数
  35. byte[] CommBufferData = new byte[1024];
  36. byte[] ComByte = new byte[8];
  37. BufferDataNumStart = axMSComm2.InBufferCount; ;
  38. //将缓冲区内等待读取的字节个数赋给BufferDataNumStart
  39. if (BufferDataNumStart == 0) return;
  40. //如果缓冲区为空,说明还没有数据传来,
  41. //则返回;若不为空,进入下面的循环
  42. //读取缓冲区内全部内容
  43. axMSComm2.InputLen = 0;
  44. while (true)
  45. {
  46. System.Threading.Thread.Sleep(50);
  47. //延时,以确保数据完全接收
  48. BufferDataNumEnd = axMSComm2.InBufferCount;
  49. //再次读取缓冲区内字节个数
  50. if (BufferDataNumStart == BufferDataNumEnd) break;
  51. //如果BufferDataNumStart==BufferDataNumEnd,
  52. //说明本帧数据已经读完,退出循环
  53. BufferDataNumStart = BufferDataNumEnd;
  54. //否则,将BufferDataNumEnd赋给BufferDataNumStart,
  55. //并继续循环,直到完全接收
  56. }
  57. object objIn;
  58. objIn = axMSComm2.Input;
  59. //这里注意MSComm.Input返回的是一个object的类型,
  60. //所以必须使用显式的类型转换
  61. CommBufferData = (byte[])objIn;
  62. //CommBufferData为串口缓冲区内所有数据
  63. //存取最后一次接收到的缓冲区的数据,
  64. //存储部分时作为后期数据处理所用,
  65. //以便于程序员分析数据。使用StreamWriter,
  66. //需在添加命名控件using System.IO;
  67. //将上次未处理的数据和本次存储数据在ReceivedData相连,
  68. //此部分是防止发送过来的数据本身就不完整,
  69. //以至于数据处理不能进行完全,故保留并与新接收的数据相连
  70. for (int i = 0; i < BufferDataNumEnd; i++)
  71. {
  72. ReceiveDataNum++;
  73. UnsettledDataNum++;
  74. ReceivedData[ReceiveDataNum - 1] = CommBufferData[i];
  75. }
  76. //进入数据处理字程序
  77. }
  78. private void DealData() //数据处理
  79. {
  80. for (int i = 0; i < ReceivedData.Length - 7; i++)
  81. {
  82. if (ReceivedData[i] ==
  83. 0xff && ReceivedData[i + 1] == 0x04)判断通讯头
  84. {
  85. zhou++;
  86. INTzhouzhong[zhou] =
  87. int.Parse(ReceivedData[i + 4].ToString("X")) * 10000 +
  88. int.Parse(ReceivedData[i + 3].ToString("X")) * 100 +
  89. int.Parse(ReceivedData[i + 2].ToString("X"));
  90. }
  91. }
  92. ReceiveDataNum = 0;
  93. UnsettledDataNum = 0;
  94. }

二、C#串口操作之发送数据

  1. try
  2. {
  3. axMSComm1.CommPort = zifuchuankou;
  4. axMSComm1.Settings = "9600,N,8,1";
  5. axMSComm1.PortOpen = true;
  6. }
  7. catch
  8. {
  9. MessageBox.Show("COM3初始化失败!");
  10. }
  11. byte[] b1 = { 0x0A, 0x46, 0x31, 0x31, 0x31, 0x2E, 0x31, 0x0D };
  12. axMSComm1.Output = b3;

C#串口操作的具体内容就向你介绍到这里,希望对你了解和学习掌握C#串口操作有所帮助。

转载于:https://www.cnblogs.com/gllgsoft/archive/2010/07/02/1769766.html

C#串口操作实际应用开发详解相关推荐

  1. 【OpenCV 4开发详解】直方图操作

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  2. 【OpenCV 4开发详解】窗口交互操作

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  3. 【OpenCV 4开发详解】两图像间的像素操作

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  4. 单片机 rs232 c语言,完全手册 51单片机C语言开发详解系列之第8章 串口通讯实战—RS232...

    完全手册 51单片机C语言开发详解系列 技术凝聚实力 专业创新出版 第8章 串口通讯实战-RS232接口电路与软件设计 本章主要通过实际的例子讲解AT89S51单片机的RS232串行通讯接口设计. 随 ...

  5. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  6. linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt

    PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...

  7. 《Linux设备驱动开发详解(第2版)》隆重出版

    Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图     基本信息 * 作者: 宋宝华       * 出版社:人民邮电出版社     * ISBN:97 ...

  8. 【OpenCV 4开发详解】漫水填充法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. 【OpenCV 4开发详解】点集拟合

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  10. 【OpenCV 4开发详解】轮廓外接多边形

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

最新文章

  1. Python Web实时消息后台服务器推送技术---GoEasy
  2. 网上借鉴及自己对git的认知(很早就写了,一直没有上传,如有误解,请指出)...
  3. Delphi中如何将一个extended型等实数强制转换为integer型
  4. mockito_书评:Mockito Essentials
  5. Ribbon中的负载均衡算法实现
  6. android动画入门,Android动画之入门篇(一)
  7. 大数据集群被窃取数据怎么办?透明加密可以一试
  8. java datainputstream_Java中DataInputStream的用法
  9. 编程语言_JavaScript_面试题003
  10. 【安卓项目】—— 口算测试APP(教程源自B站)
  11. 第三章 机器人系统的动力学模型
  12. 计算机休眠唤醒原理,电脑休眠和睡眠区别以及怎么唤醒
  13. 电脑蓝屏怎么办 七大原因及解决办法来帮你
  14. 安卓投屏软件_免费领取15天懒人听书会员+安卓美食菜谱整合app+安卓乐播投屏+办公软件幕布405天免费领取...
  15. iPhone苹果手机支付宝App Store消费红包怎么使用?
  16. references column 'xxx' which is not in SELECT list
  17. Java练习题十四期:不要二
  18. 2019淘宝双十一活动前期营销分析
  19. 【调剂】2020年东北石油大学非常规油气研究院--赵小青老师课题组招生
  20. 计算机软件硬件最核心的,计算机硬件系统最核心的是什么,计算机硬件最核心部件...

热门文章

  1. Dialogue and Conversational Agents
  2. linux 内核参数优化 mysql_Linux 系统内核参数优化
  3. Apache配置虚拟主机后,不能访问localhost的问题
  4. 一起学Hive——总结复制Hive表结构和数据的方法
  5. HashTable源码简单介绍
  6. 深度学习文献阅读笔记(6)
  7. 关于oracle的笔记
  8. Linux环境进程间通信(一)管道和FIFO
  9. 第六章 类型和成员基础
  10. java Thread.yield()用法详解