如圖,問題大概就是說初學單片機,用軟件仿真出來的程序,在開發(fā)板上運行的效果比仿真的快,晶振都是一樣的12M。還問到一個1T模式和12T模式的區(qū)別?
今天,我們就來說說這個問題,一看問出這樣的問題就知道學單片機沒幾天,還不算是入門吧,還走了軟件仿真的道路。
要說清這個問題,我們分幾步來慢慢叨叨。
傳統(tǒng)單片機和增強單片機
傳統(tǒng)單片機,也就是之前的Atmel公司的51單片機,現(xiàn)在好多高校也都還在用的芯片,最有代表的芯片就是AT89S51/52單片機。這個單片機內(nèi)部資源不多,不帶ADC/DAC ,不帶PWM,供電電壓范圍4.5V-5.2V,最主要的是運行速度的問題,12M的晶振頻率,但是執(zhí)行最快的 一條指令也需要12個晶振周期才能完成,這也就是所謂的12分頻。這樣一來12M的晶振頻率,到了指令周期就只有1MHz。這也就是在12M晶振下,傳統(tǒng)51單片機的定時器每加1所需要的時間是1us(1MHz頻率對應(yīng)的周期是1us),在計算定時器初值時的依據(jù)就是出自這里啦。
所謂的增強型單片機,其實就是STC的51單片機,在STC最開始的芯片中,比如STC89C51,這些芯片和AT的芯片沒多少區(qū)別,運行速度和資源情況都差不多。到了STC12系列以后,STC公司連命名都改了,內(nèi)部資源和運行速度都有了很大的提升,另一個很大的改動就是引腳的排列方式,之前的STC芯片的引腳排列都是兼容傳統(tǒng)的51單機的,到時STC12系列以后,引腳不再兼容傳統(tǒng)單片機,而是有了自己獨特的排列,特別是后續(xù)的STC15、STC8等系列單片機。
>>>>
1T和12T
1T和12T只有在STC12系列以后的單片機里才出現(xiàn)的。前面我們已經(jīng)說到了,傳統(tǒng)的單片機其實就是12T單片機,也就是晶振頻率會被12分頻后才是指令運行的頻率。到時STC12系列以后的STC單片機出現(xiàn)1T模式,也就是有些指令的執(zhí)行時只需要兩個晶振周期就能執(zhí)行完。理論上來說,這樣的運行速度會比傳統(tǒng)單片機快6倍,為什么加“理論”,因為不是所有的指令都快6倍,只是一部分,還有些是快4倍,快3倍的。具體的需要看STC官方數(shù)據(jù)手冊,如下圖。
仔細的小伙伴會看到在第5列的第一行里有個小括號(采用STC-Y2 CPU內(nèi)核指令集),STC12用的就是這個內(nèi)核,而到了STC15系列芯片用的是STC-Y5內(nèi)核,STC8系列用的是STC-Y6內(nèi)核,Y后面的數(shù)字越大,指令優(yōu)化的越厲害,表現(xiàn)出來的就是運行的更快,STC-Y5內(nèi)核的指令集里,大部分的匯編指令到時一個晶振周期就執(zhí)行完成的了,也就是比傳統(tǒng)單片機快12倍。 現(xiàn)在我在做單片機開發(fā)的時候,絕大部分都是采用的C語言開發(fā),你還在用匯編,那我只能是膜拜你了。C語言編程的程序方便移植,好理解,容易入門,不需要去記住那些復(fù)雜的寄存器,但是確定也明顯,就是效率不高,運行速度我們沒辦法準確的計算出來。編譯器在把C語言代碼轉(zhuǎn)化為匯編語言的過程我們是沒法控制的,這樣編譯出來的機器代碼我們就沒辦法去計算時間的指令運行時間。 >>>>
軟件仿真和實際開發(fā)板
仿真軟件,外國老表開發(fā)的,STC國產(chǎn)(好吧,內(nèi)核還是人家的)。不知道什么原因,我們不知道,也不敢問,在仿真軟件里就是沒有STC的單片機芯片可以選擇,沒有STC的單片機,我們只能選擇傳統(tǒng)51單片機,這樣一來,仿真的時候,程序運行的速度是傳統(tǒng)的12T模式,也就是晶振頻率12分頻后才是執(zhí)行的實際頻率。 單片機開發(fā)板運行時,因為提問小伙伴用的單片機是STC12系列的芯片,就算他運行在12T模式下,指令系統(tǒng)還是有優(yōu)化,速度肯定比傳統(tǒng)的指令集要快。更何況呢,他連1T和12T都分不清,運行在1T模式下也是有可能的,所以,今天的問題就來了。實際開發(fā)板運行速度肯定會比軟件仿真快。 寫在最后 在很久之前,我就寫過一篇文字,就說了不建議初學單片機的菜鳥從軟件仿真開始?,F(xiàn)在還有多少高校的單片機課程還在是以仿真運行的呢,希望是沒有了,但我想,僅僅是我想想。 其實,小代覺得,學單片機的最終是要自己設(shè)計屬于自己的東西,比如自己的畢設(shè),更或是親手做一個小禮物俘獲女神的芳心。但是自己寫的代碼永遠都運行在軟件里,沒有實際電路,你又怎么可能會自己設(shè)計電路呢。你不自己看見過電阻,又怎么可能會知道一個長得很像電阻的電子元件它其實是二極管。 最最后,回到今天的問題上,當我們把軟件仿真運行完美的代碼移植到實際開發(fā)板上運行時,代碼是需要做單片機的適配的,比如,采用代碼方式實現(xiàn)的延時函數(shù),比如IO端口的配置,比如某些中斷的入口,比如某些寄存器的定義等等。在移植之前,還是得拿目標芯片的數(shù)據(jù)手冊來看看。
-
芯片
+關(guān)注
關(guān)注
455文章
50721瀏覽量
423167 -
單片機
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634689
原文標題:問題:單片機軟件仿真和實際運行速度不一樣?
文章出處:【微信號:chuxue_MCU,微信公眾號:單片機技術(shù)宅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論