描述:
通讯过程:
单片机中的数据有8k,两种数据,一个是两个字节,一个是一个三个字节,连续发给计算机,计算机这边一直收。
我看了《vc++串口通信技术与工程实践》,有个例子是:
void CCommWizardDlg::OnOnCommCommctrl()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(bReceive)
{
if(m_Com.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp = m_Com.GetInput(); //读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
//为ColeSafeArray型变量
m_int=len;
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型 //数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
if(m_nInputMode == 2)
strtemp.Format("%02X ",bt); //将字符以十六
//进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时//变//量strtemp存放
m_strReceive = m_strReceive + strtemp; //加入接收//编辑框对应字符串
}
m_strReceive += "\r\n";
}
}
UpdateData(FALSE); //更新编辑框内容
}
其中,m_Com.SetRThreshold(1);//有一个字符引发一个事件
我的问题是:一个字符过来后,产生事件,程序进入OnOnCommCommctrl() 进行处理,这时m_Com.GetInput()得到的字符是多长呢?是一个吗?还是不确定?
解决方案1:
应该是全部的数据长度!
解决方案2: InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。
语法 object.InputLen [ = value]
InputLen 属性语法包括下列部分:
value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。
说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用
应该不是一个,但我认为应该没有关系.有多少收多少.
解决方案4:好像不是一个
解决方案5: 我帮你顶!!!
我顶,顶,顶,,,
我在VB下用过控件,VC下只用过API.楼主实验一下不就知道了吗?干嘛让我们大家跟你一起猜闷呢?:)
解决方案7:是啊,没用过控件哦。。。帮你顶顶吧
解决方案8:帮顶混分
解决方案9: 没用过控件,只用过API。
应该一起接收,接收后通过程序分离。