Keil Monitor-51仿真板的制作與使用
例:INSTALL 0 7F 0
這條命令將設(shè)置波特率為9600bps,內(nèi)部定時器1為波特率發(fā)生器,要求CPU時鐘為 11.059MHz,Monitor-51內(nèi)部變量空間為:X: 0X7F00..X:0x7FFF,Monitor-51監(jiān)控程序代碼起始地十為:C:0x0000(C表示程序存儲單元)。該命令生成一個 MON51.HEX,將其固化在EPROM中即可使用。
應(yīng)該提醒的是,INSTALL批處理命令中主要用到兩個匯編文件:INSTALL.A51和MON_BANK.A51。根據(jù)硬件配置的具體情況,可能要作一些修改。
INSTALL.A51中修改項主要有兩項:
(1)中斷偏移量設(shè)置:當Monitor-51監(jiān)控程序在ROM中起始地址為0時,采用von Neumann接法的外部數(shù)據(jù)存儲器起始地址為8000H,則中斷偏移量必須設(shè)成8000H,而用戶應(yīng)用應(yīng)用將存放在8000H之后。 INSTALL.A51中的INT_ADR_OFF定義如下:
INT_ADR_OFF EQU 8000H。
(2)波特率修改:Monitor-51的波特率一般設(shè)置成9600bps或自適應(yīng)。若要改成其它波特率,如4800bps,則修改“InitSerial:”節(jié)中的定時器初始化值。
INSTALL.A51中還有許多其它設(shè)置,一般不作修改。
MON_BANK.A51是為代碼區(qū)分組的應(yīng)用程序安排的,此處不作討論。
3 使用中的幾個問題
按前兩節(jié)提供的硬件電路圖和監(jiān)控程序,如果仿真板與目標系統(tǒng)連接無誤,就可調(diào)試使用。但仿真板與目標系統(tǒng)連接有問題或Keil C51軟件設(shè)置不當會遇到一些麻煩,在程序調(diào)試中的主要錯誤與警告有:
ERROR 22:NO CODE MEMORY AT 0x80xx,這是因為仿真板用于存放用戶程序的外部數(shù)據(jù)存儲空間與目標系統(tǒng)地址存在沖突。應(yīng)檢查硬件電路予以解決。
ERROR L107:ADDRESS SPACE OVERFLOW,這是因為用戶程序大于μVision2中設(shè)定的允許長度??蓪⒂脩舫绦蛟试S長度設(shè)到仿真板許可的最大值;若還不能解決,可將程序分段進行調(diào)試。
WARNNING L1:NURESOLVED EXTERNAL SYMBOL,多數(shù)程序員都遇到過此警告,這是由于在生成Monitor-51監(jiān)控程序時(執(zhí)行INSTALL批處理命令)沒有使用[BANK]選項。解決方法是將Startup.A51文件中第140、141行最前面加“;”號注釋掉。Startup.A51是加入到用戶工程文件中的匯編程序,使用 Monitor-51仿真板必須加入此文件。
由于Monitor-51仿真板比較簡單,占用了一些系統(tǒng)資源,有時給用戶帶來了不便。程序員實際編程中常要解決以下兩個問題:
(1)串行接口功能:串行通信是MCS51單片機經(jīng)常要用到的功能,而MCS-51系列單片機只有一個串行通信接口,在與PC機相連的仿真狀態(tài)時,串口用于與 PC機通信。若在應(yīng)用程序中也用到串行口,就會發(fā)生沖突。解決方法是用戶程序裝載完畢后,運行用戶程序,再斷開仿真板與PC機的串行通信線。這樣串口就可歸用戶程序使用了,當然這時PC機就不能在線調(diào)試了。
(2)外部存儲空間:用戶程序越長,占用的外部數(shù)據(jù)存儲空間將越大。解決的方法是對較長的程序進行分段調(diào)試,所有的程序完成后在軟件仿真狀態(tài)(不用 Monitor-51仿真板)生成一個完整的HEX文件。另外,如果系統(tǒng)中還有其它接口器件占用外部數(shù)據(jù)存儲空間,要合理安排。如有一EEPROM要存放歷史數(shù)據(jù),可以在調(diào)試過程中用#define預處理命令將存放歷史數(shù)據(jù)的存儲空間定義在較小的范圍內(nèi),程序編完后再修改范圍進行編譯生成HEX文件。
筆者有多年的匯編語言編程經(jīng)歷,改用Keil C51后感覺很好,編程效率大為提高。經(jīng)過一段時間摸索,自制成了Monitor-51仿真板。使用Monitor-51仿真板,給調(diào)試程序帶來了極大的方便。雖然仿真板占用了一些系統(tǒng)資源,但經(jīng)合理安排,一般的應(yīng)用程序還是可以承受的。
評論