亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于51單片機(jī)的串行通信協(xié)議的實(shí)現(xiàn)

        2009-10-26 09:35:10曾增烽
        新媒體研究 2009年13期
        關(guān)鍵詞:下位通信協(xié)議字節(jié)

        曾增烽 劉 浩 李 雪

        [摘要]首先分析數(shù)據(jù)通信協(xié)議數(shù)據(jù)包的一般格式,然后采用有限狀態(tài)機(jī)的算法實(shí)現(xiàn)單片機(jī)與上位機(jī)之間的串行通信協(xié)議,包含上下位機(jī)的數(shù)據(jù)發(fā)送接受和協(xié)議的解析實(shí)現(xiàn),并給出具體的實(shí)現(xiàn)方法。

        [關(guān)鍵詞]51單片機(jī)串口通信協(xié)議上位機(jī)下位機(jī)

        中圖分類號(hào):TN91文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0710022-01

        一、引言

        數(shù)據(jù)協(xié)議是建立在物理層之上的通信數(shù)據(jù)包格式。所謂通信的物理層就是指我們通常所用到的RS232、RS485、紅外、光纖、無(wú)線等等通信方式。在這個(gè)層面上,底層軟件提供兩個(gè)基本的操作函數(shù):發(fā)送一個(gè)字節(jié)數(shù)據(jù)、接收一個(gè)字節(jié)數(shù)據(jù)。所有的數(shù)據(jù)協(xié)議全部建立在這兩個(gè)操作方法之上。通信中的數(shù)據(jù)往往以數(shù)據(jù)包的形式進(jìn)行傳送的,我們把這樣的一個(gè)數(shù)據(jù)包稱作為一幀數(shù)據(jù)。類似于網(wǎng)絡(luò)通信中的TCP/IP協(xié)議一般,比較可靠的通信協(xié)議往往包含有以下幾個(gè)組成部分:幀頭、地址信息、數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)塊、校驗(yàn)碼、幀尾[1][2]?,F(xiàn)在大部分的儀器設(shè)備都要求能過(guò)通過(guò)上位機(jī)軟件來(lái)操作,這樣方便調(diào)試,利于操作。其中就涉及到通信的過(guò)程,本文給出了串行通信協(xié)議的具體實(shí)現(xiàn),總結(jié)出了通信程序的通用寫(xiě)法,包括上位機(jī)端和下位機(jī)端等。

        二、上位機(jī)和下位機(jī)中的數(shù)據(jù)發(fā)送

        物理通信層中提供了兩個(gè)基本的操作函數(shù),發(fā)送一個(gè)字節(jié)數(shù)據(jù)則為數(shù)據(jù)發(fā)送的基礎(chǔ)。數(shù)據(jù)包的發(fā)送即把數(shù)據(jù)包中的左右字節(jié)按照順序一個(gè)一個(gè)的發(fā)送[3]。在單片機(jī)系統(tǒng)中,比較常用的方法是直接調(diào)用串口發(fā)送單個(gè)字節(jié)數(shù)據(jù)的函數(shù)。另外一種方法是采用中斷發(fā)送的方式,所有需要發(fā)送的數(shù)據(jù)被送入一個(gè)緩沖區(qū),利用發(fā)送中斷將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去[4]。對(duì)于51系列單片機(jī),比較傾向于采用直接發(fā)送的方式,采用中斷發(fā)送的方式比較占用RAM資源,而且對(duì)比直接發(fā)送來(lái)說(shuō)也沒(méi)有太多的優(yōu)點(diǎn)。以下是51系列單片機(jī)中發(fā)送單個(gè)字節(jié)的函數(shù)[5]。

        void SendByte(unsigned char ch){

        SBUF = ch;

        while(TI ==0);TI = 0;

        }

        上位機(jī)中關(guān)于串口通信的方式也有多種,這種方式不是指數(shù)據(jù)有沒(méi)有緩沖的問(wèn)題,而是操作串口的方式不同,因?yàn)镻C上數(shù)據(jù)發(fā)送基本上都會(huì)被緩沖后再發(fā)送。對(duì)于編程來(lái)說(shuō)操作串口有三種方式:1.使用windows系統(tǒng)中自帶的串口通信控件,這種方式使用起來(lái)比較簡(jiǎn)單,需要注意的是接收時(shí)的阻塞處理和線程機(jī)制。2.使用系統(tǒng)的API直接進(jìn)行串口數(shù)據(jù)的讀取,在windows和linux系統(tǒng)中,設(shè)備被虛擬為文件,只需要利用系統(tǒng)提供的API函數(shù)即可進(jìn)行串口數(shù)據(jù)的發(fā)送和讀取。3.使用串口類進(jìn)行串口操作。在此只介紹windows環(huán)境下利用串口類編程的方式。CSerialPort是比較好用的串口類。它提供如下的串口操作方法:

        void WriteToPort(char* string, int len);

        串口初始化成功后,調(diào)用此函數(shù)即可向串口發(fā)送數(shù)據(jù)。為了避免串口緩沖所帶來(lái)的延時(shí),可以開(kāi)啟串口的沖刷機(jī)制。

        三、下位機(jī)中的數(shù)據(jù)接收和協(xié)議解析

        下位機(jī)接收數(shù)據(jù)也有兩種方式:1.等待接收,處理器一直查詢串口狀態(tài),來(lái)判斷是否接收到數(shù)據(jù)。2.中斷接收。如果協(xié)議比較簡(jiǎn)單,整個(gè)系統(tǒng)只是處理一些簡(jiǎn)單的命令,那么可以直接把數(shù)據(jù)包的解析過(guò)程放入到中斷處理函數(shù)中,當(dāng)收到正確的數(shù)據(jù)包的時(shí)候,置位相應(yīng)的標(biāo)志,在主程序中再對(duì)命令進(jìn)行處理[6]。以下給出具體的實(shí)例。在這個(gè)系統(tǒng)中,串口的命令非常簡(jiǎn)單。所有的協(xié)議全部在串口中斷中進(jìn)行。數(shù)據(jù)包的格式如下:

        0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D

        其中0x55,0xAA,0x7E為數(shù)據(jù)幀的幀頭,0x0D為幀尾,0x12為設(shè)備的目的地址,0xF0為源地址,0x02為數(shù)據(jù)長(zhǎng)度,后面接著兩個(gè)數(shù)據(jù)0x23,0x45,從目的地址開(kāi)始結(jié)算累加、異或校驗(yàn)和,到數(shù)據(jù)的最后一位結(jié)束。協(xié)議解析的目的,首先判斷數(shù)據(jù)包的完整性,正確性,然后提取數(shù)據(jù)類型,數(shù)據(jù)等數(shù)據(jù),存放起來(lái)用于主程序處理。

        此過(guò)程中,使用了一個(gè)變量state_machine作為有限協(xié)議狀態(tài)機(jī)的轉(zhuǎn)換狀態(tài),用于確定當(dāng)前字節(jié)處于一幀數(shù)據(jù)中的那個(gè)部位,同時(shí)在接收過(guò)程中自動(dòng)對(duì)接收數(shù)據(jù)進(jìn)行校驗(yàn)和處理,在數(shù)據(jù)包接收完的同時(shí)也進(jìn)行了校驗(yàn)的比較。因此當(dāng)幀尾結(jié)束符接收到的時(shí)候,則表示一幀數(shù)據(jù)已經(jīng)接收完畢,并且通過(guò)了校驗(yàn),關(guān)鍵數(shù)據(jù)也保存到了緩沖去中。主程序即可通過(guò)retval的標(biāo)志位來(lái)進(jìn)行協(xié)議的解析處理。接收過(guò)程中,只要哪一步收到的數(shù)據(jù)不是預(yù)期值,則直接將狀態(tài)機(jī)復(fù)位,用于下一幀數(shù)據(jù)的判斷,因此系統(tǒng)出現(xiàn)狀態(tài)死鎖的情況非常少,系統(tǒng)比較穩(wěn)定,如果出現(xiàn)丟失數(shù)據(jù)包的情況也可由上位機(jī)進(jìn)行命令的補(bǔ)發(fā)。對(duì)于主程序中進(jìn)行協(xié)議處理的過(guò)程與此類似,主程序循環(huán)中不斷的讀取串口緩沖區(qū)的數(shù)據(jù),此數(shù)據(jù)即參與到主循環(huán)中的協(xié)議處理過(guò)程中。

        四、上位機(jī)中的數(shù)據(jù)接收和命令處理

        上位機(jī)中數(shù)據(jù)接收的過(guò)程與下位機(jī)可以做到完全一致,不過(guò)針對(duì)不同的串口操作方法有所不同。對(duì)于阻塞式的串口讀函數(shù),例如直接進(jìn)行API操作或者調(diào)用windows的串口通信控件,最好能夠開(kāi)啟一個(gè)線程專門用于監(jiān)視串口的數(shù)據(jù)接收,每接收到一個(gè)數(shù)據(jù)可以向系統(tǒng)發(fā)送一個(gè)消息。CSerialPo

        Rt打開(kāi)串口后開(kāi)啟線程監(jiān)視串口的數(shù)據(jù)接收,將接收的數(shù)據(jù)保存到緩沖區(qū),并向父進(jìn)程發(fā)送接收數(shù)據(jù)的消息,數(shù)據(jù)將隨消息一起發(fā)送到父進(jìn)程。父進(jìn)程中開(kāi)啟此消息的處理函數(shù),從中獲取串口數(shù)據(jù)后就可以進(jìn)行數(shù)據(jù)接收和命令處理。

        五、總結(jié)

        本文給出的是串口通信系統(tǒng)的基本雛形,雖然簡(jiǎn)單,但是可行。實(shí)際的通信系統(tǒng)中協(xié)議比這個(gè)要復(fù)雜,而且涉及到數(shù)據(jù)包響應(yīng)、命令錯(cuò)誤、延時(shí)等等一系列的問(wèn)題,在這樣的一個(gè)基礎(chǔ)上可以克服這些困難并且實(shí)現(xiàn)出較為穩(wěn)定可靠的系統(tǒng)。在實(shí)際系統(tǒng)中,問(wèn)題會(huì)出現(xiàn)在任何地方,有些特別的問(wèn)題需要特別的方法才能解決。如何實(shí)現(xiàn)一個(gè)強(qiáng)壯的通信系統(tǒng)還需要繼續(xù)深入的研究。

        參考文獻(xiàn):

        [1]J.Satran,"Internet Protocol Small Computer System Interface (iSCSI) Cyclic Redundancy.Check (CRC)/Checksum Considerations",RFC 3385,2002.

        [2]ITU-T V.41,"Code-independent error-control system",1989.

        [3]郭梯云,數(shù)據(jù)傳輸(修訂本)[M].人民郵電出版社,1998.

        [4]顧上杰、薛質(zhì),計(jì)算機(jī)通信網(wǎng)基礎(chǔ)[M].電子工業(yè)出版,2005.7.

        [5]丁元杰,單片微機(jī)原理及應(yīng)用[M].機(jī)械工業(yè)出版社,2003.7.

        [6]馮博鑒,計(jì)算機(jī)原理與接口應(yīng)用技術(shù)[M].清華大學(xué)出版社,2004.8.

        猜你喜歡
        下位通信協(xié)議字節(jié)
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
        發(fā)射機(jī)房監(jiān)控系統(tǒng)之下位機(jī)
        基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計(jì)
        簡(jiǎn)談MC7字節(jié)碼
        景洪電廠監(jiān)控系統(tǒng)下位機(jī)數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
        基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計(jì)與研究
        圍觀黨“下位”,吐槽帝“登基”
        基于NS-3的PLC多頻通信協(xié)議仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
        CAN總線并發(fā)通信時(shí)下位機(jī)應(yīng)用軟件設(shè)計(jì)
        亚洲国产成人Av毛片大全| 国产亚洲精品久久久久5区| 亚洲自偷自拍另类第1页| 国产乱国产乱老熟300部视频| 高潮毛片无遮挡高清免费| 国产成人福利在线视频不卡| 人妻少妇粉嫩av专区一| 日本一区二区视频高清| 国产精品无码无卡无需播放器| 熟女熟妇伦av网站| 九九九影院| 亚洲一区日本一区二区| 青青草原综合久久大伊人精品| 亚洲色偷偷偷综合网| 国产黄在线观看免费观看不卡| 亚洲国产A∨无码影院| 亚洲国产精品美女久久久| 男女上床免费视频网站| 亚洲第一狼人天堂网亚洲av| 九九精品国产亚洲av日韩| 国产精品美女久久久久久大全| 亚洲av乱码一区二区三区女同| 国产美腿丝袜一区二区| 色综合久久中文娱乐网| 国产精品午夜无码av天美传媒| 99精品视频69v精品视频免费| 亚洲一区二区三区在线激情| 人妻少妇哀求别拔出来| 人妻av鲁丝一区二区三区| 无码片久久久天堂中文字幕| 亚洲处破女av一区二区| 国内自拍愉拍免费观看| 亚洲国产精品ⅴa在线观看| 国产亚洲精久久久久久无码苍井空| 日本在线一区二区三区观看| 亚洲国产中文字幕精品| 成年女人黄小视频| 伊伊人成亚洲综合人网7777| 另类人妖在线观看一区二区| 亚洲av成人av三上悠亚| 亚洲精品无码久久久久av老牛|