文档详情

用VC实现PC机与单片机串口通讯.doc

发布:2018-05-23约1.92千字共3页下载文档
文本预览下载声明
用VC实现PC机与单片机串口通讯 梁伯福 PC机与单片机串口通讯可以通过多种方式来实现,在这里只介绍使用MSCOMM控件进行通讯。 PC机与单片机进行串口通讯的电路如下: 因为单片机输入输出的是TTL电平,而PC机串口输入输出的是RS232电平,其与TTL电平不兼容,所以要通过RS232接口进行电平转换,这可通过集成电路MAX232来实现。 在这里,我们的通讯采用主从方式,即PC机做主机,单片机作从机,PC机控制单片机发送或者接收数据,单片机没有主动发起通讯的权力。 PC机程序。我们首先在VC中通过appWizard生成一个基于对话框的程序,接着在对话框中添加MSCOMM控件。方法是:右击对话框 - insert activeX control - MSCOMM32.OCX。添加MSCOMM控件后,我们需要在头文件中定义一个类型为CMScomm的变量。 CMSComm m_msComm;  // CMSComm是添加控件后VC自动生成的类 接着我们使用此变量对串口进行初始化操作(可在对话框初始化时或通讯前调用此函数)。 void InitComm() { m_msComm.SetCommPort(1); // 设置通讯的串口,可为1,2,….,N   //(如你的PC机有N个串口的话) m_msComm.SetInputMode(1); //设置接收模式,0为文本,1为二进制,要想能接收 //值为0的数据,一定要设置为二进制模式 m_msComm.SetInputLen(0); // 设置读取方式,0为读取接收缓冲区的全部数据 m_msComm.SetSettings(4800, n, 8, 1); //设置串口的波特率为4800, //无校验位,8数据位, 1位停止位 m_msComm.SetPortOpen(true); // 打开串口,准备通讯 } 为了方便,我们这里假定PC机一次只接收或发送一个数据。 void SendData() { VARIANT RData; COleSafeArray safeArrayData; CByteArray dataBuf; //在这里假设要发送的数据为100,实际使用中可换成要发送的数据 dataBuf.Add(100); m_msComm.SetOutput(COleVariant(R)); //命令单片机接收数据 m_msComm.SetOutput(COleVariant(dataBuf)); } void ReceiveData() { VARIANT RData; COleSafeArray safeArrayData; BYTE rxData[16]; m_msComm.SetOutput(COleVariant(S)); //命令单片机发送数据 RData  =  m_msComm.GetInput(); //读取数据 safeArrayData  =  RData; //VARIANT型变量转换为ColeSafeArray型变量 long int len = safeArrayData.GetOneDimSize(); //得到有效数据长度 for(long i=0; ilen; i++) { //转换为BYTE型数组, 这时rxData数组的值即为PC机从单片机接收到的数据 safeArrayData.GetElement(i, rxData + i); } } 单片机程序如下: …… //通讯方式,波特率等设置(略) unsigned char buf = 100; void ComToPC() interrupt 4 using 3 { unsigned char tempData; EA = 0; //关闭所有中断 tempData = SBUF; if (tempData == R) //R为接收数据,S为发送数据 { buf = getchar(); } else { putchar(buf); } EA = 1; //重新打开中断 } 好了,文章到此结束!希望能帮助你! 单片机 RS232 PC机 TXD TXD RXD RXD
显示全部
相似文档