C#实现PC机与单片机(89C51)的串行通讯

来源 :网络与信息 | 被引量 : 0次 | 上传用户:xiaochongcheng
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文主要论述PC机与单片机之间实现异步串行通讯需要解决的问题以及如何利用C#提供的串行通讯SerialPort类来实现PC机与51单片机的通讯。
  关键词: SerialPort;串行通讯;波特率
  
  1 引言
  
  PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通讯,是许多测控系统中常用的一种通信解决方案。
  在Microsoft.Net技术广泛应用的今天人们采用了许多方法在Visual Studio.Net中来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件,这是最简单、最方便的方法,但需要注册;第二种方法是自己用API写串口通信;第三种方法是采用微软推出的最新版本Visual Studio 2005开发工具,NET Framework 2.0类库中包含的SerialPort类,方便地实现了所需要串口通讯的多种功能。本文着重讨论了Visual Studio 2005开发工具中SerialPort类的设计方法。
  
  2 SerialPort类常用属性、方法和事件
  
  2.1 命名空间
  System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。
  2.2 串口的通讯参数
  ①通讯端口号:
  [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM端口,该属性返回类型为String。
  ②通讯格式:
  SerialPort类分别用[BaudRate]、[Parity]、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位。
  2.3 串口的打开和关闭
  SerialPort类中打开关闭串口相应的是调用类的Open()和Close()方法。
  2.4 数据的发送和读取
  SerialPort类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符。读取串口缓冲区的方法有许多,其中除了ReadExisting和ReadTo,其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常。
  2.5 DataReceived事件
  DataReceived事件在接收到了[ReceivedBytesThreshold]设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。
  
  3 PC机与8051实现串行通讯需要解决的问题
  
  3.1 TTL电平与RS232电平的转换
  89C51单片机采用的是TTL电平且采用正逻辑[1],而PC机采用RS232与外部设备进行通讯,RS232采用负逻辑,因此MCS51单片机串行口与PC机的RS232接口相连进行通讯时必须进行电平的转换。通常采用MAX232电平转换芯片。
  3.2 单片机与PC机通讯时波特率的设定
  PC机与51单片机双方进行通讯时必须采用相同的波特率,PC机的波特率默认为9600b/s, 51系列单片机有两个定时/计数器,四种工作方式,一般用定时器工作于方式2(可重新装载的8位定时器/计数器)作为定时波特率发生器。因此单片机与PC机进行异步通讯时的波特率可由公式3.1得出:
  
  
  其中SMOD是单片机电源控制寄存器(PCON)中的位7,开机(RESET)时,SMOD的设定值为0,亦可用指令“ANL PCON,#7FH”清除为0。fosc为单片机的晶振频率。根据需要的波特率即可得计数初值TH1。
  
  4 单片机与PC机通讯时通讯协议的约定及部分初始化程序
  
  在单片机与PC机的通讯中,单片机一般作为下位机负责从控制对象采集数据(如压力、流量等),上位机则进行现场可视化检测。传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。以下给出单片机和VC# 环境下部分的通讯程序。
  4.1 串口通讯协议约定
  波特率为9600b/s,无奇偶校验位,传输的数据位为8位,停止位为1位,用串行口工作于方式1。单片机的晶振频率fosc=11.059MHz,定时器T1工作于方式2作为波特率发生器,根据计数初值的计算公式(3.1)可得计数初值TH1为0FDH 。
  4.2 单片机的串行通讯程序
  单片机串行通讯程序,给出了初始化程序:
  ORG0000H
  AJMP START;转到初始化程序
  ORG0023H
  AJMP PGUART ;转到串行中断服务子程序
  START: MOVSP,#60H ;堆栈指针初始化
  MOVP0,#0FFH ;端口初始化
  MOVP1,#0FFH
  MOVP2,#0FFH
  MOVP3,#0FFH
  MOVTMOD,#20H;定时器T1工作于模式2,自动重装载
  MOVTH1,#0FDH;TH1、TL1初值为"0FDH",9600bps
  MOVTL1,#0FDH
  MOVSCON,#50H;串行口工作于方式1,允许接收
  SETB TR1 ;启动定时器T1
  SETB ES ;允许串行口中断
  SETB EA ;开总中断
  MAIN:...... ;主程序处理其他任务,等待串口中断
  AJMP MAIN
  PAUSE:...... ;串口中断服务子程序,接收处理数据
  RETI
  END
  4.3 上位机的串行通讯程序
  例:发送及接收数据的程序:
  private void button1_Click(object sender, EventArgs e)
  {
  string a;
  SerialPort Ser1 = new SerialPort("com1", 9600, Parity.None, 8, StopBits.One);
  Try
  {
  Ser1.Open();
  }
  catch (InvalidOperationException ex)
  {
  MessageBox.Show(ex.ToString());
  }
  if (textBox1.Text == "")
  {
  MessageBox.Show("Err");
  Ser1.Close();
  }
  else
  {
  a=textBox1.Text;
  try
  {
  //p.WriteLine(a);
  p.Write(a);
  }
  catch(InvalidOperationException ex)
  {
  MessageBox.Show(ex.ToString());
  }
  textBox2.Text = Ser1.ReadByte().ToString();
  Ser1.Close();
  }
  }
  
  5 结束语
  
  单片机与上位机的通讯在工业现场中应用的比较广泛,本文对C#提供的串行通讯SerialPort类来实现PC机与51单片机的通讯进行了探讨。实践证明,这种方案是可行的,能保证双方通讯正常。
  
  参考文献
  [1]蔡朝洋.单片机控制实习与专题制作.北京航空航天大学出版社.
  [2]张洪润,易涛.单片机应用技术教程.清华大学出版社.
其他文献
目前,微软向其用户发出警告,在WindowsXPSP2和VistaRTM到WindowsXPSP3和WindowsVistaSP1的更新过程中,若用户的计算机中带有一键恢复5.0安装包,将会导致该用户的操作系统显示黑屏并导致计算机重新启动。根据微软表示,问题是由这两个补丁包和一键恢复驱动程序safnt.sys之间的不相兼容性导致的。   这就意味着,当用户在VistaRTM和XPSP2的基础上升级
期刊
显卡驱动:安装好显卡驱动后没调整显示器的刷新率,使得显示器工作在默认刷新率60Hz。长时间使用会使人头晕,眼睛酸涨,视力下降等。所以,请在安装好显卡驱动后别忘记调整一下显示器的刷新率,一般15寸 CRT调整为800X600 75-85Hz,17寸CRT为1024X768 75-85Hz,当显示器调整到75Hz以上时,眼睛几乎察觉不到显示器在闪烁。不过请不要随意把显示器的刷新率调整到85Hz以上,如
期刊
尽管绝对安全的密码是不存在的,但是相对安全的密码还是可以实现的。WinXP中通过本地安全设置就可以使我们的密码更经得起考验。     一、设置可靠的密码     在“开始”→“运行”窗口中输入“secpol.msc”并回车就可以打开“本地安全设置窗口”。或者通过“控制面板”→“管理工具”→“本地安全策略”来打开这个设置界面。   在“本地安全设置”窗口的左侧展开“账户策略”→“密码策略”,在右边窗
期刊
作为一个完全免费的优化软件,Vista优化大师赢得了广大用户的广泛赞誉。本人使用它将近两个月时间,在亲身感受了它的功能全面、操作简单的同时,也体会到它的一些不尽我意之处。    (1) 名称花里胡哨    打开软件进入各个功能界面,只见大师满天飞——什么清理大师、IE管理大师、美化大师等等,让人觉得掉进了大师窝里。如果作为一个单独的软件,这样命名无可厚非,但在优化大师名下,就不妥当了,况且也不符合
期刊
内存越大,机器越快?我想大多数人的回答都是肯定的,从256M到512M的提示是明显的,所以想当然的,从512M到1G的提升也会很明显吧。但是我用我的亲身经历告诉你,1G的内存比512M还慢,当然前提是你什么都不设置。 前几天我把我的Compaq N410c扩展到了1G的内存,2×512M PC133的SD,结果扩展之后发现机器不但还跟原来一样,有点卡,而且休眠时间变长了,这是肯定的啦,休眠就是把内
期刊
大家都知道,一台电脑的稳定与电源有着莫大的关系。品牌电脑的配置不怎么样,但它的电源都是配好的。所以我们DIY当然也不能省下这个钱。现在教大家怎么正确地挑选符合自己电脑配置的电源,让我们的电脑运行在稳定的环境下。    1.3C认证  在所有送测的电源中,只有一款电源还没有通过3C认证,当然,各位在市场上是肯定买不到的,因为在我国市场上销售的电源,必须要通过3C认证,那款没有认证的电源也正在申请中,
期刊
摘要:本文在介绍显示器像素发光原理的基础上,从数字化的角度讨论RGB色彩模式的定义及其子集(位图、灰度、索引模式) ,并给出数字化的CMYK和HSB色彩模式1,为在软件中理解和应用色彩模式,自觉运用相关概念设定一个基础。  关键词:色彩模式;RGB;CMYK;HSB    色彩是人对光波的视觉反应。数字化处理图像图形中,对色彩的认识需要有一个基本标准,即所谓的色彩模式。视觉反应的色彩光波来自于发光
期刊
1 引言    在Web 2.0出现以前,跨站脚本(XSS)攻击不是那么引人注目,但是在Web 2.0出现以后,配合流行的AJAX技术,XSS的危害性达到了十分严重的地步。比如,世界上第一个跨站脚本蠕虫发生在MySpace网站,20小时内就传染了一百万个用户,最后导致该网站瘫痪。因此我认为,XSS是在脚本环境下的溢出漏洞,其危害性绝不亚于传统的缓冲区溢出漏洞。    2 XSS攻击的定义    跨
期刊
摘要:骑士游历问题是经典的NP问题。在骑士游历问题常规算法的基础上,提出一个新的算法——预见算法,用Java实现该算法,提高程序的运行效率。  关键词:骑士游历;预见;Java算法    1 骑士游历问题  在国际象棋的棋盘(8行×8列)上放置一个马,按照“马走日字”的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次。若给定起始位置(x0,y0),编程探索出一条路径,沿着这条路径马能遍
期刊
1引言    打造远程安全接入平台,一直是网络远程访问的迫切需求。当前,众多的安全协议(如PPTP、L2TP、IPSec和MPLS)各具特色并侧重于不同的方面,但能同时结合简易、安全两项特性的则非SSL莫属,SSL VPN是平衡访问自由度和安全性的出色解决方案。    2SSL     安全套接层(Secure Sockets Layer,SSL)是Netscape于1994年提出的基于Web应用
期刊