串口实践:初识初写

来源:岁月联盟 编辑:zhu 时间:2008-08-26
  由于最近做关于IC卡方面的,不免涉及到串口与单片机的通信。上网查找了很久,又看了很久相关的书,有了初步的“形状”,怎么这么说呢?界面做出来了,电脑与电脑之间的通信也行了。但就是与单片机的通信还有点问题,不知是上位机的问题还是下位机的程序的问题,也难找到头绪。

   上位机是用VC写的,从放假到现在都在看VC的书,才略懂MFC与用API函数编程的区别,以及常用控件的用法。下面把一些代码贴出来:

   初始化串口代码:

 m_ctrMSComm.SetCommPort(3);   //这里是在程序中打开串口,COM3虚拟者也
 m_ctrMSComm.SetInBufferSize(1024); //接收缓冲区1024
 m_ctrMSComm.SetOutBufferSize(512); //发送缓冲区512
 if (!m_ctrMSComm.GetPortOpen())   //判断是否打开了串口.
 {
  m_ctrMSComm.SetPortOpen(TRUE);
 }
m_ctrMSComm.SetInputMode(1);   //二进制格式.
m_ctrMSComm.SetSettings("9600,n,8,1"); //波特率9600无检验位,8个数据位,1个停止位 m_ctrMSComm.SetRThreshold(1);  // 接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件m_ctrMSComm.SetInputLen(0);   //设置当前接收区数据长度为0,表示全部读取

 

   发送字符串代码:

UpdateData(TRUE);

CByteArray sendArr;
WORD wLength;
wLength = m_Send.GetLength();
sendArr.SetSize(wLength);
for(int i =0; i<wLength; i++)
 {
 sendArr.SetAt(i, m_Send.GetAt(i));         //此处是m_Send的内容!!
 }
m_ctrMSComm.SetOutput(COleVariant(sendArr));

   接收事件代码:

 UpdateData(TRUE);
 VARIANT variant_inp;
 COleSafeArray safearray_inp;
 LONG i = 0;
 int len;
 BYTE rxdData[2048];  //data receive;
 CString tmpData;   //temp data;
 switch (m_ctrMSComm.GetCommEvent())
 {
 case 1:
  break;
 case 2:      //这个是GetCommEvent事件的返回值 2表示接收缓冲区有字符.
   
  variant_inp = m_ctrMSComm.GetInput();   //接收
  safearray_inp = variant_inp;
  len = safearray_inp.GetOneDimSize();    //获得读取数据的CString类型的长度 有效者也

  for (i = 0; i < len; i++)
   {
/*    safearray_inp.GetElement(&i,&rxdData[i]);
    //safearray_inp.GetElement(&i,rxdData + i); //应该是接收数据  ??
    BYTE bt = *(char*)(rxdData+i);
    tmpData.Format("%c",bt);

    //--test!!----
   // MessageBox(tmpData);

   // m_Recv += tmpData;*/

    safearray_inp.GetElement(&i,rxdData + i);
    BYTE bt =* (char*)(rxdData+i);
    tmpData.Format("%c",bt);
    m_Recv += tmpData;
   }
/*  rxdData[i] = '/0';  //结束符
  
  m_Recv += rxdData; */
  m_Recv += "/r/n";   //每次接收完一串字符,换行.必须用"/r/n"!!! 
  UpdateData(FALSE);
  break;
 default:   //传输事件出错
  m_ctrMSComm.SetOutBufferCount(0);
  break;
 }

 

下面图片是写出来的程序与串口调试助手之间的通信。其中用的是虚拟串口,COM3与COM4.