新闻中心

EEPW首页>嵌入式系统>设计应用> MCS251单片机和PC机间的串口通信

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

作者: 时间:2013-01-25 来源:网络 收藏
  通过该成员变量便可以对串口属性进行设置。以下是通过设置控件属性对串口进行初始化:

  BOOL CMyCOMMDlg: : OnlnitDialog( )

  {

  CDialog: : OnlnitDialog( ) ;

  / /此处为应用框架自动生成代码

  m_commute. SetCommPort(1) ; / /使用串口1

  m_commute. 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)从机要呼叫主机时,可先发送握手信号,主机检测到有从机呼叫后,发出应答信号,从机接收到主机应答后,便可发送数据给主机。主机通过该信号来判断从机所处的状态,从而作出相应的反应。



评论


相关推荐

技术专区

关闭