按你所说能进if 证明判断是有数据的
你用%c输出是有限制的 很可能是乱码,所以你以为是没数据
你用这2句试试
byte bt=(char)(rxdata+k); //字符型
strtempFormat("%02X ",bt);将字符送入临时变量strtemp存放
再善意的提醒下,你最好不要用else的语句,因为接受一条数据可能经过几次if才收到,而多半时间是没有数据的
以下是一段 我自己用的接收处理代码其中的sp是已经声明好的SERIPORT。
spDataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
//接收串口数据字符串
string watcher = null,send=null;
//串口数据接收事件
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
watcher += spReadExisting();//这句就是接收内容代码,如果只需要接收后面就都不需要了。
{
if (watcherLength % 8 == 0)
{
send = watcher;
switch (watcher)
{
case "I(001,1)":
//dt1Tag = "0";
if(dt1Tag=="0")
{
sign = "d__auto";
dt1IsEnabled = true;
dt_streamwriteIsEnabled = true;
}
//sign = "d__auto";
//dt1IsEnabled = true;
break;
case "I(001,0)":
sign = "d__auto";
spWriteLine("O(01,000,0)");
dt_streamwriteIsEnabled = true;
dt1IsEnabled = false;
break;
case "I(002,1)":
//dt2Tag = "0";
if (dt2Tag == "0")
{
sign = "d__auto";
dt2IsEnabled = true;
dt_streamwriteIsEnabled = true;
}
break;
case "I(002,0)":
sign = "d__auto";
spWriteLine("O(02,000,0)");
dt2IsEnabled = false;
dt_streamwriteIsEnabled = true;
break;
case "I(003,1)":
//dt3Tag = "0";
if (dt3Tag == "0")
{
sign = "d__auto";
dt3IsEnabled = true;
dt_streamwriteIsEnabled = true;
}
break;
case "I(003,0)":
sign = "d__auto";
spWriteLine("O(03,000,0)");
dt3IsEnabled = false;
dt_streamwriteIsEnabled = true;
break;
case "I(004,1)":
//dt4Tag = "0";
if (dt4Tag == "0")
{
sign = "d__auto";
dt4IsEnabled = true;
dt_streamwriteIsEnabled = true;
}
break;
case "I(004,0)":
sign = "d__auto";
spWriteLine("O(04,000,0)");
dt4IsEnabled = false;
dt_streamwriteIsEnabled = true;
break;
case "I(005,1)":
//dt5Tag = "0";
if (dt5Tag == "0")
{
sign = "d__auto";
dt5IsEnabled = true;
dt_streamwriteIsEnabled = true;
}
break;
case "I(005,0)":
sign = "d__auto";
spWriteLine("O(05,000,0)");
dt5IsEnabled = false;
dt_streamwriteIsEnabled = true;
break;
case "I(006,1)":
sign = "d__auto";
dt1Tag = "1";
dt1IsEnabled = false;
dt_streamwriteIsEnabled = true;
break;
case "I(006,0)":
sign = "d__auto";
dt1Tag = "0";
dt_streamwriteIsEnabled = true;
break;
case "I(007,1)":
sign = "d__auto";
dt2IsEnabled = false;
dt_streamwriteIsEnabled = true;
dt2Tag = "1";
break;
case "I(007,0)":
sign = "d__auto";
dt2Tag = "0";
dt_streamwriteIsEnabled = true;
break;
case "I(008,1)":
sign = "d__auto";
dt3IsEnabled = false;
dt_streamwriteIsEnabled = true;
dt3Tag = "1";
break;
case "I(008,0)":
sign = "d__auto";
dt3Tag = "0";
dt_streamwriteIsEnabled = true;
break;
case "I(009,1)":
sign = "d__auto";
; dt_streamwriteIsEnabled = true;
dt4IsEnabled = false;
dt4Tag = "1";
break;
case "I(009,0)":
sign = "d__auto";
dt4Tag = "0";
dt_streamwriteIsEnabled = true;
break;
case "I(010,1)":
sign = "d__auto";
dt5IsEnabled = false;
dt_streamwriteIsEnabled = true;
dt5Tag = "1";
break;
case "I(010,0)":
sign = "d__auto";
dt5Tag = "0";
dt_streamwriteIsEnabled = true;
break;
}
watcher = null;
}
}
}
以上就是关于串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的全部的内容,包括:串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的、windows 应用程序 中的DataReceived事件怎么写啊我想获取串口的数据,接收数据那块不会写。。。 谢、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)