国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MultiSim10的MCU實(shí)時(shí)性仿真與研究

2011-08-11 07:10:38張小進(jìn)
關(guān)鍵詞:動(dòng)態(tài)顯示數(shù)碼管實(shí)時(shí)性

張小進(jìn)

(閩江學(xué)院 計(jì)算機(jī)科學(xué)系,福州350108)

0 引 言

隨著EDA技術(shù)的不斷發(fā)展,電子產(chǎn)品的設(shè)計(jì)過程從模型的建立,到包括電原理圖、PCB板圖、MCU及接口、MCU控制程序、FPGA的構(gòu)建、仿真、外觀界面、熱穩(wěn)定分析、電磁兼容分析在內(nèi)的物理級(jí)設(shè)計(jì),再到PCB鉆孔圖、自動(dòng)貼片、焊膏漏印、元器件清單、總裝配圖等生產(chǎn)所需資料等等全部在計(jì)算機(jī)上完成,發(fā)達(dá)國(guó)家目前已經(jīng)基本上不存在電子產(chǎn)品的手工設(shè)計(jì)[1].

單片機(jī)系統(tǒng)的開發(fā)需要經(jīng)歷軟、硬件設(shè)計(jì)、調(diào)試,以及制作后的聯(lián)合統(tǒng)調(diào);以上的任何一個(gè)步驟一旦存在錯(cuò)誤就要回朔到前一個(gè)或若干個(gè)步驟進(jìn)行修改設(shè)計(jì),這導(dǎo)致了開發(fā)費(fèi)用高、開發(fā)周期長(zhǎng)等問題.美國(guó)NI公司推出的MultiSim9開始引入了MCU系統(tǒng)設(shè)計(jì)與仿真,它不但可以設(shè)計(jì)、仿真 MCU系統(tǒng),也可以對(duì)外圍的接口進(jìn)行設(shè)計(jì)與仿真,還可以支持C或匯編的軟件開發(fā)及斷點(diǎn)調(diào)試、MCU的內(nèi)存、寄存器查看等;從而使得單片機(jī)系統(tǒng)的開發(fā)可以更好地借助于計(jì)算機(jī)的輔助設(shè)計(jì).

1 實(shí)時(shí)性仿真問題

單片機(jī)系統(tǒng)通常應(yīng)用于各種控制領(lǐng)域,它的實(shí)時(shí)性是一個(gè)極其重要的指標(biāo);主要體現(xiàn)在時(shí)鐘定時(shí)中斷、信息的動(dòng)態(tài)顯示和數(shù)據(jù)的輸入等方面.無論是做系統(tǒng)開發(fā)還是輔助教學(xué),設(shè)計(jì)者都希望自己的設(shè)計(jì)能在實(shí)現(xiàn)前進(jìn)行很好地仿真,以檢驗(yàn)設(shè)計(jì)中存在的軟硬件錯(cuò)誤、邏輯功能上的問題和實(shí)時(shí)性的效果.那么利用MultiSim軟件對(duì)單片機(jī)系統(tǒng)進(jìn)行輔助設(shè)計(jì)能否滿足實(shí)時(shí)性仿真的要求呢?以常用的七段數(shù)碼管顯示系統(tǒng)時(shí)鐘為例,在單片機(jī)系統(tǒng)中為了節(jié)省有限的I/O端口,數(shù)碼管的顯示一般采用動(dòng)態(tài)顯示技術(shù),它利用人眼的視覺暫留現(xiàn)象,快速地輪流點(diǎn)亮各個(gè)數(shù)碼管以達(dá)到穩(wěn)定顯示信息的目的[4-5].眾所周知,只有位選通輪轉(zhuǎn)的頻率至少達(dá)到24/秒次才能看到連續(xù)的信息,而要看到穩(wěn)定的信息需至少要達(dá)到48/秒次.實(shí)現(xiàn)一個(gè)六位七段數(shù)碼管動(dòng)態(tài)顯示的硬件系統(tǒng)如圖1所示.

這個(gè)系統(tǒng)采用7447N作為BCD-段碼的譯碼輸出,而不使用查表法;利用74LS138D輸出位選通信號(hào);用共陽(yáng)七段數(shù)碼管顯示時(shí)、分和秒信息.

軟件系統(tǒng)的算法流程如圖2、圖3、圖4所示.

圖1 數(shù)碼管顯示硬件系統(tǒng)

定時(shí)器工作于定時(shí)的方式1,利用其每隔50ms中斷一次,寄存器計(jì)數(shù)累計(jì)到20次為1s時(shí)間到.按照以上的軟硬件設(shè)計(jì),仿真的結(jié)果應(yīng)該是顯示設(shè)置的時(shí)、分、秒,并實(shí)時(shí)更新時(shí)間,但是在仿真中我們會(huì)發(fā)現(xiàn)存在兩個(gè)問題,導(dǎo)致仿真的結(jié)果與實(shí)際情況大相近庭.第一,沒有實(shí)現(xiàn)連續(xù)、穩(wěn)定的顯示時(shí)間,而只是像跑馬燈地顯示;第二,仿真顯示的時(shí)間與實(shí)際的時(shí)間相差很大,即顯示的時(shí)鐘走時(shí)慢了很多.

在MultiSim中,可以通過修改“仿真”菜單下的“交互式仿真設(shè)置”菜單項(xiàng)上的“默認(rèn)瞬態(tài)分析”選項(xiàng)卡上的“設(shè)置初始時(shí)間步長(zhǎng)”的值來改變仿真的速度,但是這個(gè)值的改變對(duì)數(shù)碼管的動(dòng)態(tài)顯示仿真基本沒有作用,表1是對(duì)該值選擇不同時(shí)以上系統(tǒng)中某個(gè)數(shù)碼管被選通的次數(shù)比較.

表1 設(shè)置初始時(shí)間步長(zhǎng)

從表1統(tǒng)計(jì)的數(shù)據(jù)可以看出,在六位數(shù)碼管動(dòng)態(tài)顯示系統(tǒng)中,50次/min的選通顯然不能滿足正常顯示的條件;另外,初始時(shí)間步長(zhǎng)的改變對(duì)動(dòng)態(tài)顯示效果的改善基本無效.

2 動(dòng)態(tài)顯示的極限測(cè)試

為了測(cè)試MultiSim下數(shù)碼管動(dòng)態(tài)顯示的極限值,需要排除軟件執(zhí)行所花費(fèi)的時(shí)間;因此,設(shè)計(jì)一個(gè)環(huán)形計(jì)數(shù)器用于產(chǎn)生數(shù)碼管動(dòng)態(tài)顯示所需要的位選通信號(hào)[6-8],讓數(shù)碼管段碼引腳固定連接“高”或“低”電平以顯示某些數(shù)字,其測(cè)試硬件電路如圖5所示.連接于P0口的數(shù)碼管(內(nèi)部帶有譯碼電路)用于顯示定時(shí)的數(shù)值;連接于P2口的數(shù)碼管用于在定時(shí)時(shí)間到時(shí)顯示選通脈沖的個(gè)數(shù).

圖5 動(dòng)態(tài)顯示極限測(cè)試

單片機(jī)用MultiSim默認(rèn)的晶振頻率12MHz,利用T0定時(shí)器定時(shí)以產(chǎn)生與實(shí)際時(shí)間相同的一分鐘定時(shí);利用T1定時(shí)器對(duì)環(huán)形計(jì)數(shù)器的輸出,即位選通信號(hào)脈沖進(jìn)行計(jì)數(shù),測(cè)試出在實(shí)際時(shí)間1min內(nèi)某位數(shù)碼管被選通的次數(shù).

在MultiSim默認(rèn)的仿真條件下,通過改變環(huán)形計(jì)數(shù)器的脈沖頻率(占空比為50%),測(cè)試數(shù)碼管某位實(shí)際顯示的頻率,表2是實(shí)際位顯示頻率測(cè)試的結(jié)果.

表2 極限測(cè)試實(shí)際位顯示頻率的變化

10kHz 1.1Hz 2.5kHz 20kHz 1.133Hz 5kHz 60kHz 1.167Hz 12.5kHz 100kHz 1.25Hz 25kHz 200kHz 1.25Hz 50kHz

從表2的結(jié)果可以看到,當(dāng)環(huán)形計(jì)數(shù)器的脈沖頻率達(dá)到100kHz后,實(shí)際位顯示的頻率已經(jīng)無法提高了.

測(cè)試所用的程序代碼如下:

在程序設(shè)計(jì)中,讓T0、T1都工作于方式2,自動(dòng)重裝初值以減少誤差.在純硬件實(shí)現(xiàn)四位動(dòng)態(tài)顯示的條件下,環(huán)形計(jì)數(shù)器計(jì)數(shù)脈沖頻率為100kHz,按照MultiSim默認(rèn)的“設(shè)置初始時(shí)間步長(zhǎng)”值,測(cè)試結(jié)果為75次/min,即1.25次/s;當(dāng)“最大時(shí)間步長(zhǎng)”和“初始時(shí)間步長(zhǎng)”都設(shè)置為80s時(shí),測(cè)試結(jié)果為96次/min,即1.6次/s;顯然這都是無法滿足連續(xù)地顯示仿真,但是這并不代表該軟件不能實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示仿真,因?yàn)樵跀?shù)碼管的位選通引腳上只要接上“測(cè)量探針”就可以檢測(cè)到位選通脈沖的頻率,如圖2中所示.因此,盡管看不到實(shí)際仿真的實(shí)時(shí)效果,但只要該頻率大于48Hz,在實(shí)際系統(tǒng)中是一定可以實(shí)現(xiàn)動(dòng)態(tài)顯示的.

在單片機(jī)系統(tǒng)中,定時(shí)器的計(jì)數(shù)初值計(jì)算公式是:

(2n-X)機(jī)器周期(μs)=定時(shí)時(shí)間(μs)

式中n的取值為0、1、2,分別對(duì)應(yīng)定時(shí)器的各種方式;由于在MultiSim中8051默認(rèn)的晶振頻率是12MHz,所以機(jī)器周期是1μs.在使用定時(shí)器仿真時(shí)由于線程時(shí)間配額的關(guān)系,定時(shí)器初值計(jì)算值的定時(shí)結(jié)果在仿真的實(shí)際效果中會(huì)大大延長(zhǎng);具體延長(zhǎng)多少與不同的PC硬件、操作系統(tǒng)、當(dāng)時(shí)運(yùn)行的進(jìn)程、以及是否正在做I/O操作等因素是有關(guān)的;在雙核的Intel(R)Pentium(R)Dual e2140@1.60 GHz CPU、Windows XP的操作系統(tǒng)下,大約100 μs的定時(shí)時(shí)間相當(dāng)于實(shí)際時(shí)間的1s;之所以是大約的值,是因?yàn)榕cPC系統(tǒng)開啟的進(jìn)程多少,如是否播放音頻、視頻等有關(guān).

3 MultiSim實(shí)時(shí)性分析

Multisim運(yùn)行于多用戶、多任務(wù)的操作系統(tǒng)平臺(tái)下,其設(shè)計(jì)的仿真作為一般用戶進(jìn)程中的線程分時(shí)輪轉(zhuǎn)地使用操作系統(tǒng)的線程時(shí)間配額.對(duì)于Windows 2000/XP操作系統(tǒng)而言,每個(gè)線程都有一個(gè)優(yōu)先級(jí)和時(shí)間配額.

3.1 線程優(yōu)先級(jí)

在Windows 2000/XP操作系統(tǒng)下線程分為32個(gè)線程優(yōu)先級(jí),優(yōu)先數(shù)是0到31,優(yōu)先數(shù)越大優(yōu)先級(jí)越高.其調(diào)度是基于內(nèi)核級(jí)線程的搶占式調(diào)度,調(diào)度策略是采用動(dòng)態(tài)優(yōu)先數(shù)多級(jí)反饋隊(duì)列,每個(gè)優(yōu)先數(shù)都對(duì)應(yīng)于一個(gè)就緒隊(duì)列[2].線程優(yōu)先數(shù)在31~16范圍的屬于實(shí)時(shí)優(yōu)先級(jí),用于通信和實(shí)時(shí)任務(wù);線程優(yōu)先數(shù)在15~1范圍的屬于可變優(yōu)先級(jí),用于用戶的交互式任務(wù);線程優(yōu)先數(shù)為0的屬于系統(tǒng)線程優(yōu)先級(jí),用于系統(tǒng)中的頁(yè)面任務(wù).

在Windows 2000/XP操作系統(tǒng)中可以通過任務(wù)管理器修改進(jìn)程的基本優(yōu)先級(jí),相應(yīng)的線程會(huì)繼承進(jìn)程的優(yōu)先級(jí).如果用戶有權(quán)限,可以將 Multi-Sim的進(jìn)程優(yōu)先級(jí)升高到“實(shí)時(shí)”,由于硬件中斷的優(yōu)先級(jí)高于任何線程,所以它不會(huì)阻塞硬件中斷處理,但是它可能阻塞關(guān)鍵系統(tǒng)線程(如存儲(chǔ)管理器、緩存管理器、本地和網(wǎng)絡(luò)文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序等)[3].因此,在仿真過程中會(huì)看到,當(dāng)優(yōu)先級(jí)設(shè)置為“實(shí)時(shí)”后仿真可能處于不穩(wěn)定的狀態(tài);另外,在仿真過程中不能有I/O操作,例如,移動(dòng)鼠標(biāo)、敲擊鍵盤等,因?yàn)檫@些操作的中斷處理將優(yōu)先進(jìn)行,會(huì)導(dǎo)致仿真中線程暫停和時(shí)鐘定時(shí)的嚴(yán)重滯后.

3.2 線程時(shí)間配額

時(shí)間配額是一個(gè)線程從進(jìn)入運(yùn)行狀態(tài)到 Windows 2000/XP檢查是否有其他優(yōu)先級(jí)相同的線程需要開始運(yùn)行之間的時(shí)間總和[3].缺省狀態(tài)下,線程開始的時(shí)間配額為6,每個(gè)時(shí)鐘中斷減少的時(shí)間配額為3,因此一個(gè)線程的缺省運(yùn)行時(shí)間為2個(gè)時(shí)鐘中斷間隔.對(duì)于X86單處理器系統(tǒng)的時(shí)鐘中斷間隔為10ms.換而言之就是在Windows 2000/XP(專業(yè)版)平臺(tái)下線程缺省的運(yùn)行時(shí)間是20ms.如果一個(gè)進(jìn)程只有一個(gè)或幾個(gè)線程,線程優(yōu)先級(jí)為“實(shí)時(shí)”且仿真運(yùn)行時(shí)不進(jìn)行I/O操作的話,那么至少是可以滿足數(shù)碼管連續(xù)的動(dòng)態(tài)顯示.

然而,通過任務(wù)管理器可以看到MultiSim運(yùn)行時(shí)有二十幾個(gè)線程,且操作系統(tǒng)中還有相當(dāng)數(shù)量較高優(yōu)先級(jí)的系統(tǒng)進(jìn)程和后臺(tái)進(jìn)程(每個(gè)進(jìn)程有至少1個(gè)的線程),通過簡(jiǎn)單的推算可以估計(jì)出一個(gè)仿真線程最快的情況下需要約500ms輪轉(zhuǎn)一次,也就是最快2次/s;這與動(dòng)態(tài)顯示的極限測(cè)試的結(jié)果是基本吻合的,因此,在MultiSim下仿真要看到數(shù)碼管動(dòng)態(tài)顯示符合實(shí)際的效果是不可能的.

4 結(jié) 語(yǔ)

本文主要針對(duì)MultiSim下MCU系統(tǒng)的實(shí)時(shí)性仿真存在的問題進(jìn)行分析與研究,設(shè)計(jì)了數(shù)碼管動(dòng)態(tài)顯示的極限測(cè)試硬件電路和測(cè)試代碼,對(duì)極限測(cè)試的結(jié)果從MultiSim運(yùn)行的平臺(tái),即 Windows 2000/XP操作系統(tǒng)的角度分析了其實(shí)時(shí)性仿真的局限性和造成仿真中與實(shí)際效果不符的原因.

由于仿真中MCU的定時(shí)時(shí)間顯示效果與實(shí)際時(shí)間差別較大,因此在MultiSim使用仿真時(shí),為顯示需要所調(diào)用的延遲子程序可先注釋掉,以利于顯示效果.

[1] 王冠華.Multisim10電路設(shè)計(jì)及應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2008:20-23.

[2] Abraham Silberschatz.[美]等.操作系統(tǒng)概念[M].北京:高等教育出版社,2002:114-122.

[3] 孫鐘秀.操作系統(tǒng)教程[M].高等教育出版社,2003,(3):153-161.

[4] 張毅剛.新編 MCS-51單片機(jī)應(yīng)用設(shè)計(jì)[M].黑龍江:哈爾濱工業(yè)大學(xué)出版社,2006:153-157.

[5] 周立功.單片機(jī)與CPLD綜合應(yīng)用技術(shù)[M].北京航空航天大學(xué)出版社,2003:338-340.

[6] 黃 麗.基于Multisim仿真的超聲波測(cè)距系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].湖南工程學(xué)院學(xué)報(bào),2009,19(2):27.

[7] 劉 超,等.基于NI Multisiml0MCU模塊的單片機(jī)仿真[J].應(yīng)用天地,2008,27(8):58-59.

[8] 石嘉順.基于Multisim環(huán)境下的電路設(shè)計(jì)與仿真[J].計(jì)算機(jī)仿真,2007,24(12):307-308.

猜你喜歡
動(dòng)態(tài)顯示數(shù)碼管實(shí)時(shí)性
基于規(guī)則實(shí)時(shí)性的端云動(dòng)態(tài)分配方法研究
Arduino編程
電腦報(bào)(2019年2期)2019-09-10 07:22:44
MC9S08FL16單片機(jī)數(shù)碼管靜態(tài)顯示分析
單片機(jī)控制的四位數(shù)碼管動(dòng)態(tài)顯示編程
基于Qt的數(shù)碼管數(shù)字編碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡(luò)實(shí)時(shí)性仿真
航空電子AFDX與AVB傳輸實(shí)時(shí)性抗干擾對(duì)比
基于單片機(jī)的LED大屏幕顯示的設(shè)計(jì)
科技資訊(2016年28期)2017-02-28 09:52:16
數(shù)碼管動(dòng)態(tài)顯示Proteus 仿真失敗分析
“搖搖棒”為大學(xué)生涯畫個(gè)七彩圓*——”基于單片機(jī)的LED動(dòng)態(tài)顯示裝置”的創(chuàng)作報(bào)告
若羌县| 灵台县| 陆河县| 镇雄县| 肥城市| 芜湖市| 隆尧县| 宁陕县| 蓝山县| 林甸县| 西畴县| 阜新市| 福建省| 惠水县| 建平县| 来宾市| 宁夏| 渑池县| 东乌珠穆沁旗| 乌什县| 佛教| 江孜县| 刚察县| 石嘴山市| 舟曲县| 南部县| 建宁县| 顺义区| 平远县| 肥乡县| 新野县| 阿克苏市| 平潭县| 江口县| 平阳县| 湄潭县| 九江县| 内乡县| 花垣县| 平度市| 繁昌县|