大神手把手教你STC單片機(jī)片上仿真法
什么是仿真?
我們舉一個(gè)汽車設(shè)計(jì)的例子來(lái)說(shuō)明一下吧。大家一定在影視劇或電視廣告中看過(guò)這樣的鏡頭:在一個(gè)大大的廠房里,一輛嶄新的小汽車正在以很高的速度撞向一面厚厚的水泥墻。坐在車上的兩個(gè)人面不改色心不跳,一動(dòng)不動(dòng)地等待著死亡。他們?yōu)楹稳绱死潇o,因?yàn)?ldquo;他們”是實(shí)驗(yàn)用的假人。說(shuō)時(shí)遲那時(shí)快,汽車已經(jīng)撞到了墻上,巨大的聲響夾雜著飛濺的碎片充滿了空間,汽車在撞擊中破了相。旁邊的幾臺(tái)高速攝像機(jī)記錄下了這一切。這是一次真實(shí)的撞擊實(shí)驗(yàn),目的是為了得出這款車型在出現(xiàn)意外時(shí),是否能保住人的小命。安裝在假人身上的傳感器所得出的數(shù)據(jù),能幫助工程師們發(fā)現(xiàn)安全隱患,改進(jìn)汽車的設(shè)計(jì)。可以說(shuō),以上就是一次仿真,一輛真車和兩個(gè)假人有計(jì)劃地撞墻,模擬了真實(shí)車禍情況。仿真讓實(shí)驗(yàn)變得可能,因?yàn)闆](méi)有一個(gè)真人愿意坐在車?yán)飬⑴c這場(chǎng)實(shí)驗(yàn)。當(dāng)真實(shí)情況很難在開(kāi)發(fā)時(shí)再現(xiàn)時(shí),仿真就可以幫助開(kāi)發(fā)者完成必要的實(shí)驗(yàn)。這就如同單片機(jī)開(kāi)發(fā)中,我們?cè)谧约旱膶?shí)驗(yàn)板上去開(kāi)發(fā)一款產(chǎn)品一樣。當(dāng)我們?cè)O(shè)計(jì)好了一個(gè)產(chǎn)品的功能,我們要在實(shí)驗(yàn)板上模擬用戶的操作,看看操作是否正常,產(chǎn)品的反應(yīng)速度和穩(wěn)定性如何。這些都是在仿真——模仿用戶使用的真實(shí)情況。
而本文要介紹的是僅使用單片機(jī)的“片上仿真”。片上仿真是基于單片機(jī)本身的仿真,也就是說(shuō)只要一片單片機(jī),不需要額外購(gòu)買別的東西,就可以實(shí)現(xiàn)仿真。對(duì)于單片機(jī)愛(ài)好者來(lái)說(shuō),片上仿真是最高性價(jià)比的選擇,你甚至不需要修改電路,用給單片機(jī)下載HEX文件的電路就能實(shí)現(xiàn)仿真。各大單片機(jī)公司都已開(kāi)發(fā)出不同性能的支持片上仿真的單片機(jī)。其中STC公司有一款性能很不錯(cuò)的片上仿真單片機(jī)——IAP15F2K61S2。下面我就給大家介紹一下片上仿真環(huán)境的建立,還有進(jìn)入仿真界面的操作流程,最后以一個(gè)實(shí)例告訴大家如何進(jìn)行仿真調(diào)試。這是一些非常簡(jiǎn)單的操作,只要按照本文的步驟操作,就一定能順利學(xué)會(huì)。
仿真電路連接
建立單片機(jī)仿真環(huán)境,最主要的工作是設(shè)置軟件的參數(shù),而硬件電路的連接是很簡(jiǎn)單的事。如果你已經(jīng)制作出了ISP下載線,并成功地給單片機(jī)寫(xiě)入了HEX文件。那么從某種意義上講,你已經(jīng)完成了單片機(jī)仿真的硬件電路連接。也就是說(shuō),單片機(jī)仿真電路與ISP下載電路是完全相同的。如果是這樣,我為什么還要花時(shí)間來(lái)講仿真電路的連接呢?因?yàn)殡m然電路連接相同,但單片機(jī)不同了。所以我們不能使用STC12C5A60S2和STC12C4052AD來(lái)仿真,因?yàn)檫@兩款芯片不帶仿真功能。而唯一帶仿真功能的單片機(jī)IAP15F2K61S2是最新發(fā)布的15系列單片機(jī),它有著不相同的引腳定義。我們只要熟悉了它的新引腳定義,再來(lái)制作電路就不難了。
首先最明顯的是引腳定義的不同,雖然IAP15F2K61S2也是40腳的單片機(jī),但如果把它直接插在我們做好的ISP下載線里,你會(huì)發(fā)現(xiàn)單片機(jī)是不工作的。不僅IO接口不兼容,連VCC電源輸入的位置也不同。接下來(lái)是外部晶體的使用, IAP15F2K61S2單片機(jī)不需要接外部晶體,因?yàn)樗膬?nèi)部集成了一個(gè)高精度的時(shí)鐘源,可以用軟件設(shè)置成5~30MHz的時(shí)鐘頻率。這一改進(jìn)對(duì)我們使用者的意義是:不論我們做何應(yīng)用,都不需要外接晶體的電路了。只要連接VCC和GND,單片機(jī)就可以工作。再連接TXD和RXD,單片機(jī)就能ISP下載和仿真了。
可仿真單片機(jī)IAP15F2K61S2
下載/仿真電路原理圖
新建仿真環(huán)境
硬件電路連接完畢后,下面開(kāi)始步驟較多的軟件設(shè)置,請(qǐng)大家一定按我介紹的步驟仔細(xì)進(jìn)行。
第1步:下載到STC-ISP V6.36軟件,目前只有V6.36及以上版本支持仿真功能。
第2步:點(diǎn)擊軟件右側(cè)的“KEIL關(guān)聯(lián)設(shè)置”選項(xiàng)卡。仿真相關(guān)的操作都在這個(gè)選項(xiàng)卡里完成。
第3步:接著點(diǎn)擊“添加MCU型號(hào)到Keil中”。這個(gè)操作效果是把STC芯片的仿真程序與KEIL軟件綁定在一起,這樣KEIL軟件中的仿真功能才能操作STC單片機(jī)硬件。
第4步:在彈出的“瀏覽文件夾”窗口中找到KEIL軟件的安裝目錄,并點(diǎn)擊“確定”(默認(rèn)是在C:Keil中)。
第5步:點(diǎn)擊“將IAP15F2K61S2設(shè)置為2.0版仿真芯片”,在此處可以仿真的芯片有兩款:IAP15F2K61S2和IAP15L2K61S2,前一款是F表示5V電源電壓的芯片,后一款是L表示3.3V電源電壓的芯片。我們以5V芯片為例。
第6步:按下第5步的按鈕后,按鍵變灰,下方狀態(tài)窗口出現(xiàn)“正在檢測(cè)目標(biāo)單片機(jī)……”。這個(gè)提示的意思是你需要給單片機(jī)重新上電了,和之前給單片機(jī)寫(xiě)入HEX文件的方法相同。此時(shí)在硬件上讓單片機(jī)冷啟動(dòng),即會(huì)出現(xiàn)下載程序的提示,最后顯示下載完成。大家可能不明白了,不是要仿真嗎,為什么還要下載程序呢?其實(shí)這次下載的是仿真所需要的仿真處理程序,而不是我們要運(yùn)行的HEX程序文件。仿真處理程序的功能是接收KEIL軟件通過(guò)串口發(fā)出的仿真指令,再用這個(gè)指令去操控單片機(jī)寄存器和IO接口什么的。由此可見(jiàn)仿真處理程序是必不可少的。
第7步:打開(kāi)KEIL,打開(kāi)你想要仿真的項(xiàng)目,我打開(kāi)一個(gè)P1接口流水燈的程序,一會(huì)我們也以此為例詳細(xì)講解。
第8步:點(diǎn)擊Target Options按鍵,或在菜單欄中點(diǎn)擊Projectà Options for Target。
第9步:進(jìn)入Options窗口后,點(diǎn)擊Device選項(xiàng)卡。
第10步:在Database下拉列表中選擇“STC MCU Database”項(xiàng),選中后就會(huì)出現(xiàn)STC系列單片機(jī)的型號(hào)。
第11步:在左側(cè)型號(hào)中選擇“STC15F2K60S2”項(xiàng),這里選的是系列型號(hào),包括同系列的很多款單片機(jī)。
第12步:選擇“Debug”選項(xiàng)卡,這里面都是與仿真相關(guān)的設(shè)置。
第13步:選中窗口右上方的項(xiàng)目。
第14步:在下拉列表中選擇“STC Monitor-51 Driver”項(xiàng)。
第15步:選擇好后,點(diǎn)擊右側(cè)的“Settings”按鈕。
第16步:在彈出的窗口中可以設(shè)置仿真用串口通信的串口號(hào)和波特率。串口號(hào)就選擇單片機(jī)正在使用的串口。
第17步:在波特率下拉列表中選擇115200或57600,這個(gè)部分涉及到仿真的穩(wěn)定性。所以要根據(jù)你的經(jīng)驗(yàn)來(lái)設(shè)置。如果你是第一次使用,可以多設(shè)置幾個(gè)值看看,哪一個(gè)最穩(wěn)定就用哪個(gè)。如果仿真時(shí)出現(xiàn)錯(cuò)誤提示也可能與此有關(guān)。
第18步:設(shè)置完成后回到主界面。點(diǎn)擊DebugàStart/Stop Debug Session或按鍵盤上的Ctrl+F5開(kāi)始仿真。這個(gè)操作是開(kāi)始或停止仿真的切換按鈕。如果我們之前的設(shè)置都是正確的,單片機(jī)硬件也接通了電源,這時(shí)KEIL軟件會(huì)切換到仿真界面。
第19步:點(diǎn)擊仿真界面下的“Run”按鈕或按鍵盤上的F5鍵就能全速運(yùn)行程序了。如果一切正常,你將會(huì)在單片機(jī)硬件電路上看到8個(gè)LED順序點(diǎn)亮,呈現(xiàn)流水燈效果。想復(fù)位單片機(jī),可以按左邊的“RST”按鈕。
第20步:在全速仿真運(yùn)行的狀態(tài)下,點(diǎn)擊“Stop”鍵停止仿真。
注意:如果在進(jìn)入仿真界面或點(diǎn)擊“Run”按鈕后,出現(xiàn)上面的提示窗口,則表示你之前的設(shè)置存在問(wèn)題,或者是硬件電路的部分有異常。解決的辦法是:首先把KEIL軟件退回到正常編程狀態(tài),然后重新給單片機(jī)上電,再嘗試進(jìn)入仿真界面。如果還不行,則重新給單片機(jī)下載一次仿真處理程序。還不行的話,就選擇KEIL仿真設(shè)置里的其他波特率,再重復(fù)前面的嘗試。最后實(shí)在沒(méi)有辦法的話就只能重啟電腦試試了。