当前位置:编程学习 > C#/ASP.NET >>

C#编写与单片机的串口通讯,总是收不到数据,经过调试,执行接受数据事件之前的程序都正常。。。

 private void btnReceive_Click(object sender, EventArgs e)
        {
          if(IsOpen )
          {
              try
              {
                  
                  txtReceive.Text += sp.ReadLine();
               }
              catch(Exception)
              {
                  lblStatus.Text = "读取串口时发僧错误!";
               return;
              }

           }
          else 
          {
              MessageBox.Show("串口未打开!","错误提示");
              return;
           }
        }
IsOpen是串口打开标志位,调试程序时用单步跟踪,串口检测,发数据都很正常,点击“接收”按钮后出现异常,要么显示串口未打开,要么接受框中为空,现在调试时执行完txtReceive.Text += sp.ReadLine();后就弹出Form,但是上面的字体看不清楚,不知道是怎么回事?有没有高手解答一下,串口程序已经困扰我好久了,我是新手,望高手多多提携!
C# --------------------编程问答-------------------- 这种没头没尾的问题, 只有神能回答 --------------------编程问答--------------------  sp.ReadLine();
这个方法没用过,我知道的是,串口里有个委托,当串口接收到数据里,就会触发这个委托,我都是一个从这个委托中取数据的,没发现过问题 --------------------编程问答-------------------- 建议你不要用ReadLine()这个方法,因为他读取的时候是按照2进制还是16进制读取的,所以说这个方法读取的时候是直接从串口读取单片机发送的数据,而不是你Label或者textbox想要的数据类型。
你可以这样试一试
byes[] s = new byes[16];
sp.read(s,0,s.length);
最后把s转换成String型就可以了!
我以前也遇到过这样的问题。 --------------------编程问答-------------------- 串口未打开的问题,这个完全可以自己避免的,只要先打开串口再按这个按钮就可以了。再者,串口未打开的话,也收不到来自下位机的数据。

sp.ReadLine();ReadLine方法是读到一行的末尾,如果下位机没有发送换行符,那你就会读不到数据。
如果下位机发送的数据是已经进行编码的,可以 用txtReceive.Text += sp.ReadExisting();
还有就是可以通过读取字节的方式读取下位机的方式
int len=sp.BytesToRead;
byte[]buffer=new byte[len];
sp.Read(buffer,0,len);
txtReceive.Text+=BitConverter.ToString(buffer);
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,