专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 单片机

编写下位机软件和51通讯

发布时间:2010-06-14 15:23:37 文章来源:www.iduyao.cn 采编人员:星星草
编写上位机软件和51通讯
请教下各位高手,我想写一个上位机和51通讯的软件,用什么语言比较好?是C++,还是VB。我自己会C语言,C++也了解点。

------解决方案--------------------
还是用MFC吧,但是那里面的串口空间不那么好用。
关于串口通讯可以参阅龚建伟的书。
此书值得推荐。
------解决方案--------------------
老大 给点分吧!
你会C的话。。怎么做都行,
但我劝你用C#。。
 串口通信
C#上手 比较快 方便!
 C++ 也行 
 我给你贴上点C++的代码。。  做个创建个对话框应用程序。
 我给你贴些 代码 有可能 用上。。。
void CSerialPortDlg::OnBnClickedButtonConnect()
{
// TODO: 在此添加控件通知处理程序代码
DWORD IDThread;
OpenCom(_T("COM2"),9600,8,1,0);
hdcomThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ReadData, AfxGetMainWnd()->m_hWnd,0, &IDThread);//创建线程接收数据

}

void CSerialPortDlg::OnBnClickedButtonSend()
{
// TODO: 在此添加控件通知处理程序代码
DWORD Rlength;
char sendbuf[512]="";
//memset(sendbuf
UpdateData(true);
for(int i=0;i<SendData.GetLength();i++)
{
sendbuf[i]=SendData[i];
}
WriteFile(hdcom,sendbuf,(char)SendData.GetLength(),&Rlength,&ComOver);
ComError=GetLastError();
}
BOOL CSerialPortDlg::OpenCom(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity)
{
DCB dcb;
COMMTIMEOUTS CommTimeOuts;
hdcom=CreateFile(Port,GENERIC_READ 
------解决方案--------------------
 GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);     //打开串口
if(hdcom==INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("!串口不存在或已被占用"));
return FALSE;
}
else
{
GetCommState(hdcom,&dcb);
dcb.BaudRate=BaudRate;
dcb.ByteSize=DataBits;
dcb.StopBits=StopBits;
dcb.Parity=Parity;
SetCommState(hdcom,&dcb);
SetupComm(hdcom,2048,2048);
SetCommMask(hdcom,EV_RXCHAR
------解决方案--------------------
EV_TXEMPTY);

   GetCommTimeouts(hdcom, &CommTimeOuts);
   CommTimeOuts.ReadIntervalTimeout=10;
       SetCommTimeouts(hdcom, &CommTimeOuts);


return true;

}
}
DWORD WINAPI ReadData(HWND hWnd)//主窗口句柄
{
  /*CSerialPortDlg *pMy=(CSerialPortDlg *)hWnd;
  pMy->ComError;
  pMy->ComStat;
  pMy->ReadFlag;
  pMy->ComOver;
  pMy->ComEvent;*/
  char str[512]="";
  DWORD wCount; //读取的字节数
  DWORD wCount01;
  memset(&ComOver,0,sizeof(OVERLAPPED));
  ComOver.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
  while(1)
  { 
  Sleep(2);
  ComEvent=0;
  WaitCommEvent(hdcom,&ComEvent,&ComOver);
  if((ComEvent&EV_RXCHAR)==EV_RXCHAR)//缓冲区中有数据到达
  {
  ClearCommError(hdcom,&ComError,&ComStat);
  wCount=ComStat.cbInQue;////输入缓冲区有多少数据?
if(wCount>0)
{
ReadFlag=ReadFile(hdcom,&str,8,&wCount01,&ComOver);
str[wCount01]='\0';
if(!ReadFlag)
{
if(GetLastError()==ERROR_IO_PENDING)
{
while(!GetOverlappedResult(hdcom,&ComOver,&wCount01,TRUE ))
{
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: