STC Monitor-51的單片機在線仿真調(diào)試
摘要:51內(nèi)核單片機在線仿真調(diào)試是一種取代專業(yè)仿真器的有效手段。利用ISP/IAP方法和STC Monitor-51監(jiān)控程序,以及單片機集成開發(fā)環(huán)境Keil C51的在線仿真功能的支持,STC公司的IAP15F2K61S2單片機實現(xiàn)了在線仿真調(diào)試功能,為單片機教學(xué)和應(yīng)用開發(fā)提供了一條新的途徑。
引言
當(dāng)今很多院校中,單片機的教學(xué)仍以經(jīng)典的51內(nèi)核單片機為主。其實驗與應(yīng)用開發(fā)中最重要的環(huán)節(jié)是軟、硬件綜合調(diào)試,通常采用的方法主要有兩種:一種是使用仿真器,優(yōu)點是功能齊全,但是價格較高,一般廠家研發(fā)采用;另一種是使用軟件仿真和芯片直接燒寫驗證的方法,其成本雖然低,但在程序或硬件出現(xiàn)疑難問題時,很難找到原因。
實際上,還有一種成本低且具有在線仿真調(diào)試功能的技術(shù)是在線仿真調(diào)試,它特別適合初學(xué)者。“在線仿真調(diào)試”是指:通過Keil C51編譯器,結(jié)合單片機中的監(jiān)控程序,對系統(tǒng)的應(yīng)用程序和硬件進行仿真調(diào)試,可以讓單片機以單步、斷點、全速等運行模式來執(zhí)行程序。在線仿真調(diào)試是單片機應(yīng)用開發(fā)過程中的高效方法,國內(nèi)STC公司的51內(nèi)核單片機IAP15F2K61S2便具有在線仿真調(diào)試功能。
1 在線仿真調(diào)試概述
Keil C51編譯器開放了調(diào)試器與目標(biāo)芯片的接口,只要芯片廠商提供自己特有的驅(qū)動程序(動態(tài)鏈接庫DLL),就能使Keil調(diào)試器在不改變圖形界面的情況下支持相應(yīng)的硬件仿真調(diào)試。
STC Monitor-51是STC公司開發(fā)的內(nèi)嵌Keil C51編譯器的目標(biāo)系統(tǒng)調(diào)試模塊,它是一個實時監(jiān)控程序,可利用PC機的USB口與目標(biāo)端進行通信。在線仿真調(diào)試系統(tǒng)的結(jié)構(gòu)示意圖如圖1所示。
PC機端由Keil調(diào)試器和STC Monitor-51的驅(qū)動程序stcmon51.DLL組成,stcmon51.DLL是STC公司自主開發(fā)的Keil仿真驅(qū)動協(xié)議,功能相比于 Keil自帶的Mon51.DLL有較大的突破,例如:更改通信接口為真正的USB口,支持Keil Flash Download功能,支持軟件復(fù)位,增加斷點數(shù)量等。目標(biāo)端由USB轉(zhuǎn)串口芯片CH340、51內(nèi)核單片機及STC Monoitor-51監(jiān)控程序組成。Keil調(diào)試器將用戶的調(diào)試指令通過PC機的USB口傳送給目標(biāo)端;目標(biāo)端的USB轉(zhuǎn)串口芯片將其轉(zhuǎn)換為TTL電平后發(fā)送給單片機,最后由單片機中駐留的STC Monitor-51監(jiān)控程序分析并執(zhí)行。
2 在線仿真調(diào)試實現(xiàn)
2.1 IAP15F2K61S2的存儲器結(jié)構(gòu)
STC Monitor-51具有載入并執(zhí)行用戶程序的功能,所以要求單片機的程序存儲器為Flash ROM,并具有ISP功能。ISP(In System Programming,在系統(tǒng)編程)指電路板上器件不用取出,就可以寫入用戶代碼,已經(jīng)編程的芯片也可以用ISP方式擦除或再編程。
IAP15F2K61S2單片機的程序存儲器與數(shù)據(jù)存儲器是獨立編址的。IAP15F2K61S2單片機內(nèi)部在物理上有4個相互獨立的存儲器空間;程序存儲器(程序Flash)、片內(nèi)基本RAM、片內(nèi)擴展RAM與EEPROM(數(shù)據(jù)Flash)。IAP15F2K61S2單片機片內(nèi)集成了61 KB的程序Flash存儲器,其地址為0000H~F3FFH。用戶可以使用的最大程序空間為55 KB,整個程序Flash存儲器的分布圖如圖2所示。
很多單片機在出廠時已經(jīng)將具有Boot loader功能的程序固化在系統(tǒng)區(qū)中,因此無需編程器就可通過ISP下載軟件將用戶程序下載到Flash ROM中。STC公司的單片機可以進行ISP串行下載程序,就是因為系統(tǒng)區(qū)中有芯片出廠時就已經(jīng)固化的ISP引導(dǎo)碼。如果想要下載應(yīng)用程序至單片機,先要在下載軟件界面上進行相應(yīng)選擇,然后再上電,當(dāng)單片機檢測到上位機中有特定的下載條件時,便啟用ISP下載功能將程序下載至用戶程序區(qū);否則,單片機便會從用戶應(yīng)用程序區(qū)中開始執(zhí)行代碼。
STC公司的最新ISP下載軟件stc-isp-15xx-v6.77.exe還可以將STC Monoitor-51監(jiān)控程序下載到監(jiān)控程序區(qū),從而實現(xiàn)在線仿真調(diào)試功能。
2.2 IAP15F2K61S2的ISP和IAP實現(xiàn)
在線仿真調(diào)試功能的實現(xiàn)依賴于用戶系統(tǒng)內(nèi)部的監(jiān)控程序和PC機上的下載程序。其具體實現(xiàn)主要利用IAP(In Applicatin Programming,在應(yīng)用編程)技術(shù),即在程序運行時程序存儲器可由程序自身進行擦寫。IAP15F2K61S2單片機的IAP功能,與以下幾個特殊功能寄存器有關(guān)。
IAP_DATA:ISP/IAP數(shù)據(jù)寄存器,從Flash讀出的數(shù)據(jù)放在此處,寫入Flash的數(shù)據(jù)也需放在此處。
IAP_ADDRH:ISP/IAP地址寄存器高8位。
IAP_ADDRL:ISP/IAP地址寄存器低8位。
IAP_CMD:ISP/IAP命令寄存器,須IAP_TRIG觸發(fā)方可生效。
IAP_TRIG:ISP/IAP命令觸發(fā)寄存器。
IAP_CONTR:ISP/IAP控制寄存器。
當(dāng)IAPEN(IAP_CONTR.7)=1時,只有對IAP_TRIG先寫入0x5A、再寫入0xA5,ISP/IAP命令才會生效。
ISP/IAP操作完成后,IAP命令寄存器、IAP地址高8位地址寄存器和低8位地址寄存器的內(nèi)容都不變。如果需要對下一個地址的數(shù)據(jù)進行 ISP/IAP操作,則要手動將該地址的高8位和低8位對應(yīng)寫入地址寄存器中。每次進行IAP操作時,都要對IAP_TRIG先寫入0x5A,再寫入 0xA5,ISP/IAP命令才會生效。
ISP/IAP命令寄存器IAP_CMD的格式如表1所列。通過對命令寄存器IAP_CMD的MS1和MS0位進行賦值,可以實現(xiàn)相應(yīng)功能。
IAP15F2K61S2程序在用戶應(yīng)用程序區(qū)時,不僅可以對數(shù)據(jù)Flash區(qū)(EEPROM)進行字節(jié)讀、字節(jié)編程和扇區(qū)擦除,而且可以修改用戶應(yīng)用程序區(qū)。扇區(qū)擦除程序示意性代碼如下所示,其他ISP/IAP操作類似。
IAP_ADDRH=EE_address/256; //送扇區(qū)地址高字節(jié)(地址需要改變時才需重新送地址)
IAP_ADDRL=EE_address%256; //送扇區(qū)地址低字節(jié)(512字節(jié)/扇區(qū))
IAP_CONTR=0xS0; //設(shè)置等待時間,允許ISP/IAP操作,送一次就夠
IAP_CMD=3; //送扇區(qū)擦除命令,命令不需改變時,不需重新送命令
IAP_TRIG=0x5A;
IAP_TRIG=0xA5; //ISP/IAP觸發(fā)命令
2.3 監(jiān)控程序
為配合Keil調(diào)試器的硬件仿真調(diào)試,監(jiān)控程序應(yīng)具備相應(yīng)的單步、斷點設(shè)置、ID讀取等功能。仿真開始時,監(jiān)控程序接收命令,判斷相應(yīng)的功能操作,再執(zhí)行。STCMonoit or-51監(jiān)控程序只能在程序中給定點處監(jiān)測,調(diào)試時需要占用程序空間,屬于一種侵入式的調(diào)試,其工作流程如圖3所示。
2.4 IAP15F2K61S2在線仿真調(diào)試過程
以前的51內(nèi)核單片機在線仿真調(diào)試時,需要根據(jù)硬件結(jié)構(gòu),修改應(yīng)用程序和Keil C51集成開發(fā)環(huán)境的參數(shù),初學(xué)者不易掌握,從而影響普及推廣。STC公司的IAP15F2K61S2是十分易用的在線仿真調(diào)試芯片,只需利用最新ISP 下載軟件stc-isp-15xx-v6.77.exe,將監(jiān)控程序下載到單片機中,就可輕松地實現(xiàn)在線仿真調(diào)試功能。IAP15F2K61S2線仿真調(diào)試過程如下。
2.4.1 安裝仿真驅(qū)動
運行ISP下載軟件stc-isp-15xx-v6.77.exe,在“Keil仿真設(shè)置”頁面中單擊“添加MCU型號到Keil中”按鈕,在出現(xiàn)的目錄選擇窗口中,確定到Keil的安裝目錄(一般可能為“C:\Keil\”)。添加頭文件的同時也會安裝STC的STC Monitor-51仿真驅(qū)動stcmon51.DLL。
2.4.2 創(chuàng)建仿真芯片
將一顆IAP15F2KG1S2通過目標(biāo)板連接到電腦的USB口,然后在“Keil仿真設(shè)置”頁面中單擊“將IAP15F2K61S2設(shè)置為仿真芯片”按鈕,再給目標(biāo)板上電,當(dāng)程序下載完成后仿真器便制作完成。
2.4.3 創(chuàng)建項目工程
若上一步的驅(qū)動安裝成功,則在Keil中新建項目工程、選擇芯片型號時,便會有“STC MCU Database”的選擇項,然后從列表中選擇相應(yīng)的MCU型號(目前STC支持仿真的型號只有STC15F2K60S2),單擊“確定”完成選擇,再按Keil的一般使用方法添加源程序到項目工程中,若編譯無誤,則可以進行下面的項目設(shè)置。
2.4.4 硬件仿真驅(qū)動選擇
選擇Project中的Opertions for Target’Target1’,進入“Debug”設(shè)置頁,在右側(cè)的硬件仿真驅(qū)動下拉列表中選擇“STC Monitor-51 Driver”項,然后單擊“Settin gs”按鈕,對串口的端口號和波特率進行設(shè)置,波特率一般選擇115 200或者57 600。到此設(shè)置便完成了。
2.4.5 在線仿真調(diào)試
在這個Keil工程下,按下“Ctrl+F5”即可開始在線仿真調(diào)試。若硬件連接無誤,將會進入到類似于常用的軟件調(diào)試,并在命令輸出窗口顯示當(dāng)前的仿真驅(qū)動版本號和當(dāng)運行、全速運行等進行仿真調(diào)試。調(diào)試中的注意事項主要有:斷點設(shè)置的個數(shù)不要太多,否則會影響調(diào)試速度;若仿真源代碼為匯編程序,則第一條語句必須是長跳轉(zhuǎn)語句,不能使用其他語句;仿真中,不能使用與P3.0和P3.1引腳相關(guān)的中斷和功能。
結(jié)語
結(jié)合IAP15F2K61S2單片機與監(jiān)控程序STC Monoitor-51、Keil C51集成開發(fā)軟件,提供了一種成本低、功能強的在線硬件仿真調(diào)試技術(shù),降低了使用單片機開發(fā)工具的門檻,特別適用于單片機初學(xué)者以及學(xué)校的教學(xué)活動,也為選用51內(nèi)核單片機進行應(yīng)用開發(fā)帶來了極大便利,只需下載監(jiān)控代碼就可以進行在線仿真調(diào)試。