新闻中心

EEPW首页>嵌入式系统>设计应用> 用VC++6.0实现PC机与单片机之间的数据交换

用VC++6.0实现PC机与单片机之间的数据交换

作者: 时间:2013-02-20 来源:网络 收藏

  2. 通信程序设计

  部分上位机程序

  (1)发送命令字程序,代码如下

  void CCommDlg::OnSend()

  {

  CSerial Serial;

  //构造串口类,初始化串行口

  if (Serial.Open(2,9600)) //if-1

  //打开串行口2,波特率为9600bps

  {

  static char szMessage[]="0";

  //命令码(可定义各种命令码)

  int nBytesSent;

  int count=0;

  resend:

  nBytesSent=Serial.SendData(szMessage,strlen(szMessage));

  //发送命令码

  char rdMessage [20];

  if (Serial.ReadDataWaiting()) //if-2

  {

  Serial.ReadData(rdMessage,88);

  //rdMessage 定义接收字节存储区,为全局变量//

  if ((rdMessage[0]!=0x7f)(count3))

  {

  count++;

  goto resend

  }

  if(count>=3)

  MessageBox(“发送命令字失败”);

  }

  else //if-2

  MessageBox("接收数据错误");

  }

  else //if-1

  MessageBox("串行口打开失败");

  }

  下位机通信程序:

  #includereg51.h>

  #includestdlib.h>

  #includestdio.h>

  #define count 9

  #define com_code 0x00

  #define com_code1 0xff

  unsigned char buffer[count];

  int po,year,month,date,hour;

  int minute,second,recordID ;

  int sum;

  main()

  {

  …

  /*初始化串口和定时器*/

  TMOD=0×20;

  TH1=0×fd;

  TR1=0×01;

  ET1=0×00;

  ES=1;

  EA=1;

  /*待发送数据送缓冲区*/

  buffer[0] = 0×ff; //数据特征码

  buffer[1] = count+1; //数据长度

  buffer[2] = year; //年

  buffer[3] = month; //月

  buffer[4] = date; //日

  buffer[5] = hour; //时

  buffer[6] = minute; //分

  buffer[7] = second; //秒

  buffer[8] = recordID; //事件号

  for(po=0;pocount;po++)

  sum+=buffer[po];

  buffer[9]=sum; //校验和

  …

  }

  /*发送中断服务程序*/

  void send(void) interrupt 4 using 1

  {

  int i;

  RI=0;

  EA=0;

  do

  {

  for(i=0;i=count;i++)

  {

  SBUF=buffer[i]; //发送数据和校验和//

  while(TI==0);

  TI=0;

  }

  while(RI==0);

  RI=0;

  } while(SBUF!=0); //主机接收不正确,重新发送//

  EA=1;

  Return;

  }

  5 应用总结

  根据不同需要,选择合适的方法。我们选用的用VC++类实现的上位机和下位机的串行通信方法具有使用简单、编写程序方便的特点。经过半年多应用于EBM灭火系统的情况来看,该方法实现的系统运行稳定可靠,是一种值得推广的简单易行的通信方法。

c语言相关文章:c语言教程


单片机相关文章:单片机教程


c++相关文章:c++教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭