標籤:blog http os strong 資料 io
C#中串口與Modem的通訊
2007-08-20 09:52643人閱讀評論(8)收藏舉報
最近一段時間,實驗了串口的資料轉送.在C#中,其實有一個很好的類SerialPort使串口間的通訊變得簡單而且好控制.
一.下面給出SerialPort的基本屬性:
serialPort1.PortName = "COM1"; //開啟指定串口的連接埠,也可以是COM2.
serialPort1.BaudRate =9600; //傳輸速率,這是通訊中的一術語,可以查相關資料,一般都是9600.
serialPort1.DataBits =8; //傳輸資料位元,一次傳幾位位元據.
serialPort1.Parity =Parity.None; //校正,它分為三種,一種奇數同位,一種偶校正,還有一種是無校正.
serialPort1.StopBits =StopBits.One; //停止位.
serialPort1.DtrEnable = true; //是在開始時,啟用資料終端.它與Modem上的TR號誌對應,如果開始此燈不亮,則無法傳輸資料,所以在Modem的通訊中,應該加上這句.讓終端裝置準備好.
serialPort1.RtsEnable = true; //這個是請求發送.
serialPort1.Encoding =Encoding.ASCII; //因為資料發送時,是以位元組數組形式發送所以可以定義好編碼.
編碼有:ASCII(只能傳輸英文),Unicode(可以傳輸中英文), UT8(中英文).根據自己的情況而定.
但要說明一點,要是你用write(byte[],intstart,int length)的話,最好自己確定編碼,而不用serialPort1.Encoding= Encoding.ASCII進行設定.如:
當你要傳輸
string strSend="hackenliu";
則先將strSend轉為byte[]形式.如下:
byte[]data= Encoding.ASCII.GetBytes(strSend);
serialport1.write(data,0,data.length); //發送資料了.
在Encoding下,可以選用上面的ASCII,也可以是Uicode,或是UT8.不過,一定要注意,接收雙方的編碼應該一樣.
二.開啟串口:
if (serialPort1.IsOpen)
{
serialPort1.Close();
serialPort1.Open();
}
else
serialPort1.Open();
lblShow.Text = "串口已開啟";
三.發送資料:
serialPort類提供了很多的發送資料函數.有write(param),還有writeLine();
四.接收資料:
添加serialport類的事件
privatevoid serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
當有資料時,它會自動接收的.