微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MCS251单片机和PC机间的串口通信

MCS251单片机和PC机间的串口通信

时间:01-25 来源:互联网 点击:

SetSettings("9600,N, 8, 1") ; / /波特率为9600,无奇偶校验, 8位数据位, 1位停止位

  m_commute. SetRThreshold (10) ; / /每接收10个字符就触发1次接收事件

  m_commute. SetSThreshold (0) ; / /不触发发送事件

  m_commute. SetInputLen (10) ; / /每次读操作从缓冲区中取10个字符

  m_commute. SetInputMode (1) ; / /二进制数据传输形式

  m_commute. SetPortOpen ( TRUE) ; / /打开串口

  return TRUE; / /返回

  }

  事件驱动是处理串行端口交互作用的一种非常有效的方法。OnComm 事件的CommEvent属性可以捕捉并检查通信事件和错误。发生通信事件或错误时,将触发OnComm 事件, CommEvent属性的值将被改变,应用程序检查CommEvent属性值并作出相应的反应。双击对话框中CMSComm控件,添加OnComm事件的代码:

  if (m_commute. GetCommEvent( ) = = 2) / /判断comEvReceive事件发生否

  {

  shortm_size =m_commute. GetinBufferCount( ) ;

  if (m_size = = 11) / /缓冲区为11个字符为满

  {

  m_commute. SetInputLen (L) ; / /读取接收到的数据

  VAR IANT vRep ly =m_commute. GetInput ( ) ; / /处理接收到的数据

  }

  }

  2.2 下位机通信程序设计

  在上位机与多片单片机通信中,要保证主机与从机间可靠的通信,必须保证通信接口具有识别功能。而单片机串行口控制寄存器SCON中的控制位SM2就是为了满足这一要求而设置的。且SM2控制位只在MCS51单片机的串行工作方式2与方式3才起作用。在串行口以方式2或方式3接收时,若SM2 =1,表示置多机通信功能位,这时出现两种可能情况:接收到第9位数据为1时,数据才装入SBUF,并置R I = 1向CPU发出中断请求;如果接收到第9位数据为0时,则不发生中断,信息被掉失。若SM2=0,则接收到的第9位数据无论是0还是1都产生R I =1中断标志,接收到的数据装入SBUF中。根据上述情况MCS - 51多机通信过程安排如下:

  (1)开始时设所有的从机SM2位为1 ,处于只接收地址帧的状态(串行帧的第9位为1 ) ,对数据帧(串行口的第9位为0)则不做响应。

  (2)当从机接收到主机发来的地址帧后,将所接收的地址与本机地址相比较,若地址与本机地址相符,便使SM2清零以接收主机随后发来的数据,对于地址不相符合的从机,仍保持SM2 = 1状态,故不能接收主机随后发来的数据信息。

  (3)当主机改为与另外从机联系时,可再发出地址帧来寻找其它从机。而先前被寻址过的从机在分析出主机是对其它从机寻址时,恢复其SM2 = 1,等待主机的再一次寻址。

  (4)从机要呼叫主机时,可先发送握手信号,主机检测到有从机呼叫后,发出应答信号,从机接收到主机应答后,便可发送数据给主机。主机通过该信号来判断从机所处的状态,从而作出相应的反应。

  设计单片机通信程序时,必须充分发挥单片机的效率。由于单片机多应用于实时性较强的控制场合,因此,应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间。基于上述考虑,笔者在设计单片机通信程序时,将通信程序分为接收中断处理程序、发送中断处理程序和通信处理程序3部分,并将这3部分程序巧妙地进行组合,从而构成整个单片机的通信程序。图2给出了接收中断处理子程序,图3给出了发送中断子程序。

图2 接收中断处理程序

图3 发送中断处理程序

  3 结束语

  本文给出了上位PC机与下位单片机之间进行异步串行通信的解决方案,上位机通过友好的用户界面,可给下位机发送控制指令。此方案在实际运行过程中,运行稳定,效果良好,从而较好地解决了上位机与下位机之间的通信问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top