2012-06-25 29 views
0

我正在使用編解碼器,並試圖輪詢RS232串行引腳1(CD高/低)的狀態。 我有我認爲的代碼是正確的,但我第二次猜測自己,並希望有人能夠證實或糾正我。C#串行連接:獲取引腳狀態

根據編解碼器的數據表,引腳1在通話激活時應爲高電平。我懷疑我做錯了什麼,因爲在通話過程中我得到了錯誤(低)的回報。 這是一個Windows窗體應用程序,我使用System.IO.Ports

private void button4_Click(object sender, EventArgs e) 
     { 
      if (!serialPort1.IsOpen) 
      { 
       serialPort1.Open(); 
      } 
      bool test = serialPort1.CDHolding; 
       if (test == false) 
       { 
       MessageBox.Show("Pin low"); 
       } 
       else 
       { 
       MessageBox.Show("Pin high"); 
       } 
    } 

也有一種簡單的方式來展現引腳上的實際電壓?

回答

3

這裏真的沒有太多可以告訴你,你還不知道。是SerialPort.CDHolding「獲取端口的載波檢測線路的狀態。」我首先要驗證(電子)引腳的狀態,然後檢查這個屬性告訴你什麼。我猜這是告訴你正確的狀態。

當談到串口時,我會經常仔細檢查你的pin腳;取決於硬件和連接器,它們可能非常不合標準,並且容易混亂。

您詢問顯示引腳上的電壓。你的意思是計劃嗎?不,那是不可能的。這是一條數字輸入線;一旦它達到UART,它就是一個數字信號,你無法知道模擬電壓。

就像一個附加消息一樣,該屬性實際上只是一個調用Win32 GetCommModemStatus函數的包裝函數,如果設置了位7(十進制數128),則返回true。

+0

這是我需要的確切答案。謝謝 – eatumup

2

您可以使用.PinChanged事件嗎?或者你只需​​要按下按鈕進行輪詢?

+0

意圖是最終用pinchange事件處理這個問題。我做了按鈕來強制檢查。 – eatumup

+1

Hrm,如果你需要跟蹤它,你可以虛擬一個臨時數據庫,並且在pinchange上,用時間和狀態填充一個標誌到DB中,這樣你就知道串口通過什麼事件。 – JohnP