在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串口通訊的術(shù)語解釋

jf_78858299 ? 來源:工控PLC技術(shù) ? 作者:工控PLC技術(shù) ? 2023-04-23 11:14 ? 次閱讀

關(guān)于串口通訊的術(shù)語解釋

最近在研究串口通訊,其中有幾個(gè)比較重要的概念,RS-232這種適配于上位機(jī)和PC端進(jìn)行連接,RS-232只限于PC串口和設(shè)備間點(diǎn)對(duì)點(diǎn)的通信。它很簡(jiǎn)單的就可以進(jìn)行連接,由于串口通訊是異步的,也就是說你可以同時(shí)向兩端或者更多進(jìn)行數(shù)據(jù)發(fā)送,它們之間的傳輸數(shù)據(jù)類型是byte,串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須匹配。接下來先解釋一下幾個(gè)關(guān)于串口通訊的術(shù)語:

第一個(gè)波特率,這個(gè)東西在不同領(lǐng)域都有涉及,在串口通訊中兩個(gè)串口之間通訊之間的信號(hào)單元叫做碼元,每分鐘傳遞的信號(hào)(碼元)也就是波特率;

第二個(gè)數(shù)據(jù)位、停止位:這個(gè)聽名字就知道是啥意思了,在傳遞數(shù)據(jù)過程之前,機(jī)器會(huì)識(shí)別你的數(shù)據(jù)是個(gè)啥,然后根據(jù)這個(gè)類型,去調(diào)整不同的起始位、停止位。

第三個(gè)奇偶校驗(yàn):就是想知道你這個(gè)數(shù)據(jù)有多大,多長(zhǎng),因?yàn)閭鬏敹际? 和 0 ,具體校驗(yàn)方法如下:

奇校驗(yàn):就是讓原有數(shù)據(jù)序列中(包括你要加上的一位)1的個(gè)數(shù)為奇數(shù) ---- 1000110(0)你必須添0這樣原來有3個(gè)1已經(jīng)是奇數(shù)了所以你添上0之后1的個(gè)數(shù)還是奇數(shù)個(gè)。

偶校驗(yàn):就是讓原有數(shù)據(jù)序列中(包括你要加上的一位)1的個(gè)數(shù)為偶數(shù) ---- 1000110(1)你就必須加1了這樣原來有3個(gè)1要想1的個(gè)數(shù)為偶數(shù)就只能添1了。

串口模擬工具免費(fèi)下載

如果想要在C#中玩轉(zhuǎn)串口通訊或者模擬串口,你必須先搞個(gè)硬件,當(dāng)然我們是在模擬,那你就弄個(gè)模擬的工具唄,

安裝好了之后,桌面會(huì)有圖標(biāo),然后打開,添加一個(gè)串口,具體請(qǐng)看下圖:

圖片

串口通訊代碼的編寫

下面我們就開始代碼的實(shí)現(xiàn)了,創(chuàng)建一個(gè).NET Fwk的 Winform 項(xiàng)目,然后開始我們的代碼:

SerialPort sp1 = new SerialPort();
public Form1()
        {
            InitializeComponent();
        }


private void Form1_Load(object sender, EventArgs e)
        {
string[] strCom = SerialPort.GetPortNames();
if (strCom == null)
            {
                MessageBox.Show("本機(jī)沒有串口!", "Error");
return;
            }
foreach (string com in System.IO.Ports.SerialPort.GetPortNames())
            {
                cbCom.Items.Add(com);
            }
            cbCom.SelectedIndex = 0;
            sp1.BaudRate = 9600;
            Control.CheckForIllegalCrossThreadCalls = false;
            sp1.DataReceived += Sp1_DataReceived;


            sp1.DtrEnable = true;
            sp1.RtsEnable = true;
            sp1.ReadTimeout = 1000;
            sp1.Close();
        }

在窗體加載中,我們嘗試獲取了本機(jī)的所有串口,通過 SerialPort.GetPortNames() 方法,會(huì)返回一個(gè)字符串?dāng)?shù)組,如果沒有就返回null,在其中,我們還設(shè)置了波特率,通過SerialPort類下的 DataReceived 方法,來監(jiān)聽我們的數(shù)據(jù)回傳,還啟用了DTR\\DTS請(qǐng)求方式,通過 ReadTimeOut 對(duì)數(shù)據(jù)讀取超時(shí)進(jìn)行了控制。

既然我們監(jiān)聽了數(shù)據(jù)回傳,那么在這個(gè)方法中,通過 ReadTimeOut.Read 進(jìn)行了讀取,直接從0到最后,截取完畢。

private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
if (sp1.IsOpen)     //判斷是否打開串口
            {
//輸出當(dāng)前時(shí)間
                DateTime dt = DateTime.Now;
                txtReceived.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\\r\\n";
                Byte[] receivedData = new Byte[sp1.BytesToRead];        //創(chuàng)建接收字節(jié)數(shù)組
                sp1.Read(receivedData, 0, receivedData.Length);         //讀取數(shù)據(jù)
                AddContent(new UTF8Encoding().GetString(receivedData));
            }
else
            {
                MessageBox.Show("請(qǐng)打開某個(gè)串口", "錯(cuò)誤提示");
            }
        }


private void AddContent(string v)
        {
this.BeginInvoke(new MethodInvoker(delegate
            {
                txtReceived.AppendText(v);
                txtReceived.AppendText("\\r\\n");
            }));
        }

當(dāng)然以上的操作都必須在打開串口之后才能進(jìn)行,打開串口這個(gè)還是比較費(fèi)勁的,因?yàn)橐O(shè)置各種參數(shù),也就是我剛才說的那幾個(gè)概念,如果不對(duì),你讓其他的端口來訪問就找不到了。

private void button2_Click(object sender, EventArgs e)
        {
if (!sp1.IsOpen)
            {
try
                { 
string serialName = cbCom.SelectedItem.ToString();
                    sp1.PortName = serialName;
string strBaudRate = cbBaudRate.Text;
string strDateBits = cbDataBits.Text;
string strStopBits = cbStop.Text;
                    Int32 iBaudRate = Convert.ToInt32(strBaudRate);
                    Int32 iDateBits = Convert.ToInt32(strDateBits);
                    sp1.BaudRate = iBaudRate;       //波特率
                    sp1.DataBits = iDateBits;       //數(shù)據(jù)位
switch (cbStop.Text)            //停止位
                    {
case "1":
                            sp1.StopBits = StopBits.One;
break;
case "1.5":
                            sp1.StopBits = StopBits.OnePointFive;
break;
case "2":
                            sp1.StopBits = StopBits.Two;
break;
default:
                            MessageBox.Show("Error:參數(shù)不正確!", "Error");
break;
                    }
switch (cbCheck.Text)             //校驗(yàn)位
                    {
case "無":
                            sp1.Parity = Parity.None;
break;
case "奇校驗(yàn)":
                            sp1.Parity = Parity.Odd;
break;
case "偶校驗(yàn)":
                            sp1.Parity = Parity.Even;
break;
default:
                            MessageBox.Show("Error:參數(shù)不正確!", "Error");
break;
                    }


if (sp1.IsOpen == true)
                    {
                        sp1.Close();
                    }


//設(shè)置必要控件不可用
                    cbCom.Enabled = false;
                    cbBaudRate.Enabled = false;
                    cbDataBits.Enabled = false;
                    cbStop.Enabled = false;
                    cbCheck.Enabled = false;
                    sp1.Open();     //打開串口
                    button2.Text = "關(guān)閉串口";
                }
catch (System.Exception ex)
                {
                    MessageBox.Show("Error:" + ex.Message, "Error");
return;
                }
            }
else
            {
                cbCom.Enabled = true;
                cbBaudRate.Enabled = true;
                cbDataBits.Enabled = true;
                cbStop.Enabled = true;
                cbCheck.Enabled = true;
                sp1.Close();                    //關(guān)閉串口
                button2.Text = "打開串口";
            }
        }

最后也就是發(fā)送了,剛才我們接收使用Read,發(fā)送也當(dāng)然很簡(jiǎn)單,是Write...

private void button1_Click(object sender, EventArgs e)
        {
byte[] sendData = null;
if (!sp1.IsOpen) //如果沒打開
            {
                MessageBox.Show("請(qǐng)先打開串口!", "Error");
return;
            }
            String strSend = txtSendStr.Text;
try
            {
                sendData = Encoding.UTF8.GetBytes(txtSendStr.Text.Trim());
                sp1.Write(sendData, 0, sendData.Length);
            }
catch (Exception ex)
            {
                MessageBox.Show("Error:" + ex.Message, "Error");
            }


        }
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RS-232
    +關(guān)注

    關(guān)注

    0

    文章

    392

    瀏覽量

    49972
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1627

    瀏覽量

    55644
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    945

    瀏覽量

    54934
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LED燈帶常用規(guī)格術(shù)語解釋

    下面就把LED燈帶常用的5種規(guī)格術(shù)語進(jìn)行一下解釋和分享,同時(shí)也供采購朋友們參考:
    發(fā)表于 04-20 15:11 ?1.4w次閱讀

    FPGA 英文術(shù)語解釋

    FPGA 英文術(shù)語解釋,對(duì)初學(xué)者很有裨益。
    發(fā)表于 06-14 23:28

    光電開關(guān)的分類和術(shù)語解釋

    光電開關(guān)介紹及術(shù)語解釋
    發(fā)表于 05-13 09:56

    電子類縮略語-專業(yè)術(shù)語解釋

    電子類縮略語及專業(yè)術(shù)語解釋
    發(fā)表于 07-05 15:48 ?0次下載

    紅外線光電開關(guān)術(shù)語解釋

    紅外線光電開關(guān)術(shù)語解釋
    發(fā)表于 06-30 19:42 ?1189次閱讀

    Allegro做padstack時(shí)的術(shù)語解釋

    Allegro做padstack時(shí)的術(shù)語解釋 做padstack的一些問題:在本圖片中的 regular pad , thermal relief , anti pad 在做padstack中的具體區(qū)別是什么麻煩大嚇幫我詳細(xì)解說一下
    發(fā)表于 03-22 16:39 ?3301次閱讀
    Allegro做padstack時(shí)的<b class='flag-5'>術(shù)語</b><b class='flag-5'>解釋</b>

    手機(jī)常用名詞術(shù)語解釋

    手機(jī)常用名詞術(shù)語解釋 從結(jié)構(gòu)類型上來看,主要有如下五種:  直板式 Candybar 折疊式 Clamshell 滑蓋
    發(fā)表于 06-21 22:58 ?3110次閱讀

    MP3術(shù)語解釋

    MP3術(shù)語解釋 時(shí)下許多人都擁有了自己的MP3隨身聽,但是面對(duì)眼花繚亂的MP3術(shù)語眾多MP3小蟲們還是不知所措。也許在以后購買MP3時(shí)JP們
    發(fā)表于 02-02 14:07 ?857次閱讀

    軟板(FPC)相關(guān)術(shù)語解釋

    軟板(FPC)相關(guān)術(shù)語解釋 1、Access Hole 露出孔(穿露孔,露底孔)常指軟板外表的保護(hù)層 Coverlay(須先沖切出的穿露孔),用以貼合在軟板線路表面做
    發(fā)表于 02-21 10:29 ?4342次閱讀

    LED專業(yè)術(shù)語解釋

    LED專業(yè)術(shù)語解釋VF、IV、WL、IR 解釋及光通量換算關(guān)系,LED的Vf值是什么意思?它的大小對(duì)LED有什么影響?
    發(fā)表于 01-06 15:34 ?5557次閱讀

    太陽能光伏術(shù)語和名詞解釋(齊全)

    電子發(fā)燒友為大家整理了相關(guān)的太陽能光伏術(shù)語和名詞解釋(齊全)
    發(fā)表于 04-23 11:23 ?8999次閱讀

    LED專業(yè)術(shù)語解釋

    LED專業(yè)術(shù)語解釋,LED燈飾入門知識(shí)。
    發(fā)表于 03-04 14:15 ?0次下載

    科普:示波器常用的術(shù)語解釋

    科普:示波器常用的術(shù)語解釋
    發(fā)表于 07-15 18:55 ?3次下載
    科普:示波器常用的<b class='flag-5'>術(shù)語</b><b class='flag-5'>解釋</b>

    關(guān)于串口通訊術(shù)語解釋及代碼的編寫

    在窗體加載中,我們嘗試獲取了本機(jī)的所有串口,通過 SerialPort.GetPortNames() 方法,會(huì)返回一個(gè)字符串?dāng)?shù)組,如果沒有就返回null,在其中,我們還設(shè)置了波特率,通過SerialPort類下的 DataReceived 方法
    發(fā)表于 02-22 11:42 ?602次閱讀

    電磁兼容基本術(shù)語和定義的應(yīng)用與解釋.zip

    電磁兼容基本術(shù)語和定義的應(yīng)用與解釋
    發(fā)表于 12-30 09:21 ?2次下載
    主站蜘蛛池模板: 天天爽夜夜爽免费看| 夜夜骚视频| 日本巨黄视频| 久久精品亚洲精品国产欧美| 亚洲精品香蕉婷婷在线观看| 好大好硬好爽免费视频| 欧美xxxx性高清| 视频一区二区三区在线观看| 四虎永久免费地ww4hu57| 手机免费在线视频| 奇米影视欧美| 视频在线免费看| 清朝荒淫牲艳史在线播放| 伊人婷婷涩六月丁香七月| 男男浪荡性受高hnp肉| 国产黄视频在线观看| 欧美一二三区在线| 性欧美日本| 女人张开腿让男人桶视频免费大全 | 男人天堂网在线观看| 成人丁香婷婷| 天堂中文资源在线地址| 6080国产午夜精品| 97人摸人人澡人人人超一碰| h网站免费| 69pao强力打造免费高清| 99热久久久久久久免费观看| 四虎黄色影院| 久操天堂| 国产欧美高清| 天天插天天干天天射| 4399一级成人毛片| 99久久成人国产精品免费 | 香蕉视频啪啪| 精品在线视频一区| 天天碰天天干| 91天天操| 婷婷午夜影院| 日韩爽片| 国产1区二区| 综合精品视频|