當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]在單片機(jī)系統(tǒng)中,串口(UART,通用異步收發(fā)接口)是一個(gè)非常重要的組成部分。通常使用單片機(jī)串口通過RS232/RS485電平轉(zhuǎn)換芯片與上位機(jī)連接,以進(jìn)行上位機(jī)與下位機(jī)的數(shù)據(jù)交換、參數(shù)設(shè)置、組成網(wǎng)絡(luò)以及各種外部設(shè)備的連接等。RS232/RS485串行接口總線具有成本低、簡(jiǎn)單可靠、容易使用等特點(diǎn),加上其歷史悠久,所以目前應(yīng)用仍然非常廣泛;特別對(duì)于數(shù)據(jù)量不是很大的場(chǎng)合,串口通信仍然是很好的選擇,有著廣闊的使用前景。

引言

在單片機(jī)系統(tǒng)中,串口(UART,通用異步收發(fā)接口)是一個(gè)非常重要的組成部分。通常使用單片機(jī)串口通過RS232/RS485電平轉(zhuǎn)換芯片與上位機(jī)連接,以進(jìn)行上位機(jī)與下位機(jī)的數(shù)據(jù)交換、參數(shù)設(shè)置、組成網(wǎng)絡(luò)以及各種外部設(shè)備的連接等。RS232/RS485串行接口總線具有成本低、簡(jiǎn)單可靠、容易使用等特點(diǎn),加上其歷史悠久,所以目前應(yīng)用仍然非常廣泛;特別對(duì)于數(shù)據(jù)量不是很大的場(chǎng)合,串口通信仍然是很好的選擇,有著廣闊的使用前景。

在單片機(jī)編程中,串口占了很重要的地位。傳統(tǒng)方式串口程序的調(diào)試,往往是利用專用的單片機(jī)硬件仿真器。在編寫好程序后,利用仿真器來設(shè)置斷點(diǎn),觀察變量和程序的流程,逐步對(duì)程序進(jìn)行調(diào)試,修正錯(cuò)誤。使用硬件仿真器的確是很有效的方法,但是也有一些缺點(diǎn):

很多仿真器不能做到完全硬件仿真,因而會(huì)造成仿真時(shí)正常,而實(shí)際運(yùn)行時(shí)出現(xiàn)錯(cuò)誤的情況;也有仿真不能通過,但是實(shí)際運(yùn)行正常的情況。

對(duì)于一些較新的芯片或者是表面貼裝的芯片,要么沒有合適的仿真器或仿真頭;要么就是硬件仿真器非常昂貴,且不容易買到。

有時(shí)由于設(shè)備內(nèi)部結(jié)構(gòu)空間的限制,仿真頭不方便接入。

有的仿真器屬于簡(jiǎn)單的在線仿真型,仿真時(shí)有很多限制。例如速度不高,實(shí)時(shí)性或穩(wěn)定性不好,對(duì)斷點(diǎn)有限制等,造成仿真起來不太方便。

1 調(diào)試前的準(zhǔn)備工作

下面介紹一種利用Keil的軟件仿真功能來實(shí)現(xiàn)51單片機(jī)串口調(diào)試用戶程序的方法。使用這種方法,無需任何硬件仿真器,甚至都不需要用戶電路板。所需的只是:

① 硬件。1臺(tái)普通計(jì)算機(jī)(需要帶有2個(gè)標(biāo)準(zhǔn)串口)和1根串口線(兩頭都是母頭,連線關(guān)系如圖1所示)。

② 串口軟件可以是自己編寫的專用調(diào)試或上下位機(jī)通信軟件,也可以是通用的串口軟件(如串口助手、串口調(diào)試等),主要用來收發(fā)數(shù)據(jù)。如果沒有合適的串口調(diào)試軟件,則可使用筆者編寫的一個(gè)免費(fèi)的串口小工具TurboCom。除了與其他軟件一樣的數(shù)據(jù)收發(fā)功能外,它還有定時(shí)輪流發(fā)送自定義數(shù)據(jù)幀和自動(dòng)應(yīng)答(接收到指定數(shù)據(jù)幀后,自動(dòng)返回相應(yīng)的數(shù)據(jù)幀)這兩個(gè)很有用的功能,特別適合于老化測(cè)試。這個(gè)小工具可以從網(wǎng)上下載。

2 基本調(diào)試命令介紹

這個(gè)串口調(diào)試方法主要是利用了Keil強(qiáng)大的軟件仿真功能。在新版本(高于6.0)的Keil軟件中,增強(qiáng)了軟件的仿真能力,可以利用軟件仿真更多的單片機(jī)功能。在這些功能中,其中有一個(gè)很重要的功能就是利用計(jì)算機(jī)的串口來模擬單片機(jī)的串口(這不同于很多軟件在仿真時(shí)使用的激勵(lì)文件方式,可以直接與其他串口進(jìn)行通信,更加方便、靈活)。首先要介紹仿真時(shí)需要使用的兩個(gè)命令:ASSIGN和MODE。

2.1 ASSIGN命令

將單片機(jī)的串口綁定到計(jì)算機(jī)的串口。基本使用方式為:

ASSIGN channeloutreg

其中: channel代表計(jì)算機(jī)的串口,可以是COM1、COM2、COM3或COM4;而inreg和outreg代表單片機(jī)的串口。對(duì)于只有一個(gè)串口的普通單片機(jī),即SIN和SOUT;對(duì)于有兩個(gè)或者多個(gè)串口的單片機(jī),即SnIN和SnOUT(n=0,1,…即單片機(jī)的串口號(hào))。

 

圖1 串口連線示意圖

例如:

ASSIGN COM1SOUT

將計(jì)算機(jī)的串口1綁定到單片機(jī)的串口(針對(duì)只有一個(gè)串口的單片機(jī))。

ASSIGN COM2S0OUT

將計(jì)算機(jī)的串口2綁定到單片機(jī)的串口0(針對(duì)有多個(gè)串口的單片機(jī),注意串口號(hào)的位置)。

需要注意的是,參數(shù)的括號(hào)是不能省略的,而outreg則是沒有括號(hào)的。

2.2 MODE命令

設(shè)置被綁定計(jì)算機(jī)串口的參數(shù)?;臼褂梅绞綖椋?/p>

MODE COMx baudrate, parity, databits, stopbits

其中: COMx(x = 1,2,…)代表計(jì)算機(jī)的串口號(hào);baudrate代表串口的波特率;parity代表校驗(yàn)方式;databits代表數(shù)據(jù)位長(zhǎng)度;stopbits代表停止位長(zhǎng)度。

例如:

MODE COM1 9600, n, 8, 1

設(shè)置串口1。波特率為9 600,無校驗(yàn)位,8位數(shù)據(jù),1位停止位。

MODE COM2 19200, 1, 8, 1

設(shè)置串口2。波特率為19 200,奇校驗(yàn),8位數(shù)據(jù),1位停止位。

使用以上兩個(gè)命令,就能夠?qū)⒂?jì)算機(jī)的串口模擬成單片機(jī)的串口了。在進(jìn)行軟件仿真時(shí),所有發(fā)送到被綁定的計(jì)算機(jī)串口上的數(shù)據(jù)都會(huì)轉(zhuǎn)發(fā)到Keil模擬的單片機(jī)串口上,用戶程序可以通過中斷處理程序或查詢方式接收到這些數(shù)據(jù);同樣,單片機(jī)程序中發(fā)送到單片機(jī)串口上的數(shù)據(jù)也會(huì)通過被綁定的計(jì)算機(jī)串口發(fā)送出來,可以被其他軟件所接收。利用這個(gè)特點(diǎn),就可以方便地仿真、調(diào)試單片機(jī)的串口部分程序。要注意的是,這兩個(gè)命令需要一起使用。

 

2.3 仿真步驟

首先,用串口線將計(jì)算機(jī)的兩個(gè)串口連接起來(或者是兩臺(tái)計(jì)算機(jī)上的兩個(gè)串口)。這兩個(gè)串口一個(gè)用來模擬單片機(jī)串口,另一個(gè)給調(diào)試程序使用。這個(gè)由用戶自己分配,沒有特殊要求。

其次,編寫好用戶程序,并編譯通過。

然后,設(shè)置工程文件(Project)的相關(guān)參數(shù),如圖2和圖3所示。主要是選擇軟件仿真模式(Use Simulator)以及晶振參數(shù)。

 

圖2 仿真參數(shù)設(shè)置

為了不必每次進(jìn)入仿真狀態(tài)后,都需要輸入串口參數(shù)設(shè)置命令,可以建立一個(gè)初始化文件。初始化文件是一個(gè)普通的文本文件,內(nèi)容就是仿真時(shí)需要的命令,按照順序一行輸入一條。如圖2所示,建立了一個(gè)debug.ini的初始化文件。這樣,當(dāng)每次進(jìn)入仿真調(diào)試狀態(tài)時(shí),Keil就會(huì)自動(dòng)載入 debug.ini的內(nèi)容進(jìn)行初始化。

為了正確仿真串口,在軟件仿真調(diào)試時(shí),在用戶的Keil工程文件的屬性中,還需要設(shè)置實(shí)際使用的晶振頻率。這個(gè)參數(shù)非常重要,直接影響通信的波特率,可以按照實(shí)際使用的參數(shù)進(jìn)行設(shè)置。要注意,這個(gè)參數(shù)的單位是MHz。

設(shè)置好參數(shù)后,就可以進(jìn)行仿真了。單擊工具欄的圖標(biāo)按此在新窗口瀏覽圖片進(jìn)入Debug(仿真調(diào)試)狀態(tài),在Output window窗口中的command文本框(一般是在左下角)中輸入上面介紹的命令。例如,將PC機(jī)的串口1設(shè)置為單片機(jī)的串口:

mode com1 9600,0,8,1

assign com1 Sout

然后設(shè)置斷點(diǎn),一般是在關(guān)鍵地方或與串口相關(guān)聯(lián)的地方設(shè)置。再單擊圖標(biāo)運(yùn)行(Run)用戶程序,使用戶程序運(yùn)轉(zhuǎn)起來(不然是接收不到串口數(shù)據(jù)的)。這時(shí)再使用串口調(diào)試軟件或用戶調(diào)試軟件,發(fā)送通信命令或者數(shù)據(jù)包,看用戶程序是否進(jìn)入斷點(diǎn),以及相關(guān)的變量是否正確。還可以有意發(fā)送帶有錯(cuò)誤數(shù)據(jù)的數(shù)據(jù)包,以觀察用戶程序的異常處理部分是否正常。一旦發(fā)現(xiàn)程序中的錯(cuò)誤,可以馬上停止仿真調(diào)試,立即修改代碼,然后再次重復(fù)上面的步驟進(jìn)行仿真。因?yàn)椴恍枰c用戶目標(biāo)板聯(lián)機(jī),也不用下載代碼到用戶板上,所以速度非常高。以上這些步驟和使用硬件仿真器的基本一樣,只不過現(xiàn)在使用的是軟件仿真。

需要注意的是:仿真時(shí)單片機(jī)串口實(shí)際的波特率由MODE命令來指定,單片機(jī)程序中的TMOD、SCON等參數(shù)是不影響串口仿真狀態(tài)的(也就是說這些參數(shù)不影響仿真的波特率,即使它們是錯(cuò)誤的)。但是中斷的使能位(如ES、EA等)還是起作用的,如果ES或EA被禁止,那么就不會(huì)進(jìn)入串口中斷。

因?yàn)檫@種方法是利用計(jì)算機(jī)的串口來仿真單片機(jī)的串口,而仿真是通過Keil軟件來轉(zhuǎn)換串口上的數(shù)據(jù),不是直接轉(zhuǎn)發(fā)數(shù)據(jù)的,所以在實(shí)際仿真時(shí),處理速度會(huì)比實(shí)際單片機(jī)運(yùn)行時(shí)稍微低一點(diǎn)。比方說仿真狀態(tài)時(shí)1 s只能發(fā)送/接收10個(gè)數(shù)據(jù)幀,但在單片機(jī)硬件上運(yùn)行時(shí)可能1 s就可以接收/發(fā)送50個(gè)數(shù)據(jù)幀。這與使用的計(jì)算機(jī)的速度有關(guān),但對(duì)仿真來說,是沒有任何影響的。

對(duì)于多串口的單片機(jī),從理論上來說,可以一次綁定多個(gè)串口,只要計(jì)算機(jī)有足夠多的串口。基本上,使用這種方法需要占用計(jì)算機(jī)的串口數(shù)量是單片機(jī)綁定串口的2倍。一個(gè)串口被Keil占用,用來模擬單片機(jī)的串口;另外一個(gè)串口被計(jì)算機(jī)占用,用來給單片機(jī)的串口收發(fā)數(shù)據(jù)。

3 小結(jié)

這里介紹的方法對(duì)C51和匯編語言都是適合的。它最大的好處就是簡(jiǎn)單、方便,容易使用,不需要使用任何電路,也沒有特殊的要求;甚至可以在硬件電路制作好之前就將串口部分的程序編寫、調(diào)試完畢。筆者使用這種方法已經(jīng)很長(zhǎng)時(shí)間了,事實(shí)證明這種方法確實(shí)非常有效。其實(shí)對(duì)于51單片機(jī),Keil的仿真功能實(shí)在是太強(qiáng)大了,只要充分掌握其特點(diǎn),能夠熟練利用它,就可以解決工作中的大部分問題。很多工作都可以使用軟件仿真來完成,根本無需任何硬件仿真器;只有一些新的外部器件的時(shí)序、接口的調(diào)試才有可能需要用到硬件仿真器。目前介紹Keil軟件仿真這方面的參考書籍很少,有些講的還是老版本的用法,不過沒有關(guān)系,Keil的幫助文件寫得很詳細(xì)、很清楚,只要認(rèn)真看明白就會(huì)使用了。使用熟練后,就會(huì)發(fā)現(xiàn)Keil的功能相當(dāng)強(qiáng)。

對(duì)于串口編程,51單片機(jī)有Keil這個(gè)功能強(qiáng)大的開發(fā)軟件,給我們帶來了極大的便利;而在其他單片機(jī)軟件的開發(fā)中,目前還沒有這么強(qiáng)大的開發(fā)工具和方便的調(diào)試手段。這里有個(gè)變通的辦法,就是可以先在Keil中編寫并調(diào)試好串口程序,然后將程序移植到其他單片機(jī)平臺(tái)中(筆者在PIC18單片機(jī)開發(fā)中就使用了這種方法,收到了很好的效果。當(dāng)然這是指在使用C語言開發(fā)單片機(jī)程序時(shí),匯編語言是沒有可移植性的)。至于如何能夠減小程序移植的工作量,使得程序具有更好的通用性,以最小的代價(jià)就可以平滑地移植到其他單片機(jī)平臺(tái)上,也是一個(gè)非常值得探討的問題。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉