娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月10日(星期二)

2020年06月10日 | 51單片機實現通訊協議的串口通訊編程

發布者:碼夢小子 來源: elecfans關鍵字:51單片機  通訊協議  的串口通訊 手機看文章 掃描二維碼
隨時隨地手機看文章

我們以51單片機為例。51中一般針對串口通訊編程,通常采取中斷接受查詢發送的方式。中斷函數在接受數據到達時被重復調用,其實是個重復入棧的過程,所以不宜將函數寫的太長,函數太長一般會導致棧太深占用系統資源,二是處理時間過長,可能導致通訊出錯。為了防止在處理數據過程中不受干擾,通常在處理接受數據前關閉中斷,處理完后再開。


通常的的編程方式如下:


static void UartInterruptService(void) interrupt 4

{

ES = 0;

RI = 0;

uart_process(SBUF);

ES=1;

}


下面重點介紹數據處理函數 uart_process(SBUF);

其實很多時候,對于通訊傳輸的數據處理才是關鍵,尤其對于設計通訊協議而言。筆者在剛剛做的一個系統上就碰到這樣的問題,當系統龐大了,資源十分有限的情況下,數據處理一旦占用資源太多,效率太低將導致系統崩潰而無法運行。


到了這里,很多工程師可能會考慮開個大的緩沖區FIFO將接收到的數據保存在緩沖區,然后對其進行解析、判斷進行下一步程序編寫,當然這在系統資源比較豐富的情況下是沒有問題的,ARM上采取的就是這樣的方式。但如何系統龐大呢,留給的資源缺乏則不行。這樣做的一個很大缺點必須是將數據幀接收完了才能夠判斷,降低了效率和運行速度。


其實還有另外的方式,可以采取在每接收一個字節就對其解析,解析完判斷轉到下一個狀態,并將其中的有用數據存儲在相應的數據結構中去,可以采取狀態機實現。


將狀態機設計為兩個控制狀態,一是串口狀態——uart_state ,一是命令類型狀態——cmd_state 。

51單片機實現通訊協議的串口通訊編程

(1)狀態機開始狀態:串口狀態為CMD_NO

(2)接受到STX_CMD,狀態變為CMD_START.

(3)接下來將自動進入接受命令幀的狀態,再開啟命令狀態的狀態機,對發送來的有用數據進行解析,保存,校驗等。處理完畢后將uart_state設為CMD_END狀態進行下一步的接受完畢判斷,將cmd_state設置為初始的NO_CMD狀態。

(4)最后進行ETX_CMD判斷,判斷數據接收是否完畢。

void uart_process(U8 u8)

{

if(uart_state == CMD_NO)

{

if(u8 == STX_CMD)

{

uart_state = CMD_START;

}

}

else if(uart_state == CMD_START)

{

switch(cmd_state)

{

case NO_CMD:

cmd_state = u8;

break;

case COST_CMD:

//解析存儲有用數據到相應數據結構中

//進行CRC校驗

……

uart_state = CMD_END;

cmd_state = NO_CMD;

CRC = 0;

break;

……

}

……

}

else if(uart_state == CMD_END)

{

uart_state = CMD_NO;

if(u8 == ETX_CMD)

{

//接受完畢

//可以考慮拋出一個消息main函數循環中進行響應處理。

}

}

}


接下來我們要討論解析后我們數據存儲的問題,其實在資源比較足夠的情況下或者能夠擠出data區的情況下可以考慮用結構體,我們構造好相應結構體,將接收到的數據存儲進去,要應用的時候就十分方便。但這也有個矛盾,一般c51定義的結構體都被存儲在data區,一般通訊的字節量大空間必然不夠,存在一個矛盾,可以采用聯合體union進行存儲效果會好一點。當然也可以在保存數據時采用定義在xdata區(片外)的buffer來存儲。這樣在一定程序上優化了程序的執行效率,在程序處理立即拋出消息處理,提高了通訊數據的處理速度。對于通常資源比較豐富的系統,比如ARM上一般采取的做法是這樣的,將數據存在緩沖區,接收完一幀數據后再轉換成相應的數據結構,再進行分析、校驗。


總體來說,這種采取狀態機實時解析串口通訊數據的方式在一定程序提高了程序運行效率,使軟件架構清晰明了,程序可擴展性大,有利于后續開發。

關鍵字:51單片機  通訊協議  的串口通訊 引用地址:51單片機實現通訊協議的串口通訊編程

上一篇:以太網控制器ENC28J60配置單片機“電子郵差”系統
下一篇:51單片機對LED點陣屏的設計

推薦閱讀

問題:在使用STM32調試時,經常使用串口發送信息,為了方便調試與串口發送信息,用printf()函數實現通過串口打印信息。方法一:1.添加包含printf()函數的頭文件:#include “stdio.h” 2.重寫 stdio.h 頭文件中的 int fputc(int ch, FILE *f) 函數int fputc(int ch, FILE *f){ while (USART_GetFlagStatus(USART1, USART_FLAG_TC)...
電子測量和測試系統開發商是德科技日前宣布,其E6953A V2X測試裝置已獲得OmniAir Consortium的認證。汽車制造商及其供應商正在積極投資V2X技術,以提高車聯網應用的安全性和效率。同樣,全球交通部(DOT),高速公路機構和道路運營商正在試用和部署V2X技術,以提高其運輸網絡的安全性和效率。作為促進智能交通系統(ITS),收費和聯網車輛互操作性和認證...
6 月 10 日訊,近日,分析師預計,LG Chem 電動汽車電池銷售為 75.3 億美元(同比增長 83.7%),而中國的寧德時代(CATL)為 74.1 億美元(同比增長 11.8%)。 鑒于 LG Chem 在歐洲的卓越產能(2020 年底預計占總產能的 72.7%),以及為特斯拉和大眾 ID.3 獨家供應電池,所以預測 LG 化學將實現高速增長。今年,LG Chem 有望成為全球電動車...
上一篇最后的部分我們用一個例程來對時鐘系統的設置有了個正面的認識,只給出了程序沒有仿真圖示,原因是我所使用的仿真環境下對時鐘系統的設置是無效的,選擇時鐘源沒有效果,設置通過指定的引腳同步輸出波形也沒有效果,只有在通過外部時鐘源輸入時鐘信號才可以設置,這個的使用我們將在定時器的說明時給出。其實還是用塊板子比較踏實,仿真和實際有時候...

史海拾趣

問答坊 | AI 解惑

電容的類別和符號

電容的種類也很多,為了區別開來,也常用幾個拉丁字母來表示電容的類別,如圖1所示。第一個字母C表示電容,第二個字母表示介質材料,第三個字母以后表示形狀、結構等。上圖是小型紙介電容,下圖是立式矩開密封紙介電容。表1列出電容的類別和符號。 ...…

查看全部問答∨

封裝資料

一些事自己整理,一些事在網上下載的 [ 本帖最后由 zhangkai0215 于 2009-12-22 18:02 編輯 ]…

查看全部問答∨

三星4510ARM開發板280元誰要,拿來學習用不錯的

帶JTAG接口,LCD,完整的軟件開發包資料等 有興趣者可以聯系我,最好在杭州 QQ12665590…

查看全部問答∨

誰有dsp54X的protel原理圖啊

RT,好心人給我一個啊,我下載了都沒有protel的圖。。。誰有給我給我一個,謝謝啊540155859@qq.com…

查看全部問答∨

wince下波形的漂移??

模擬器下是這個波形,使用的標準SDK for WinCE5.0 但是將程序載到wince上就變成了另一副樣子,有嚴重的漂移。 中線會偏下很多~~ 有沒有前輩遇到過~…

查看全部問答∨

求教:Errors loading SDK(S)

安裝BSP包后,打開時出現     Errors loading SDK(S):     E:E:\\WINCE600\\OSDesigns\\S3C6410_DEMO\\S3C6410_DEMO\\SDKs\\SDK1\\SDK1.sdkcfg does not exist 請問這個怎么解決。 弄了好幾遍,都是這樣,急盼!謝謝啊!…

查看全部問答∨

一道計算機組成原理的題 剛剛開始學習計算機組成原理 有一個問題不懂

13/128  是如何變成二進制形式的? 小數轉換成二進制形式的規則?請高手給予回答,不勝感激!!!!!…

查看全部問答∨

高分懸賞:如何實現多臺儀器時鐘同步?

現在我遇到這樣一個問題,想請教一下大家,在網上也沒有收集到相關的資料(不好意思,以前沒用過這些東西,可能說起來比較外行)。 一臺電腦和多臺儀器組成一個分布式控制系統,現在想實現這幾臺儀器能夠同時采集數據,該怎么辦? 現在基本的思路 ...…

查看全部問答∨

STM8S價格問題!

                                 都說STM8S性價比超高,怎么我咨詢好多芯片代理廠商,價格也不是很便宜啊?哪位大俠批量用過這個芯片?想問下STM8S1 ...…

查看全部問答∨

STM8STIM4

TIM4_ARR寄存器,TIM4_CNTR有什么區別 數據手冊上說ARR為自動裝載寄存器。CNTR是設定初值寄存器。我覺的自動裝載的就是一個初值,干嘛還要弄一個CNTR呢?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 阳高县| 彭州市| 托克逊县| 沙湾县| 大竹县| 乌拉特后旗| 老河口市| 友谊县| 兴文县| 刚察县| 普兰店市| 汉寿县| 元阳县| 竹北市| 彰武县| 永新县| 盐亭县| 华亭县| 青龙| 长岭县| 盱眙县| 金溪县| 泗水县| 茂名市| 龙州县| 开江县| 新泰市| 金湖县| 斗六市| 昭苏县| 库车县| 乌鲁木齐市| 逊克县| 突泉县| 达尔| 丽江市| 海丰县| 汝阳县| 吉安县| 九台市| 达日县|