用MSComm控件如何8位发送一个int(0~255)
用MSComm控件怎么8位发送一个int(0~255)
MFC中,怎么用MSComm控件发送一个int(0~255)数据,一定要是8位发送一个数的。要用到什么函数啊!~我用Format("%C",int)将int转成Cstring 再用串口发送,但是每次数大于127就收到全是00了。求各位大虾帮忙下,要怎么才能保证一次发送一个8位int数据?
------解决方案--------------------
给你个例子,函数名可能和你的不一样,那是因为版本可能是不一样的,因此生成MSCOMM类文件是不一样的,但你可以看明白
BYTE m_ReceBuff[30];
void CMy72V300AView::OnCommMscomm1()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
long i = 0,len;
switch (m_Comm1.get_CommEvent())
{
case 2:
//表示接收缓冲区内有字符
{
variant_inp = m_Comm1.get_Input();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (i = 0; i < len; i++)
{
safearray_inp.GetElement(&i, &m_ReceBuff[i]);
}
m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
safearray_inp.Clear();
}
break;
default:
break;
}
}
串口初始化:
view1->m_Comm1.put_CommPort(1); //串口1
view1->m_Comm1.put_InBufferSize(4096); //设置输入缓冲区的大小,Bytes
view1->m_Comm1.put_OutBufferSize(2048); //设置输入缓冲区的大小,Bytes
if(!view1->m_Comm1.get_PortOpen()) //打开串口
{
view1->m_Comm1.put_PortOpen(true);
}
view1->m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
view1->m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
view1->m_Comm1.put_InputMode(1); //设置输入方式为二进制方式
view1->m_Comm1.put_Settings(str); //设置波特率等参数
view1->m_Comm1.put_RThreshold(8); //为8表示有8个字符即引发事件
view1->m_Comm1.put_InputLen(0);
这是发送函数:
int i,Count;
BYTE SendBuff[8];
CByteArray Array;
Count=8;
Array.RemoveAll();
Array.SetSize(Count);
SendBuff[0]=0;
SendBuff[1]=0;
SendBuff[2]=0;
SendBuff[3]=0;
SendBuff[4]=0x55;
SendBuff[5]=0xaa;
SendBuff[6]=0x55;
SendBuff[7]=0xaa;
for(i=0;i<Count;i++)
Array.SetAt(i,SendBuff[i]);
m_CurrentCommandId=2;
m_Comm1.put_OutBufferCount(0);
// m_Comm1.put_InBufferCount(0);
m_Comm1.put_Output(COleVariant(Array));
MFC中,怎么用MSComm控件发送一个int(0~255)数据,一定要是8位发送一个数的。要用到什么函数啊!~我用Format("%C",int)将int转成Cstring 再用串口发送,但是每次数大于127就收到全是00了。求各位大虾帮忙下,要怎么才能保证一次发送一个8位int数据?
------解决方案--------------------
给你个例子,函数名可能和你的不一样,那是因为版本可能是不一样的,因此生成MSCOMM类文件是不一样的,但你可以看明白
BYTE m_ReceBuff[30];
void CMy72V300AView::OnCommMscomm1()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
long i = 0,len;
switch (m_Comm1.get_CommEvent())
{
case 2:
//表示接收缓冲区内有字符
{
variant_inp = m_Comm1.get_Input();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (i = 0; i < len; i++)
{
safearray_inp.GetElement(&i, &m_ReceBuff[i]);
}
m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
safearray_inp.Clear();
}
break;
default:
break;
}
}
串口初始化:
view1->m_Comm1.put_CommPort(1); //串口1
view1->m_Comm1.put_InBufferSize(4096); //设置输入缓冲区的大小,Bytes
view1->m_Comm1.put_OutBufferSize(2048); //设置输入缓冲区的大小,Bytes
if(!view1->m_Comm1.get_PortOpen()) //打开串口
{
view1->m_Comm1.put_PortOpen(true);
}
view1->m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
view1->m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
view1->m_Comm1.put_InputMode(1); //设置输入方式为二进制方式
view1->m_Comm1.put_Settings(str); //设置波特率等参数
view1->m_Comm1.put_RThreshold(8); //为8表示有8个字符即引发事件
view1->m_Comm1.put_InputLen(0);
这是发送函数:
int i,Count;
BYTE SendBuff[8];
CByteArray Array;
Count=8;
Array.RemoveAll();
Array.SetSize(Count);
SendBuff[0]=0;
SendBuff[1]=0;
SendBuff[2]=0;
SendBuff[3]=0;
SendBuff[4]=0x55;
SendBuff[5]=0xaa;
SendBuff[6]=0x55;
SendBuff[7]=0xaa;
for(i=0;i<Count;i++)
Array.SetAt(i,SendBuff[i]);
m_CurrentCommandId=2;
m_Comm1.put_OutBufferCount(0);
// m_Comm1.put_InBufferCount(0);
m_Comm1.put_Output(COleVariant(Array));