串口编程问题
从 rs232发送 1200bps 1 位起始位 8位数据位 1 位停止位 无校验位 的数据 ,这些该怎么定义?请各位高手解答! 问题点数:100、回复次数:6Top
1 楼JedyWoody(学,然后知不足)回复于 2003-12-02 12:44:42 得分 0
搜索一下先。以前有很多这方面的帖子。Top
2 楼netsys2(来电!)回复于 2003-12-02 12:49:21 得分 0
用串口控件,如SPCOMM,它可以设置这些参数。
网上可以找到,如果没有,留言、留妹给我Top
3 楼chifengwatch(chifengwatch)回复于 2003-12-02 13:02:29 得分 100
大致如下:
HANDLE hComm;
if (hComm!=INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
}
char *ComNo;
DCB dcb;
ComNo = ComPort.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm != INVALID_HANDLE_VALUE) // 如果COM未打开
{
//打开通信端口成功
}
else
{
//打开通信端口错误
return;
}
// 将dcb地址传入,以取得通信参数
GetCommState(hComm,&dcb); // 得知目前COM的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1个Stop bit
// 通信端口设置
if (SetCommState(hComm, &dcb))
{ // 设置COM的状态
//通信端口设置成功!
//启动侦听线程
}
else
{
//通信端口设置错误
CloseHandle(hComm);
return;
}
Top
4 楼chifengwatch(chifengwatch)回复于 2003-12-02 13:05:18 得分 0
// 送出数据
char *SendData = "AT\r";
int ln ;
unsigned long lrc , BS ;
if ( hComm == 0 )
{
return ; // 检查Handle值
}
//取得传送的字符串长度
BS = StrLen(SendData);
// 实际的传送动作
WriteFile(hComm,SendData,BS, &lrc,NULL); // 送出数据Top
5 楼zzjzln()回复于 2003-12-02 13:08:04 得分 0
HANDLE hCom; //串口句柄
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate= 1200;
....
if(!SetCommState(hCom,&dcb)){
MessageBox(^_^);
return;
}
Top
6 楼chifengwatch(chifengwatch)回复于 2003-12-02 13:08:28 得分 0
//接收,一般在线程中
DWORD nBytesRead, dwEvent, dwError;
char inbuff[1024];
COMSTAT cs;
if ( hComm == INVALID_HANDLE_VALUE )
{
return;
}
//取得状态
ClearCommError( hComm , &dwError , &cs );
if ( cs.cbInQue == 0 )//无数据
{
return ;
}
// 数据是否大于我们所准备的Buffer
if ( cs.cbInQue > sizeof( inbuff ) )
{
PurgeComm( hComm , PURGE_RXCLEAR ); // 清除COM 数据
return;
}
ReadFile( hComm , inbuff , cs.cbInQue , &nBytesRead , NULL ); // 接收COM 的数
String Temp = "";
// 转移数据到变量中
inbuff[cs.cbInQue]= '\0';
for ( unsigned long i = 0 ; i <= cs.cbInQue ; i++ )
{
Temp += char(inbuff[i]);
}
frm_main->Memo1->Lines->Add( Temp ) ;//显示
//用ClearCommError( hComm , &dwError , &cs )取得缓冲区的状态
Top




