各位高手,大家好。问个串口的问题,如下:
我使用vs2005中的SerialPort类来实现串口。使用串口调试助手显示:在我打开串口的时候,串口会自动发数据“SL_Open 0x30860 (0 opens)”。在处理DataReceived事件的时候,我使用了MessageBox来显示我收到的数据,在我点击MeaaageBox上的“OK”来关闭MessageBox的时候,串口调试助手收到“+SL_GetStatus 0x30860”的信息。可是我没有发送任何信息。我的代码如下:private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (Send_Flag == true)//判断是否读取数据
{
Send_Flag = false;
serialPort1.Read(lpBuffer, 0, 10);
m_v[0] = Convert.ToUInt32((lpBuffer[0] << 4) + (lpBuffer[1] & 0x0f));
m_v[1] = Convert.ToUInt32((lpBuffer[2] << 4) + (lpBuffer[3] & 0x0f));
m_v[2] = Convert.ToUInt32((lpBuffer[4] << 4) + (lpBuffer[5] & 0x0f));
m_v[3] = Convert.ToUInt32((lpBuffer[6] << 4) + (lpBuffer[7] & 0x0f));
m_v[4] = Convert.ToUInt32((lpBuffer[8] << 4) + (lpBuffer[9] & 0x0f)); m_vol[0] = Convert.ToSingle((float)(m_v[0]) * 5 / 4095);
m_vol[1] = Convert.ToSingle((float)(m_v[1]) * 5 / 4095);
m_vol[2] = Convert.ToSingle((float)(m_v[2]) * 5 / 4095);
m_vol[3] = Convert.ToSingle((float)(m_v[3]) * 5 / 4095);
m_vol[4] = Convert.ToSingle((float)(m_v[4]) * 5 / 4095);
for (int i = 0; i < 5; i++)
{
string str = string.Format("{0:#.000}", m_vol[i]);
MessageBox.Show(str);
}
}
else
{
serialPort1.BaseStream.Flush();
return;
}
}
private void button3_Click(object sender, EventArgs e)//发送数据
{
Send_Flag = true;
if (!serialPort1.IsOpen)
{
serialPort1.Open();
serialPort1.Write(fre, 0, 5);
}
else
{
serialPort1.Write(fre, 0, 5);
}
}
我使用vs2005中的SerialPort类来实现串口。使用串口调试助手显示:在我打开串口的时候,串口会自动发数据“SL_Open 0x30860 (0 opens)”。在处理DataReceived事件的时候,我使用了MessageBox来显示我收到的数据,在我点击MeaaageBox上的“OK”来关闭MessageBox的时候,串口调试助手收到“+SL_GetStatus 0x30860”的信息。可是我没有发送任何信息。我的代码如下:private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (Send_Flag == true)//判断是否读取数据
{
Send_Flag = false;
serialPort1.Read(lpBuffer, 0, 10);
m_v[0] = Convert.ToUInt32((lpBuffer[0] << 4) + (lpBuffer[1] & 0x0f));
m_v[1] = Convert.ToUInt32((lpBuffer[2] << 4) + (lpBuffer[3] & 0x0f));
m_v[2] = Convert.ToUInt32((lpBuffer[4] << 4) + (lpBuffer[5] & 0x0f));
m_v[3] = Convert.ToUInt32((lpBuffer[6] << 4) + (lpBuffer[7] & 0x0f));
m_v[4] = Convert.ToUInt32((lpBuffer[8] << 4) + (lpBuffer[9] & 0x0f)); m_vol[0] = Convert.ToSingle((float)(m_v[0]) * 5 / 4095);
m_vol[1] = Convert.ToSingle((float)(m_v[1]) * 5 / 4095);
m_vol[2] = Convert.ToSingle((float)(m_v[2]) * 5 / 4095);
m_vol[3] = Convert.ToSingle((float)(m_v[3]) * 5 / 4095);
m_vol[4] = Convert.ToSingle((float)(m_v[4]) * 5 / 4095);
for (int i = 0; i < 5; i++)
{
string str = string.Format("{0:#.000}", m_vol[i]);
MessageBox.Show(str);
}
}
else
{
serialPort1.BaseStream.Flush();
return;
}
}
private void button3_Click(object sender, EventArgs e)//发送数据
{
Send_Flag = true;
if (!serialPort1.IsOpen)
{
serialPort1.Open();
serialPort1.Write(fre, 0, 5);
}
else
{
serialPort1.Write(fre, 0, 5);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货