关于串口操作,

凋零的老树 2008-07-15 02:33:58
int byteCount = serialPort1.Read(bytesData, 0, bytesData.Length);

读串口数据时候就死了,如果在打开串口后再加上一句 _serialPort1.Write("0"); 就可以能过去,说白了往串口写东西再读就行,不写东西,直接读就死机了,这是为什么啊?能不能先判断啊?怎么判断了?
...全文
160 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
txf123 2008-08-01
  • 打赏
  • 举报
回复
我有串口通信的例子 QQ:619121698
txf123 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 51Crack 的回复:]
if (serialPort1.BytesToRead>0)
变量=serialPort1.ReadExisting
[/Quote]

别的程序发给你,你程序卡死,你延迟一下试试
凋零的老树 2008-07-16
  • 打赏
  • 举报
回复
还是不行哦,if (serialPort1.BytesToRead>0)
到这一句就死了.快疯了
shadowgreen 2008-07-16
  • 打赏
  • 举报
回复
我也遇到和LZ一样的问题
计算机和下位机通信,如果不向串口写数据,就读不出数据···
串口有时读不出来可能是因为时间太短
凋零的老树 2008-07-16
  • 打赏
  • 举报
回复
你有没有添加serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);

这个是添加事件时自动添加的啊?
凋零的老树 2008-07-16
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{

SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
sp.Open();
sp.WriteLine(textBox1.Text);
textBox2.Text = sp.ReadLine();
sp.Close();
}

我一执行这个就死这是为什么啊?
JeffChung 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kongxiangli 的回复:]
我用别的程序com1上发数据库,我的程序总是没有反映了,奇怪了
[/Quote]

如果你是只有一个com口,你另外的程序在上面发数据,占用了那个串口,其他的程序都用不了啦
要有两个串口(有一分多的串口线)拿交叉线对接连接,可以做自发自收的测试
wdgphc 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kongxiangli 的回复:]
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

Int32 iByteCount;
byte[] buffer;
iByteCount = serialPort1.BytesToRead;
buffer = new byte[iByteCount];

serialPort1.Read(buffer, 0, buffer.Length);

label1.Text = buffer.ToString();
}

死活不…
[/Quote]

你有没有添加serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
aaajedll 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kongxiangli 的回复:]
因为你串口没有数据过来,serialPort1.Read就一直在等待中,就象死掉了.所以一般都把这种写到serialPort1.DataArrived事件中比较好.


哦,谢谢
[/Quote]
凋零的老树 2008-07-16
  • 打赏
  • 举报
回复
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

Int32 iByteCount;
byte[] buffer;
iByteCount = serialPort1.BytesToRead;
buffer = new byte[iByteCount];

serialPort1.Read(buffer, 0, buffer.Length);

label1.Text = buffer.ToString();
}

死活不触发了???

我用别的程序com1上发数据库,我的程序总是没有反映了,奇怪了
凋零的老树 2008-07-16
  • 打赏
  • 举报
回复
因为你串口没有数据过来,serialPort1.Read就一直在等待中,就象死掉了.所以一般都把这种写到serialPort1.DataArrived事件中比较好.


哦,谢谢
wdgphc 2008-07-16
  • 打赏
  • 举报
回复
因为你串口没有数据过来,serialPort1.Read就一直在等待中,就象死掉了.所以一般都把这种写到serialPort1.DataArrived事件中比较好.
Kstar 2008-07-16
  • 打赏
  • 举报
回复
我就这样读的从来没有死过,是不是硬件有什么问题
Int32 iByteCount;
byte[] buffer;
iByteCount = m_CommPort.BytesToRead
buffer = new byte[iByteCount];
m_CommPort.Read(buffer, 0, buffer.Length);
凋零的老树 2008-07-15
  • 打赏
  • 举报
回复
好象不行哦
baihe_591 2008-07-15
  • 打赏
  • 举报
回复
serialPort1.BytesToRead
51Crack 2008-07-15
  • 打赏
  • 举报
回复
if (serialPort1.BytesToRead>0)
变量=serialPort1.ReadExisting
suiqirui19872005 2008-07-15
  • 打赏
  • 举报
回复

110,597

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧