locked
C#serialPort接收問題 RRS feed

  • 問題

  • 我程式是讓C#跟8051控制板做資料傳輸,由C#傳給8051做接收沒問題,但是8051傳給C#我卻收不到,以下是我傳送跟接收的寫法,請大大幫我看一下哪裡有問提。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                serialPort1.Open();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                byte[] xx = new byte[5];
                xx[0] = 0xEE;
                xx[1] = 0xFF;
                xx[2] = 0xCC;
                xx[3] = 0x02;
                xx[4] = 0x13;
                serialPort1.Write(xx,0,5);
            }

            private void button2_Click(object sender, EventArgs e)
            {
                serialPort1.ReceivedBytesThreshold = 1;
                byte[] x = new byte[1];
                x[0] = 0xFF;
                serialPort1.Write(x, 0, 1);
            }
            private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                int bytes = serialPort1.BytesToRead;
                byte[] buffer = new byte[bytes];
                serialPort1.Read(buffer, 0, bytes);
                //textBox1.Text =" ";
                for (int i = 0; i < bytes; i++)
                {
                    textBox1.Text += Convert.ToString(buffer[i],16);
                }
            }
        }
    }

    2010年8月15日 上午 09:12

解答

  • 在 serialPort1_DataReceived 的第一行, 加上 Thread.Sleep(200) 試試

    並請參閱論壇中原有相關於Serialport的討論

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=Serialport


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:46
    2010年8月15日 上午 09:35
    版主

所有回覆

  • 在 serialPort1_DataReceived 的第一行, 加上 Thread.Sleep(200) 試試

    並請參閱論壇中原有相關於Serialport的討論

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=Serialport


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:46
    2010年8月15日 上午 09:35
    版主
  • 在 serialPort1_DataReceived 的第一行, 加上 Thread.Sleep(200) 試試

    並請參閱論壇中原有相關於Serialport的討論

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=Serialport


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    請問一下,為什麼這個案例加上200mS延遲就有用呢?

    我的認知和經驗都是DataReceived事件發生時,資料就要ready好隨時被取走了,不管在MCU或windows下都是如此。

    2015年7月30日 上午 03:01
  • 請問一下,為什麼這個案例加上200mS延遲就有用呢?

    我的認知和經驗都是DataReceived事件發生時,資料就要ready好隨時被取走了,不管在MCU或windows下都是如此。

    (1) 因為你的認知不夠完整, 少考慮到 SerialPort.ReceivedBytesThreshold 屬性, 這個屬性的預設值是1. 意思其實也就是當緩衝區的資料只要大於等於 1 個Byte 就會引發 DataReceived 事件. 如果今天設備傳了 300 Bytes 給電腦, 從觸發了 DataReceived 事件到執行DataReceived 事件委派函式裡的讀取指令的時候, 搞不好只收到 200 Bytes. 如果在讀取前加上適當 (這個適當, 是要測試) 的延遲, 就可以收到完整資料.

    (2) 如果你對很久以前的討論有疑問, 請開個新的問題討論, 把原發問的問題連接貼到新發問. 請勿在原發問下以回覆的方式發問, 因為你這樣的方式會干擾到最近發問問題的順序 


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年7月30日 上午 03:57
    版主
  • 看看這篇:

    [.Net] 資料接收的常識


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年7月30日 下午 12:24
  • (2) 如果你對很久以前的討論有疑問, 請開個新的問題討論, 把原發問的問題連接貼到新發問. 請勿在原發問下以回覆的方式發問, 因為你這樣的方式會干擾到最近發問問題的順序 

    不好意思,這點我還不了解。

    本論壇上的問題排列,不是有"篩選"和"排序"兩項可以選擇嗎?

    而且通常就是因為最近有人回文,所以系統自動把舊文往前排。要是開新的討論,反而問題的脈絡變得難以追蹤。

    我不了解這樣有干擾到什麼?

    2015年7月31日 上午 01:22
  • 我說過你可以貼上舊文連結, 這樣就不會有脈絡的問題, 除非你是原發問者.

    如果每個人都翻以前的文回文, 大部分的使用者一開起來就會是一堆舊文.

    別說排列的功能了, 連簽名檔都常常有人搞不懂.

    註: 論壇潛規則是多年來多位版主管理論壇的共識, 此問題不再複述與討論.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年7月31日 上午 01:54
    版主