| 單片機(jī)智能化儀器嵌入式在線仿真設(shè)計(jì)方法 江漢石油學(xué)院徐愛鈞 摘要針對(duì)基于單片機(jī)的智能化儀器設(shè)計(jì),提出一種新穎的“嵌入式”在線仿真方法。在智能儀器設(shè)計(jì)之初,直接在其硬件系統(tǒng)中嵌入1個(gè)包含專門用于仿真調(diào)試的監(jiān)控程序模塊,在整個(gè)設(shè)計(jì)過程中直接對(duì)儀器的各種功能進(jìn)行實(shí)時(shí)調(diào)試。監(jiān)控程序具有通用性,可與PC機(jī)通信實(shí)現(xiàn)源程序在線仿真調(diào)試,節(jié)省購(gòu)買專用仿真器的費(fèi)用,降低成本,加快儀器的更新?lián)Q代速度。 關(guān)鍵詞智能儀器仿真監(jiān)控程序 一、 基于單片機(jī)的智能化儀器設(shè)計(jì)與仿真 單片機(jī)的出現(xiàn)引起了儀器、儀表結(jié)構(gòu)的根本性變革。以單片機(jī)為主體取代傳統(tǒng)儀器、儀表的常規(guī)電子線路,可以容易地將計(jì)算機(jī)技術(shù)與測(cè)量控制技術(shù)結(jié)合在一起,組成新一代的“智能化儀器儀表”。這種新型的智能化儀器在測(cè)量過程自動(dòng)化、測(cè)量結(jié)果的數(shù)據(jù)處理以及功能的多樣化方面,都取得了巨大的進(jìn)展。采用單片機(jī)技術(shù)設(shè)計(jì)智能化儀器,能夠解決許多傳統(tǒng)儀器不能或不易解決的難題,可以簡(jiǎn)化電路,提高儀器的可靠性,降低成本以及加快新產(chǎn)品的開發(fā)速度。這類儀器的設(shè)計(jì)重點(diǎn)已經(jīng)從模擬和邏輯電路的設(shè)計(jì)轉(zhuǎn)向?qū)S玫膯纹瑱C(jī)模板或功能部件、接口電路以及輸入輸出通道的設(shè)計(jì)、通用或?qū)S密浖绦虻拈_發(fā)。 智能化儀器與傳統(tǒng)儀器的最大不同,在于前者是以單片機(jī)作為儀器的核心,儀器各種功能主要通過單片機(jī)的控制作用來實(shí)現(xiàn)。單片機(jī)運(yùn)行正常與否直接關(guān)系到儀器設(shè)計(jì)的成敗,因此很有必要在儀器設(shè)計(jì)完成之后,對(duì)單片機(jī)進(jìn)行仿真運(yùn)行來檢驗(yàn)該儀器設(shè)計(jì)是否合理,功能是否完善。所謂仿真運(yùn)行,就是通過對(duì)儀器內(nèi)部單片機(jī)中的系統(tǒng)程序人為設(shè)置單步、斷點(diǎn)、運(yùn)行歷史記錄等調(diào)試手段,根據(jù)仿真運(yùn)行結(jié)果對(duì)初始設(shè)計(jì)進(jìn)行分析和適當(dāng)修改,以求達(dá)到最優(yōu)化的設(shè)計(jì)效果。在智能化儀器設(shè)計(jì)過程中,仿真運(yùn)行是必不可少的一個(gè)重要步驟。仿真運(yùn)行的可靠性和方便性,直接影響到儀器的設(shè)計(jì)效果?梢圆捎脤S梅抡嫫鲗(duì)所設(shè)計(jì)的智能化儀器進(jìn)行仿真,將專用仿真器的仿真電纜插頭插入儀器中單片機(jī)插座,來代替儀器中的實(shí)際單片機(jī),并將儀器的系統(tǒng)程序裝入仿真器中運(yùn)行,通過在仿真器中設(shè)置單步、斷點(diǎn)等對(duì)儀器系統(tǒng)程序進(jìn)行調(diào)試。采用這種方法仿真的優(yōu)劣完全取決于仿真器的可靠性。高檔仿真器可以做到實(shí)時(shí)在線仿真、全速運(yùn)行用戶程序并且不占用任何用戶資源以達(dá)到完全仿真的目的。但這種仿真器價(jià)格昂貴,非一般用戶所能承受。另外由于單片機(jī)的種類繁多,性能各異,1臺(tái)仿真器不能仿真所有類型的單片機(jī),如果設(shè)計(jì)中由于選擇了不同類型的單片機(jī)而需要購(gòu)買不同類型仿真器,則更將加大用戶負(fù)擔(dān),從而導(dǎo)致儀器設(shè)計(jì)落后,更新?lián)Q代緩慢。 圖1地址跳零電路二、 嵌入式仿真方法及其實(shí)現(xiàn) 本文提出了一種新的“嵌入式”仿真調(diào)試方法:儀器設(shè)計(jì)之初,直接在系統(tǒng)中嵌入1個(gè)包含有專門用于仿真調(diào)試的監(jiān)控程序模塊,在儀器設(shè)計(jì)過程中可以直接應(yīng)用該模塊對(duì)所設(shè)計(jì)的各種功能進(jìn)行在線測(cè)試;趩纹瑱C(jī)的智能化儀器系統(tǒng)具有一般設(shè)計(jì)規(guī)則可以遵循,因此,完全可以預(yù)先設(shè)計(jì)出1種通用仿真調(diào)試模塊,需要時(shí)將其嵌入到用戶系統(tǒng)中去。采用“嵌入式”仿真調(diào)試方法設(shè)計(jì)智能化儀器,不僅可以節(jié)省用于購(gòu)買專用仿真器的開支,降低成本,同時(shí),由于仿真調(diào)試模塊已經(jīng)位于所設(shè)計(jì)的儀器之中,很容易對(duì)儀器進(jìn)行現(xiàn)場(chǎng)調(diào)試,對(duì)于故障排除、使用人員培訓(xùn)等都提供了極大的方便。 “嵌入式”仿真調(diào)試模塊的代碼應(yīng)盡可能小,同時(shí)應(yīng)具有通用性,以便于嵌入任意用戶系統(tǒng),另外,模塊應(yīng)盡量少占用或不占用用戶資源。在硬件上,要保證系統(tǒng)在仿真階段能正確進(jìn)入仿真監(jiān)控程序;在軟件上,要具有單步、斷點(diǎn)、全速運(yùn)行等基本調(diào)試功能。下面以目前使用極為廣泛的8051系列單片機(jī)為例,闡述“嵌入式”仿真調(diào)試模塊的基本設(shè)計(jì)方法。 眾所周知,8051單片機(jī)的復(fù)位入口地址為0000H。如果將調(diào)試模塊的入口地址安排在0000H地址,可以保證系統(tǒng)上電后立即進(jìn)入調(diào)試模塊運(yùn)行仿真程序。但這樣將占用用戶程序的入口地址,導(dǎo)致用戶程序需要采用“地址浮動(dòng)、兩次匯編”的方法設(shè)計(jì)。也就是說在編寫用戶程序時(shí),第1次將起始地址定位在調(diào)試模塊所占用的地址范圍之外,當(dāng)調(diào)試通過之后再采用“ORG”偽指令,將用戶程序地址重新定位在0000H處,并再次進(jìn)行匯編而得到可進(jìn)行EPROM固化的用戶程序機(jī)器碼。顯然,這種方法會(huì)使用戶感到不方便。為了方便用戶編程,使用戶程序在調(diào)試通過之后不用改動(dòng)即可運(yùn)行,在設(shè)計(jì)上應(yīng)使“嵌入式”仿真調(diào)試模塊具有“零地址”仿真功能,即將仿真調(diào)試模塊嵌入到高端地址空間,而將復(fù)位入口地址0000H留給用戶使用。在硬件設(shè)計(jì)上可采用如圖1所示的地址跳零邏輯電路,避開零地址的沖突。 當(dāng)系統(tǒng)上電復(fù)位或手動(dòng)復(fù)位時(shí),地址跳零電路中P點(diǎn)的高電平使3個(gè)R\ S的觸發(fā)器Q端置1,3個(gè)或門輸出全為1。此時(shí)3\ 8譯碼器的輸入端均為1,譯碼輸出線Y7有效,送出地址信號(hào)E000H,選中“嵌入式”調(diào)試模塊。8031單片機(jī)復(fù)位完成后,各個(gè)并行口的初值均為FFH,3根地址線A13、A14、A15為全1。一方面使3個(gè)R\ S觸發(fā)器復(fù)位,另一方面使3\ 8譯碼器的輸入端仍然維持全1,繼續(xù)維持譯碼輸出線Y7有效,從而實(shí)現(xiàn)復(fù)位時(shí)將運(yùn)行控制權(quán)交給“嵌入式”調(diào)試模塊。模塊中的仿真調(diào)試程序控制用戶程序進(jìn)行仿真操作,這樣就避開了復(fù)位時(shí)零地址的沖突。當(dāng)仿真調(diào)試完成之后,可以通過跳線改變3\ 8譯碼器的輸入信號(hào),恢復(fù)對(duì)0000H地址的譯碼輸出線Y0有效,將復(fù)位時(shí)的運(yùn)行控制權(quán)交給用戶系統(tǒng),實(shí)現(xiàn)系統(tǒng)上電或手動(dòng)復(fù)位時(shí)立即運(yùn)行用戶程序。 現(xiàn)在PC機(jī)的使用已經(jīng)相當(dāng)普遍。在進(jìn)行單片機(jī)應(yīng)用系統(tǒng)開發(fā)過程中,應(yīng)該充分利用PC機(jī)的資源。為此“嵌入式”調(diào)試模塊中設(shè)計(jì)了與PC機(jī)的通信程序。用戶可以在PC機(jī)上采用PE、EDIT或任何一種自己熟悉的編輯器編寫源程序,并進(jìn)行編譯和連接定位。完成這些基本工作之后,再通過PC機(jī)的RS232適配器與8051單片機(jī)內(nèi)部串行口之間的通信,將其下載到應(yīng)用系統(tǒng)之中。通信程序中還包含有直接仿真功能。程序調(diào)試中的各種信息,如單片機(jī)工作寄存器狀態(tài)、程序指令的當(dāng)前地址、堆棧狀態(tài)、斷點(diǎn)信息等都將圖2模塊內(nèi)部調(diào)試監(jiān)控程序流程通過通信接口傳遞給PC機(jī)并顯示在屏幕上。從PC機(jī)上可以鍵入各種仿真操作命令并傳送到8051單片機(jī)中,實(shí)現(xiàn)源程序跟蹤調(diào)試。這種調(diào)試方法比單純采用匯編碼調(diào)試的效率要高出許多倍,而且容易發(fā)現(xiàn)錯(cuò)誤,及時(shí)糾正,給程序的編寫和修改都帶來極大的方便。但這樣做要占用8051單片機(jī)的串行口,需要時(shí),可以利用8251等芯片為8051單片機(jī)增加1個(gè)擴(kuò)展的UART串行接口,或者采用Dallas 80C320等具有雙串行口的新型單片機(jī)。 “嵌入式”調(diào)試模塊的軟件設(shè)計(jì)包括兩個(gè)方面:一是運(yùn)行于用戶系統(tǒng)內(nèi)部的調(diào)試監(jiān)控程序,另一個(gè)是運(yùn)行于PC機(jī)上的仿真程序,兩者配合以完成用戶程序的仿真調(diào)試任務(wù)。其中用戶系統(tǒng)內(nèi)部的調(diào)試監(jiān)控程序是關(guān)鍵部分,其基本結(jié)構(gòu)如圖2所示。 目前一些半導(dǎo)體廠商推出了內(nèi)含F(xiàn)lash的程序存儲(chǔ)器,并具有在系統(tǒng)編程(ISP)功能的單片機(jī),如PHILIPS公司的89C51Rx、DALLAS公司的DS89C420、SST公司的89C58等ISP單片機(jī)。這類單片機(jī)的1個(gè)很大特點(diǎn),是可以利用單片機(jī)串行口直接將用戶程序下載到芯片內(nèi)部的Flash存儲(chǔ)器中,而且允許進(jìn)行在應(yīng)用中編程(IAP)。芯片內(nèi)部Flash存儲(chǔ)器可頻繁擦寫。一些簡(jiǎn)單的應(yīng)用可以將編譯連接好的程序直接下載到芯片中運(yùn)行;對(duì)于較為復(fù)雜的應(yīng)用可以按功能模塊編程并下載到芯片中分段運(yùn)行,從運(yùn)行結(jié)果判斷程序編寫是否有錯(cuò)。這種方法不能進(jìn)行程序在線仿真調(diào)試,難以發(fā)現(xiàn)某些隱匿的錯(cuò)誤,不宜用于太大的應(yīng)用程序。ISP單片機(jī)內(nèi)部Flash存儲(chǔ)器通常都被劃分為幾個(gè)塊(BLOCK),允許進(jìn)行分塊擦寫,可以在一個(gè)BLOCK中運(yùn)行程序代碼的同時(shí)擦寫另一個(gè)BLOCK中的內(nèi)容。根據(jù)這一特點(diǎn),把“嵌入式”仿真調(diào)試模塊設(shè)計(jì)為能對(duì)Flash存儲(chǔ)器進(jìn)行擦除和修改,從而可以實(shí)現(xiàn)對(duì)ISP單片機(jī)的仿真調(diào)試。PHILIPS公司的89C51RX單片機(jī)提供1個(gè)片內(nèi)BOOT ROM固件。其中包含若干可直接調(diào)用的IAP子程序,并且允許用戶修改啟動(dòng)向量(BOOT VECTOR)。SST89C58單片機(jī)允許用戶通過編程改變ROM存儲(chǔ)器映像(memory re\ mapping),重新設(shè)定復(fù)位和中斷入口地址。利用ISP單片機(jī)這些特點(diǎn),可以將“嵌入式”仿真調(diào)試監(jiān)控程序?qū)懭隝SP單片機(jī)內(nèi)部Flash存儲(chǔ)器的高端地址空間,然后將BOOT VECTOR修改為指向該監(jiān)控程序。單片機(jī)在上電復(fù)位后將立即運(yùn)行仿真調(diào)試監(jiān)控程序,不再需要如圖1所示的地址跳零電路,簡(jiǎn)化了硬件設(shè)計(jì)。由于單片機(jī)芯片中已經(jīng)包含了可以對(duì)用戶程序進(jìn)行仿真調(diào)試的監(jiān)控程序,可以嵌入到任何應(yīng)用系統(tǒng)中,真正實(shí)現(xiàn)“嵌入式”仿真調(diào)試。對(duì)應(yīng)用程序的調(diào)試和修改可以直接在芯片上進(jìn)行,避免了由于連接仿真器而引入的某些設(shè)計(jì)問題,如在仿真器上用戶程序能夠正確運(yùn)行,一旦脫離仿真器就發(fā)生程序跑飛等現(xiàn)象。對(duì)于不希望總線開放的單片機(jī)應(yīng)用系統(tǒng),采用這種方法特別適宜。由于系統(tǒng)總線處于封閉狀態(tài),可以大大減小外界干擾對(duì)單片機(jī)應(yīng)用系統(tǒng)的影響,提高系統(tǒng)可靠性。 結(jié)束語(yǔ) 按上述思想設(shè)計(jì)的“嵌入式”仿真調(diào)試模塊,已經(jīng)在我們最近進(jìn)行智能化儀器開發(fā)研制中得到應(yīng)用:能夠通過PC機(jī)向儀器裝入系統(tǒng)應(yīng)用程序,并可進(jìn)行單步、斷點(diǎn)調(diào)試、全速運(yùn)行、存儲(chǔ)器內(nèi)容查看、修改等,使用十分方便。利用該模塊對(duì)基于80C51/52、DS80C320、PHILIPS 89C51RD2、SST89C58等型號(hào)單片機(jī)的智能化儀器進(jìn)行在線仿真調(diào)試,效果良好,證明“嵌入式”仿真調(diào)試方法思路是正確的。該“嵌入式”仿真調(diào)試模塊能夠裝入Intel HEX格式的用戶目標(biāo)程序,可以利用多種匯編器,甚至高級(jí)語(yǔ)言編譯器,對(duì)單片機(jī)應(yīng)用系統(tǒng)源程序進(jìn)行編譯,只要能生成符合Intel HEX格式的目標(biāo)程序,都可以利用“嵌入式”仿真調(diào)試模塊進(jìn)行調(diào)試。該模塊緊湊,監(jiān)控程序容量?jī)H4KB左右,可以“嵌入”到大多數(shù)智能化儀器之中,實(shí)現(xiàn)對(duì)儀器系統(tǒng)應(yīng)用程序的實(shí)時(shí)、在線仿真調(diào)試,對(duì)于提高仿真調(diào)試的可靠性,加快儀器的開發(fā)速度,提供了一條新的途徑。MES 參考文獻(xiàn) 1Intel Embedded Applications. Intel Corporation, 1997(79~104) 280C51 Flash Microcontroller Family. Philips Semiconductor,1999(39~47) 3徐愛鈞.智能化測(cè)量控制儀表原理與設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1999(2~92) |