“微机原理与接口技术”课程设计
一、设计题目
rs232串口通信控制
二、设计内容
利用微机自带的2个串口以及串口连接电缆模拟实现串口通信,用高级程序语言设计并实现一个用于win9x/2k/nt平台的串口监视、调试程序。并可以在线设置各种通信速率、奇偶校验、通信口而无需重新启动程序;可以自动显示接收到数据,并能在字符串10进制和16进制之间*切换。
三、需提交材料内容
除需提交可运行的程序源代码外,还要课程设计文挡说明,文挡说明包括以下三部分:1,系统分析与设计、2,关键技术与算法、3,程序流程框图及源程序(附功能模块注释)。
15 个解决方案
#1
《Visual C++串口通信技术与工程实践》这本书的第八章,完全符合你的要求
不过,总体上这本书挺烂的
不过,总体上这本书挺烂的
#2
找不到这本书啊~~~~~~~
#3
Help,help,help!!!!!
请进来的各位高手帮帮忙啊!!
分不够可以再加
请进来的各位高手帮帮忙啊!!
分不够可以再加
#4
告诉你的邮箱,给你传一个。
#5
邮箱:lisaforever@163.com
#6
拜托了~~~~
#7
呵呵,《Visual C++串口通信技术与工程实践》 真的不怎么样!
#8
《串行通讯开发指南》
#9
《Visual C++串口通信技术与工程实践》那本书虽然不太好但是还帮过我的大忙,那书是不太好找,不过工程实践这方面的书特少,几乎没有。我是初学者,编过用232口控制的小程序,水平教低但愿有帮助,一个232口的类和你的要求可能在细节上不太一样,我想都差不多
// SoemComm.h: interface for the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
#define AFX_SOEMSCALE_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int DEFAULT_BAUD_RATE = 2400;
const int COM1 = 1;
const int COM2 = 2;
class CSoemComm
{
public:
CSoemComm(char nComm =COM2,int nBaudRate=2400);//COM2,2400是我的程序要求,你可改
virtual ~CSoemComm();
void SetComm(char nComm);
void SetParity(char nParity);//设置波特率
int GetComm() const;//
int GetBaudRate() const;//取得得拨特率
bool InitComm() ;//初始化串口
BOOL Close();
bool Read(char *pBuffer, DWORD dwReadCount);//读
bool Write(const char *pBuffer, DWORD dwWriteCount);//写
private:
char m_nComm; //Comm通信口。
char m_nParity;//奇偶校验方式。
int m_nBaudRate; //波特率。
bool m_bCommInited; //是否已经初始化了Comm接口。
HANDLE m_hComm; //串口句柄。
};
#endif // !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
// SoemComm.cpp: implementation of the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SoemComm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSoemComm::CSoemComm(char nComm , int nBaudRate )
{
m_nComm = nComm;
m_nBaudRate = nBaudRate;
m_bCommInited = false;
m_hComm = INVALID_HANDLE_VALUE;
}
CSoemComm::~CSoemComm()
{
if (m_hComm != INVALID_HANDLE_VALUE) {
::CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
}
}
void CSoemComm::SetComm(char nComm)
{
m_nComm = nComm;
}
void CSoemComm::SetParity(char nParity)
{
m_nParity = nParity;
InitComm();
}
int CSoemComm::GetComm() const
{
return m_nComm;
}
int CSoemComm::GetBaudRate() const
{
return m_nBaudRate;
}
bool CSoemComm::Read(char *pBuffer, DWORD dwReadCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwReadCount2 = 0;
BOOL L=ReadFile(
m_hComm,
pBuffer,
dwReadCount,
&dwReadCount2,
0);
if(!L)
return false;
if (dwReadCount!=dwReadCount2)
return false;
return true;
}
bool CSoemComm::Write(const char *pBuffer, DWORD dwWriteCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwWriteCount2 = 0;
BOOL ret=WriteFile(
m_hComm,
pBuffer,
dwWriteCount,
&dwWriteCount2,
0);
if (!ret)
return false;
if (dwWriteCount!=dwWriteCount)
return false;
return true;
}
bool CSoemComm::InitComm()
{
bool ret = false;
if (INVALID_HANDLE_VALUE != m_hComm)
{
if (!CloseHandle(m_hComm))
return false;
}
CString strComm;
strComm.Format("COM%d", m_nComm);
m_hComm = CreateFile(
strComm,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0
);
if (INVALID_HANDLE_VALUE == m_hComm)
{
ret = false;
goto EXIT2;
}
DCB dcb;
GetCommState(m_hComm, &dcb);
{
CString str;
str.Format("%d, %c, 8, 1", m_nBaudRate, m_nParity);
::BuildCommDCB(str, &dcb);
}
if (!SetCommState(m_hComm, &dcb))
{
ret = false;
goto EXIT;
}
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout=MAXDWORD;//1 TimeOutsRead=3*bytes_to_read)+2
TimeOuts.ReadTotalTimeoutConstant=6000;//2
TimeOuts.ReadTotalTimeoutMultiplier=0;//3
TimeOuts.WriteTotalTimeoutConstant=6000;//4 TimeOutsWrite=5*bytes_to_write)+4
TimeOuts.WriteTotalTimeoutMultiplier=1000;//5
if(!SetCommTimeouts(m_hComm,&TimeOuts))//
{
ret=false;
goto EXIT;
}
ret = true;
m_bCommInited = ret;
EXIT:
if (!ret)
{
CloseHandle(m_hComm);
}
EXIT2:return ret;
}
//close the commumincating device
BOOL CSoemComm::Close()
{
BOOL b = FALSE;
if (m_bCommInited) {
b = ::CloseHandle(m_hComm);
m_bCommInited = FALSE;
}
return b;
}
// SoemComm.h: interface for the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
#define AFX_SOEMSCALE_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int DEFAULT_BAUD_RATE = 2400;
const int COM1 = 1;
const int COM2 = 2;
class CSoemComm
{
public:
CSoemComm(char nComm =COM2,int nBaudRate=2400);//COM2,2400是我的程序要求,你可改
virtual ~CSoemComm();
void SetComm(char nComm);
void SetParity(char nParity);//设置波特率
int GetComm() const;//
int GetBaudRate() const;//取得得拨特率
bool InitComm() ;//初始化串口
BOOL Close();
bool Read(char *pBuffer, DWORD dwReadCount);//读
bool Write(const char *pBuffer, DWORD dwWriteCount);//写
private:
char m_nComm; //Comm通信口。
char m_nParity;//奇偶校验方式。
int m_nBaudRate; //波特率。
bool m_bCommInited; //是否已经初始化了Comm接口。
HANDLE m_hComm; //串口句柄。
};
#endif // !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
// SoemComm.cpp: implementation of the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SoemComm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSoemComm::CSoemComm(char nComm , int nBaudRate )
{
m_nComm = nComm;
m_nBaudRate = nBaudRate;
m_bCommInited = false;
m_hComm = INVALID_HANDLE_VALUE;
}
CSoemComm::~CSoemComm()
{
if (m_hComm != INVALID_HANDLE_VALUE) {
::CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
}
}
void CSoemComm::SetComm(char nComm)
{
m_nComm = nComm;
}
void CSoemComm::SetParity(char nParity)
{
m_nParity = nParity;
InitComm();
}
int CSoemComm::GetComm() const
{
return m_nComm;
}
int CSoemComm::GetBaudRate() const
{
return m_nBaudRate;
}
bool CSoemComm::Read(char *pBuffer, DWORD dwReadCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwReadCount2 = 0;
BOOL L=ReadFile(
m_hComm,
pBuffer,
dwReadCount,
&dwReadCount2,
0);
if(!L)
return false;
if (dwReadCount!=dwReadCount2)
return false;
return true;
}
bool CSoemComm::Write(const char *pBuffer, DWORD dwWriteCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwWriteCount2 = 0;
BOOL ret=WriteFile(
m_hComm,
pBuffer,
dwWriteCount,
&dwWriteCount2,
0);
if (!ret)
return false;
if (dwWriteCount!=dwWriteCount)
return false;
return true;
}
bool CSoemComm::InitComm()
{
bool ret = false;
if (INVALID_HANDLE_VALUE != m_hComm)
{
if (!CloseHandle(m_hComm))
return false;
}
CString strComm;
strComm.Format("COM%d", m_nComm);
m_hComm = CreateFile(
strComm,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0
);
if (INVALID_HANDLE_VALUE == m_hComm)
{
ret = false;
goto EXIT2;
}
DCB dcb;
GetCommState(m_hComm, &dcb);
{
CString str;
str.Format("%d, %c, 8, 1", m_nBaudRate, m_nParity);
::BuildCommDCB(str, &dcb);
}
if (!SetCommState(m_hComm, &dcb))
{
ret = false;
goto EXIT;
}
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout=MAXDWORD;//1 TimeOutsRead=3*bytes_to_read)+2
TimeOuts.ReadTotalTimeoutConstant=6000;//2
TimeOuts.ReadTotalTimeoutMultiplier=0;//3
TimeOuts.WriteTotalTimeoutConstant=6000;//4 TimeOutsWrite=5*bytes_to_write)+4
TimeOuts.WriteTotalTimeoutMultiplier=1000;//5
if(!SetCommTimeouts(m_hComm,&TimeOuts))//
{
ret=false;
goto EXIT;
}
ret = true;
m_bCommInited = ret;
EXIT:
if (!ret)
{
CloseHandle(m_hComm);
}
EXIT2:return ret;
}
//close the commumincating device
BOOL CSoemComm::Close()
{
BOOL b = FALSE;
if (m_bCommInited) {
b = ::CloseHandle(m_hComm);
m_bCommInited = FALSE;
}
return b;
}
#10
我要一个lomos@eyou.com
#11
http://www.gjwtech.com/上面串口例子多的是,你看看吧
#12
楼主,已经给你传过去了,推荐你看一本关于c++builder串口编程的书
(具体书名忘了)很不错的!!!
(具体书名忘了)很不错的!!!
#13
rs232串口通信控制,我现在正在看这个东东,我这里还有rs422的呢!都是做好的程序!
不过,不好意思,这是公司机密不能泄漏!^_^
这是为军方写的程序哦!!!
不过,不好意思,这是公司机密不能泄漏!^_^
这是为军方写的程序哦!!!
#14
接分!!
#15
《串口通信开发实例导航》人民邮电的。里面好像有你要的例程。也许一样!!!
#1
《Visual C++串口通信技术与工程实践》这本书的第八章,完全符合你的要求
不过,总体上这本书挺烂的
不过,总体上这本书挺烂的
#2
找不到这本书啊~~~~~~~
#3
Help,help,help!!!!!
请进来的各位高手帮帮忙啊!!
分不够可以再加
请进来的各位高手帮帮忙啊!!
分不够可以再加
#4
告诉你的邮箱,给你传一个。
#5
邮箱:lisaforever@163.com
#6
拜托了~~~~
#7
呵呵,《Visual C++串口通信技术与工程实践》 真的不怎么样!
#8
《串行通讯开发指南》
#9
《Visual C++串口通信技术与工程实践》那本书虽然不太好但是还帮过我的大忙,那书是不太好找,不过工程实践这方面的书特少,几乎没有。我是初学者,编过用232口控制的小程序,水平教低但愿有帮助,一个232口的类和你的要求可能在细节上不太一样,我想都差不多
// SoemComm.h: interface for the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
#define AFX_SOEMSCALE_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int DEFAULT_BAUD_RATE = 2400;
const int COM1 = 1;
const int COM2 = 2;
class CSoemComm
{
public:
CSoemComm(char nComm =COM2,int nBaudRate=2400);//COM2,2400是我的程序要求,你可改
virtual ~CSoemComm();
void SetComm(char nComm);
void SetParity(char nParity);//设置波特率
int GetComm() const;//
int GetBaudRate() const;//取得得拨特率
bool InitComm() ;//初始化串口
BOOL Close();
bool Read(char *pBuffer, DWORD dwReadCount);//读
bool Write(const char *pBuffer, DWORD dwWriteCount);//写
private:
char m_nComm; //Comm通信口。
char m_nParity;//奇偶校验方式。
int m_nBaudRate; //波特率。
bool m_bCommInited; //是否已经初始化了Comm接口。
HANDLE m_hComm; //串口句柄。
};
#endif // !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
// SoemComm.cpp: implementation of the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SoemComm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSoemComm::CSoemComm(char nComm , int nBaudRate )
{
m_nComm = nComm;
m_nBaudRate = nBaudRate;
m_bCommInited = false;
m_hComm = INVALID_HANDLE_VALUE;
}
CSoemComm::~CSoemComm()
{
if (m_hComm != INVALID_HANDLE_VALUE) {
::CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
}
}
void CSoemComm::SetComm(char nComm)
{
m_nComm = nComm;
}
void CSoemComm::SetParity(char nParity)
{
m_nParity = nParity;
InitComm();
}
int CSoemComm::GetComm() const
{
return m_nComm;
}
int CSoemComm::GetBaudRate() const
{
return m_nBaudRate;
}
bool CSoemComm::Read(char *pBuffer, DWORD dwReadCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwReadCount2 = 0;
BOOL L=ReadFile(
m_hComm,
pBuffer,
dwReadCount,
&dwReadCount2,
0);
if(!L)
return false;
if (dwReadCount!=dwReadCount2)
return false;
return true;
}
bool CSoemComm::Write(const char *pBuffer, DWORD dwWriteCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwWriteCount2 = 0;
BOOL ret=WriteFile(
m_hComm,
pBuffer,
dwWriteCount,
&dwWriteCount2,
0);
if (!ret)
return false;
if (dwWriteCount!=dwWriteCount)
return false;
return true;
}
bool CSoemComm::InitComm()
{
bool ret = false;
if (INVALID_HANDLE_VALUE != m_hComm)
{
if (!CloseHandle(m_hComm))
return false;
}
CString strComm;
strComm.Format("COM%d", m_nComm);
m_hComm = CreateFile(
strComm,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0
);
if (INVALID_HANDLE_VALUE == m_hComm)
{
ret = false;
goto EXIT2;
}
DCB dcb;
GetCommState(m_hComm, &dcb);
{
CString str;
str.Format("%d, %c, 8, 1", m_nBaudRate, m_nParity);
::BuildCommDCB(str, &dcb);
}
if (!SetCommState(m_hComm, &dcb))
{
ret = false;
goto EXIT;
}
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout=MAXDWORD;//1 TimeOutsRead=3*bytes_to_read)+2
TimeOuts.ReadTotalTimeoutConstant=6000;//2
TimeOuts.ReadTotalTimeoutMultiplier=0;//3
TimeOuts.WriteTotalTimeoutConstant=6000;//4 TimeOutsWrite=5*bytes_to_write)+4
TimeOuts.WriteTotalTimeoutMultiplier=1000;//5
if(!SetCommTimeouts(m_hComm,&TimeOuts))//
{
ret=false;
goto EXIT;
}
ret = true;
m_bCommInited = ret;
EXIT:
if (!ret)
{
CloseHandle(m_hComm);
}
EXIT2:return ret;
}
//close the commumincating device
BOOL CSoemComm::Close()
{
BOOL b = FALSE;
if (m_bCommInited) {
b = ::CloseHandle(m_hComm);
m_bCommInited = FALSE;
}
return b;
}
// SoemComm.h: interface for the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
#define AFX_SOEMSCALE_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int DEFAULT_BAUD_RATE = 2400;
const int COM1 = 1;
const int COM2 = 2;
class CSoemComm
{
public:
CSoemComm(char nComm =COM2,int nBaudRate=2400);//COM2,2400是我的程序要求,你可改
virtual ~CSoemComm();
void SetComm(char nComm);
void SetParity(char nParity);//设置波特率
int GetComm() const;//
int GetBaudRate() const;//取得得拨特率
bool InitComm() ;//初始化串口
BOOL Close();
bool Read(char *pBuffer, DWORD dwReadCount);//读
bool Write(const char *pBuffer, DWORD dwWriteCount);//写
private:
char m_nComm; //Comm通信口。
char m_nParity;//奇偶校验方式。
int m_nBaudRate; //波特率。
bool m_bCommInited; //是否已经初始化了Comm接口。
HANDLE m_hComm; //串口句柄。
};
#endif // !defined(AFX_SOEMCOMM_H__9B52E661_C690_11D6_88E2_0000B4877ECA__INCLUDED_)
// SoemComm.cpp: implementation of the CSoemComm class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SoemComm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSoemComm::CSoemComm(char nComm , int nBaudRate )
{
m_nComm = nComm;
m_nBaudRate = nBaudRate;
m_bCommInited = false;
m_hComm = INVALID_HANDLE_VALUE;
}
CSoemComm::~CSoemComm()
{
if (m_hComm != INVALID_HANDLE_VALUE) {
::CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
}
}
void CSoemComm::SetComm(char nComm)
{
m_nComm = nComm;
}
void CSoemComm::SetParity(char nParity)
{
m_nParity = nParity;
InitComm();
}
int CSoemComm::GetComm() const
{
return m_nComm;
}
int CSoemComm::GetBaudRate() const
{
return m_nBaudRate;
}
bool CSoemComm::Read(char *pBuffer, DWORD dwReadCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwReadCount2 = 0;
BOOL L=ReadFile(
m_hComm,
pBuffer,
dwReadCount,
&dwReadCount2,
0);
if(!L)
return false;
if (dwReadCount!=dwReadCount2)
return false;
return true;
}
bool CSoemComm::Write(const char *pBuffer, DWORD dwWriteCount)
{
ASSERT(pBuffer != NULL);
if (!m_bCommInited)
{
if (!InitComm())
{
return false;
}
}
DWORD dwWriteCount2 = 0;
BOOL ret=WriteFile(
m_hComm,
pBuffer,
dwWriteCount,
&dwWriteCount2,
0);
if (!ret)
return false;
if (dwWriteCount!=dwWriteCount)
return false;
return true;
}
bool CSoemComm::InitComm()
{
bool ret = false;
if (INVALID_HANDLE_VALUE != m_hComm)
{
if (!CloseHandle(m_hComm))
return false;
}
CString strComm;
strComm.Format("COM%d", m_nComm);
m_hComm = CreateFile(
strComm,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0
);
if (INVALID_HANDLE_VALUE == m_hComm)
{
ret = false;
goto EXIT2;
}
DCB dcb;
GetCommState(m_hComm, &dcb);
{
CString str;
str.Format("%d, %c, 8, 1", m_nBaudRate, m_nParity);
::BuildCommDCB(str, &dcb);
}
if (!SetCommState(m_hComm, &dcb))
{
ret = false;
goto EXIT;
}
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout=MAXDWORD;//1 TimeOutsRead=3*bytes_to_read)+2
TimeOuts.ReadTotalTimeoutConstant=6000;//2
TimeOuts.ReadTotalTimeoutMultiplier=0;//3
TimeOuts.WriteTotalTimeoutConstant=6000;//4 TimeOutsWrite=5*bytes_to_write)+4
TimeOuts.WriteTotalTimeoutMultiplier=1000;//5
if(!SetCommTimeouts(m_hComm,&TimeOuts))//
{
ret=false;
goto EXIT;
}
ret = true;
m_bCommInited = ret;
EXIT:
if (!ret)
{
CloseHandle(m_hComm);
}
EXIT2:return ret;
}
//close the commumincating device
BOOL CSoemComm::Close()
{
BOOL b = FALSE;
if (m_bCommInited) {
b = ::CloseHandle(m_hComm);
m_bCommInited = FALSE;
}
return b;
}
#10
我要一个lomos@eyou.com
#11
http://www.gjwtech.com/上面串口例子多的是,你看看吧
#12
楼主,已经给你传过去了,推荐你看一本关于c++builder串口编程的书
(具体书名忘了)很不错的!!!
(具体书名忘了)很不错的!!!
#13
rs232串口通信控制,我现在正在看这个东东,我这里还有rs422的呢!都是做好的程序!
不过,不好意思,这是公司机密不能泄漏!^_^
这是为军方写的程序哦!!!
不过,不好意思,这是公司机密不能泄漏!^_^
这是为军方写的程序哦!!!
#14
接分!!
#15
《串口通信开发实例导航》人民邮电的。里面好像有你要的例程。也许一样!!!