本人是做硬件的,最近由于“业务需要”,最近在做一个WINCE5.0下的串口通信程序。程序是参考这个程序http://www.codeproject.com/KB/cs/serialcommunication.aspx写的。今天终于能发送16进制数据了(至少我在WINCE下向PC发送时,串口调试助手能接收到数据),但是我用它向单片机(C8051F330)发送数据时,单片机却不能正常接收到数据。偶尔接收到的数据也不是想要的。
我的发送16进制数据的代码如下:
if (this.cB_Hex.Checked == true)
{
string s = textBox.Text.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
//sp.Write(buffer, 0, textBox.Text.Length / 2);//发送数据
sp.Write(buffer, 0,s.Length / 2);//发送数据
}
忘各位大大不吝指点。还有一个问题就是:它(WINCE下的串口程序)能向PC发送数据,但是接收不到PC发来的数据?(能接收,只是不能在文本框里显示)。再次感谢!!!
我的发送16进制数据的代码如下:
if (this.cB_Hex.Checked == true)
{
string s = textBox.Text.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
//sp.Write(buffer, 0, textBox.Text.Length / 2);//发送数据
sp.Write(buffer, 0,s.Length / 2);//发送数据
}
忘各位大大不吝指点。还有一个问题就是:它(WINCE下的串口程序)能向PC发送数据,但是接收不到PC发来的数据?(能接收,只是不能在文本框里显示)。再次感谢!!!
解决方案 »
- 【紧急求助】状态机,数据包判断 ,byte
- 急,一个简单的问题,按键事件那里写错了!!
- 关于C#图形滚动
- 如何创建自己的AccessDataSource或SqlDataSource对像?
- 如何得出两个日期间 周 的开始日期、结束日期
- listview 控件如何获得输入焦点
- c#.net的一点问题,第一次发c#帖子:::
- c#datagridview绑定datatable常见问题汇总及解答
- DevExpress GridControl添加数据问题
- 求C#或C++高手,帮我把几个函数转换成C#(高分求解)
- [新手求助]SQL里如何设置一个表的某列来自另一个表的某列?
- 请教高手,多个相同的exe进程访问同一个文件时,如何实现排他性???
你需要看一下serialport类的一个事件:DataReceived和一个属性:ReceivedBytesThreshold 关于发送的问题,如果你是在wince上做调试,你可能需要以下的几个方法: #region 字节数组和字符串的相互转换
/// <summary>
/// 字节数组转换十六进制字符串(不带空格)
/// </summary>
/// <param name="data">要转换的字节数组</param>
/// <returns>转换后的字符串</returns>
public static string ByteArrayToHexStringNoBlank(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
//sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
return sb.ToString().ToUpper();
}
/// <summary>
/// 字节数组转换十六进制字符串(不带空格)
/// </summary>
/// <param name="data">要转换的字节数组</param>
/// <param name="_length">要转换的长度</param>
/// <returns>转换后的字符串</returns>
public static string ByteArrayToHexStringNoBlank(byte[] data, int _length)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
int i = 0;
foreach (byte b in data)
{
if (i > data.Length)
break;
if (i >= _length)
break;
//sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
i++;
}
return sb.ToString().ToUpper();
}
//
/// <summary>
/// 十六进制字符串转换字节数组(自动去掉空格)
/// </summary>
/// <param name="s">要转换的字符串</param>
/// <returns>转换后的字节数组</returns>
public static byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
#endregion