官术网_书友最值得收藏!

1.3 應(yīng)用實(shí)例——MON51單片機(jī)仿真應(yīng)用系統(tǒng)

在51單片機(jī)的應(yīng)用系統(tǒng)的設(shè)計(jì)過程中,常使用仿真器/系統(tǒng)來輔助開發(fā)人員進(jìn)行設(shè)計(jì),仿真器/系統(tǒng)是一個(gè)能模擬51單片機(jī)運(yùn)行并且將其相關(guān)狀態(tài)返回以供開發(fā)人員觀察和調(diào)試的應(yīng)用工具,能夠提高硬件的設(shè)計(jì)和調(diào)試效率。

MON51仿真器是德國Keil公司提供的,可以和Keil μVision開發(fā)環(huán)境配合使用的一種硬件仿真器,本小節(jié)將詳細(xì)介紹這種仿真器的設(shè)計(jì)過程。

1.3.1 MON51單片機(jī)仿真器基礎(chǔ)

MON51仿真器結(jié)構(gòu)如圖1.11所示,其由Keil μVision軟件、51單片機(jī)及外部RAM三個(gè)模塊構(gòu)成。

圖1.11 MON51仿真器結(jié)構(gòu)

● Keil μVision軟件環(huán)境:其運(yùn)行在PC上,給用戶提供一個(gè)編輯和編譯用戶代碼項(xiàng)目的環(huán)境,并且通過PC串口和內(nèi)部運(yùn)行監(jiān)控程序的單片機(jī)相連接,進(jìn)行數(shù)據(jù)信息交流,包括把用戶程序下載到外部RAM中,以及把51單片機(jī)反饋回來的相關(guān)數(shù)據(jù)(寄存器狀態(tài)、內(nèi)存狀態(tài)、變量數(shù)據(jù)等)顯示出來以供用戶觀測。

● 51單片機(jī):其在內(nèi)部同時(shí)運(yùn)行一個(gè)由Keil公司提供的監(jiān)控程序和用戶自己的代碼,并且受到PC上的Keil μVision軟件環(huán)境的控制,將對(duì)應(yīng)的數(shù)據(jù)通過串口反饋給Keil μVision。由于監(jiān)控程序也需要占用一部分單片機(jī)系統(tǒng)資源,所以,在MON51仿真器的使用過程中用戶并不能夠使用單片機(jī)的全部資源。

● 外部RAM:用于存放用戶自己的代碼。

在使用MON51仿真器時(shí),用戶在Keil μVision中編寫自己的程序代碼,編譯通過之后將HEX文件下載到MON51仿真器中的外部RAM內(nèi),51單片機(jī)在監(jiān)控程序下執(zhí)行外部RAM內(nèi)的程序代碼,并且將相關(guān)的信息通過串口返回到PC端,用戶可以在Keil μVision開發(fā)環(huán)境中設(shè)置斷點(diǎn),使用SFR觀測界面等來觀看當(dāng)前的運(yùn)行情況。

1.3.2 MON51單片機(jī)仿真器的應(yīng)用電路

1.MON51仿真器需要占用的基礎(chǔ)資源

MON-51仿真器需要的硬件資源如下:

● 8051及其兼容的MCS-51系列單片機(jī)。

● 5KB的程序存儲(chǔ)空間,用于存放監(jiān)控程序。

● 256B的外部數(shù)據(jù)存儲(chǔ)單元(系統(tǒng)需要)和可選的5KB的跟蹤緩沖區(qū)。

● 足夠大的外部數(shù)據(jù)存儲(chǔ)空間用于裝載完整的用戶應(yīng)用程序。

● 串行口及一個(gè)用做波特率發(fā)生器的內(nèi)部定時(shí)器。

● 6B的堆??臻g,用于用戶程序的測試。

● 如果用戶程序大于64KB,P1口的部分引腳要用于程序存儲(chǔ)空間擴(kuò)展。

注:除了以上所必需的資源,51單片機(jī)的其他資源均可為用戶程序所使用。

2.MON51仿真器中的串口和外部RAM

從圖1.11中可以看到,MON51仿真器除了需要一塊51單片機(jī)之外,還需要一塊外部RAM及一個(gè)PC的串口。

在MON51仿真器中,用戶自己的程序代碼是存放到外部的RAM空間中而不是51單片機(jī)ROM空間中的,所以,該外部RAM必須使用Von-Neumann(馮·諾依曼)連接方式。Von-Neumann連接方式是指將51單片機(jī)的外部數(shù)據(jù)存儲(chǔ)器(XDATA)區(qū)和程序代碼空間(CODE)區(qū)統(tǒng)一編址的方式,在物理連接上其將51單片機(jī)的PSEN引腳和RD引腳通過一個(gè)與門相“與”,將與門的輸入信號(hào)連接到外部RAM的輸出允許端(OE);在Von-Neumann連接方式下該外部RAM就相當(dāng)于51單片機(jī)的外部程序存儲(chǔ)器,需要注意的是,51單片機(jī)內(nèi)的監(jiān)控程序的存放地址空間不能與這種接法的外部數(shù)據(jù)存儲(chǔ)空間相重復(fù)。

串口用于Keil μVision環(huán)境和51單片機(jī)的通信,使用方式和普通串口相同,也僅僅需要串口的第2、第3、第5引腳即可進(jìn)行通信,其中,第2、第3、第5引腳分別對(duì)應(yīng)“收”、“發(fā)”、“地”信號(hào)。但是出于綜合考慮,在Keil公司推薦的連接方式中將串口的第7、第8引腳相連,第1、第4、第6引腳相連,這樣可以保證串口在大多數(shù)情況下使用。

3.MON51仿真器的應(yīng)用電路

圖1.12所示是MON51仿真器的應(yīng)用電路圖,其中,外部RAM使用HM62256的64KB并行接口RAM芯片,其有足夠的存儲(chǔ)空間可以用于存放用戶程序;使用74HC08把51單片機(jī)的PSEN和RD信號(hào)相“與”,然后連接到HM62256的OE端口,實(shí)現(xiàn)Von-Neumann;使用一個(gè)MAX232作為串口電平轉(zhuǎn)化芯片來將51單片機(jī)的串行接口和PC連接起來。

圖1.12 MON51仿真器的應(yīng)用電路

1.3.3 MON51單片機(jī)仿真器的軟件環(huán)境配置

在Keil μVision開發(fā)環(huán)境的安裝目錄“\Keil\C51\MON51”中有MON51仿真器的配置軟件INSTALL.BAT,用戶可以使用該文件來生成自己需要的配置文件。在相同文件夾下還有文件INSTALL.A51和MON_BANK.A51,這兩個(gè)文件是MON51仿真器的資源配置文件,用戶需要修改相關(guān)參數(shù)才能使得仿真器正常運(yùn)行,如圖1.13所示。

1.配置INSTALL.BAT

INSTALL.BAT文件用于配置MON51仿真器的具體硬件資源,是必須在DOS或者CMD環(huán)境下運(yùn)行的批處理文件,其命令行參數(shù)格式如下:

INSTALL serialtype [xdatastart  [codestart   [BANK]   [PROMCHECK]]]
//后面兩參數(shù)為可選項(xiàng)

注:直接在DOS或者CMD環(huán)境下輸入上述命令行(serialtype、xdatastart等參數(shù)要更換為具體的實(shí)際使用值)即可。

圖1.13 MON51目錄中的文件

● serialtype參數(shù)用于設(shè)置單片機(jī)串口相關(guān)參數(shù),是0~12的正整數(shù),具體設(shè)置如表1.1所示。

表1.1 serialtype參數(shù)選擇

● xdatastart參數(shù)用于指定MON51仿真器上運(yùn)行的監(jiān)控程序所使用的外部存儲(chǔ)單元的頁號(hào)(一頁為256B),其取值為0x00~0xFF。如果xdatastart為0xFF,則外部數(shù)據(jù)存儲(chǔ)單元0xFFFF被MON51仿真器的監(jiān)控程序用于存放內(nèi)部變量,用戶自己的程序代碼不能使用這個(gè)地址空間。

● codestart參數(shù)用于指定監(jiān)控程序在程序存儲(chǔ)器的起始位置,其取值為0x00~0xF0之間的十六進(jìn)制數(shù),默認(rèn)值為0x00。

● BANK參數(shù)是可選項(xiàng),為代碼區(qū)分組的應(yīng)用程序安排,應(yīng)用程序不超過64KB,一般不選此項(xiàng),可以通過修改INSTALL.A51來修改相關(guān)的設(shè)置。

● PROMCHECK參數(shù)也是可選項(xiàng),如果選擇了該參數(shù)則MON51的監(jiān)控程序會(huì)在51單片機(jī)復(fù)位時(shí)檢查在程序存儲(chǔ)區(qū)0x0000地址處的存儲(chǔ)器是EPROM還是RAM。

例1.1是使用INSTALL.BAT來生成MON51仿真器配置文件的實(shí)例,圖1.14和圖1.15所示是在WindowsXP的CMD命令行格式下對(duì)應(yīng)的操作界面。

【例1.1】使用“0 7F 0”作為參數(shù),該參數(shù)指明當(dāng)前MON51仿真器使用的是8051系列的單片機(jī),單片機(jī)的時(shí)鐘為11.0592MHz,串口的波特率為9600bps,使用單片機(jī)內(nèi)部定時(shí)器1作為波特率發(fā)生器;MON51仿真器所使用的內(nèi)部變量空間是外部RAM位于0x7F00~0x7FFF的部分,MON51監(jiān)控程序代碼存放的起始地址是程序存儲(chǔ)器的0x0000地址單元。

INSTALL   0  7F  0

使用以上配置命令行的過程如圖1.14和圖1.15所示,在批處理文件運(yùn)行完成后可以在INSTALL.BAT的相同目錄下看到生成一個(gè)名稱為MON51.HEX的文件,將該十六進(jìn)制文件燒寫進(jìn)MON51仿真器中的51單片機(jī)中即可。

圖1.14 配置INSTALL.BAT實(shí)例(步驟1)

圖1.15 配置INSTALL.BAT實(shí)例(步驟2)

2.配置“.A51”文件

“\Keil\C51\MON51”目錄下的INSTALL.A51和MON_BANK.A51文件用于配置不同MON51仿真器硬件環(huán)境下的內(nèi)存空間。

INSTALL.A51文件主要用于設(shè)置MON51仿真器的中斷偏移量和波特率。當(dāng)MON51仿真器的監(jiān)控程序在ROM中起始地址為0x0000時(shí),用戶程序?qū)o法使用51單片機(jī)的的中斷功能,此時(shí)必須將MON51仿真器中的51單片機(jī)的所有的中斷入口地址轉(zhuǎn)移至高地址中的RAM區(qū),這樣用戶程序就可以使用中斷功能了。如果MON51仿真器的監(jiān)控程序代碼的起始地址不為0x0000時(shí),則不需要設(shè)置中斷偏移量。需要注意的是,在修改RAM中斷入口地址時(shí)一定要將該地址設(shè)置到監(jiān)控程序未使用的地址空間,例1.2是配置“.A51”文件來修改中斷偏移量的實(shí)例。

【例1.2】MON51仿真器的監(jiān)控程序代碼的起始地址為0,采用Von-Neumann連接方式的外部數(shù)據(jù)存儲(chǔ)器起始地址為0x8000H,則中斷偏移量的起始地址也必須修改為0x8000H,而用戶應(yīng)該將應(yīng)用程序存放在地址0x8000H之后。INSTALL.A51中的INT_ADR_OFF應(yīng)該被修改,用編輯器打開“.A51”文件,找到對(duì)應(yīng)的行,進(jìn)行如下修改。

INT_ADR_OFF  EQU  8000H

INSTALL.A51還可以用于修改MON51仿真器和PC通信的波特率,MON51仿真器的波特率一般設(shè)置為9600bps或自適應(yīng),若要改成其他波特率,則修改“InitSerial:”節(jié)中的定時(shí)器初始化值即可,如例1.3所示。

【例1.3】通過修改InitSerial相關(guān)參數(shù)來修改通信波特率。

;********************************************************************
;*  Using TIMER 1 to Generate Baud Rates                        *
;*  Oscillator frequency = 11.059 MHz                           *
;*  Set Baudrate to 9600 Baud                                  *
;********************************************************************
InitSerial: PROMCHECK             ; Check if PROM in System
              MOV    TMOD,#00100000B ;C/T = 0, Mode = 2
              MOV    TH1,#0FDH
              SETB   TR1
              MOV    SCON,#01011010B ; Init Serial Interface
              JMP    Mon51
$ENDIF

注:通過設(shè)置TMOD等相關(guān)參數(shù)值即可以修改MON51仿真器的通信波特率,不過這個(gè)值一般使用INSTALL.BAT批處理參數(shù)來設(shè)置,除非這個(gè)波特率不是表1.1中列出的非標(biāo)準(zhǔn)波特率并且在自適應(yīng)中出現(xiàn)困難。

INSTALL.A51文件中還有許多其他設(shè)置,一般不需要進(jìn)行修改,而MON_BANK.A51文件是為代碼區(qū)分組的應(yīng)用程序安排的,此處不作討論,讀者如果有興趣可以參看“\Keil\C51\MON51”下的PDF文件。

1.3.4 MON51單片機(jī)仿真器的使用方法

在配置好INSTALL.BAT文件后生成的MON51.HEX文件燒入51單片機(jī)之后,MON51仿真器就可以使用了,本小節(jié)介紹該仿真器的使用方法,主要講解如何設(shè)置PC端的Keil μVision軟件環(huán)境和修改工程項(xiàng)目的相關(guān)運(yùn)行文件。

1.配置Keil μVision工程項(xiàng)目環(huán)境

在Keil μVision環(huán)境中建立一個(gè)項(xiàng)目文件并且編譯通過,確定MON51仿真器硬件系統(tǒng)已經(jīng)連接,則可以進(jìn)入軟件環(huán)境設(shè)置步驟。

● 修改MON51仿真器波特率:在“Project/Options for Target 'Target1'/Options for Target 'Target1'”對(duì)話框中的Target標(biāo)簽下,修改Xtal(MHz)為MON51仿真器所使用的波特率,如11.0592,如圖1.16和圖1.17所示。

● 修改中斷向量偏移地址:將上述對(duì)話框中的C51標(biāo)簽下的Interrupt vectors at address修改為實(shí)際使用的地址,如0x8000,如圖1.17所示。

圖1.16 Keil μVision環(huán)境設(shè)置(步驟1)

圖1.17 Keil μVision環(huán)境設(shè)置(步驟2)

● 修改代碼空間地址:在如上對(duì)話框中的BL51 Locate標(biāo)簽Code中填入對(duì)應(yīng)的代碼空間地址,如0x8000,如圖1.18所示。

圖1.18 Keil μVision環(huán)境設(shè)置(步驟3)

● 選擇仿真器:在如上對(duì)話框的Debug標(biāo)簽選中Use:keil Monitor-51 Driver,如圖1.19所示。

圖1.19 Keil μVision環(huán)境設(shè)置(步驟4)

● 設(shè)置MON51仿真器使用的串口號(hào):單擊Debug標(biāo)簽中的Settings按鍵,根據(jù)現(xiàn)實(shí)中使用的PC串口來選擇Port編號(hào),如圖1.20所示。

● 設(shè)置用戶代碼運(yùn)行方式:選中Debug標(biāo)簽下的Load Application at Start,然后選中Go till main(),如圖1.21所示。

通過以上的設(shè)置,MON51仿真器的Keil μVision工程項(xiàng)目環(huán)境已經(jīng)設(shè)置完成,下一步只需要修改工程項(xiàng)目的相關(guān)配置文件“.A51”即可使用。

2.配置工程項(xiàng)目的“.A51”文件

在Keil μVision的每一個(gè)項(xiàng)目文件里面都有一個(gè)Startup.A51文件,包含了51單片機(jī)初始化的一些相關(guān)參數(shù),包括中斷向量地址、內(nèi)存初始化值等,在使用MON51仿真器的時(shí)候需要將該文件中的CSEG AT 0替換為CSEG AT xxxx,以保證外部地址的不沖突,其中, xxxx為相應(yīng)的地址單元,通常為0x8000H等。

注:在圖1.12給出的應(yīng)用電路圖中,外部RAM地址是從0x0000開始的,所以不需要修改。

圖1.20 Keil μVision環(huán)境設(shè)置(步驟5)

圖1.21 Keil μVision環(huán)境設(shè)置(步驟6)

3.運(yùn)行MON51仿真器

當(dāng)完成前兩步配置之后即可運(yùn)行MON51仿真器。

● 單擊Debug/Start Stop Debug Session,MON51仿真器則進(jìn)入Debug模式,在進(jìn)入Debug的過程中可以看到左下角有一個(gè)程序下裝的進(jìn)度條,如圖1.22所示。

圖1.22 進(jìn)入Debug模式

● 進(jìn)入Debug模式之后出現(xiàn)多個(gè)Debug對(duì)話框,例如,Disassembly(編譯)、Serial#1 (串口1)對(duì)話框等,可以看到相關(guān)的代碼執(zhí)行情況,在左邊的Regs(寄存器)對(duì)話框則可以看到相應(yīng)的特殊寄存器情況,可以通過單擊Debug菜單來完成相應(yīng)的設(shè)置或者退出Debug環(huán)境,如圖1.23所示。

圖1.24所示的是一個(gè)使用中的MON51仿真器實(shí)物圖。

1.3.5 MON51仿真器注意事項(xiàng)

前面介紹了MON51仿真器的硬件設(shè)計(jì)和軟件配置方法,本小節(jié)介紹其在實(shí)際使用中的一些使用技巧。

1.常見的錯(cuò)誤

● ERROR 22,NO CODE MEMORY AT 0x80xx:這是因?yàn)镸ON51仿真器用于存放用戶程序代碼的外部數(shù)據(jù)存儲(chǔ)RAM的地址空間與用戶程序代碼所使用的目標(biāo)系統(tǒng)地址存在沖突,應(yīng)檢查硬件電路和軟件設(shè)置,看看地址的分配是不是有沖突,如有則可以通過更改相應(yīng)的“.A51”文件解決。

圖1.23 debug模式下的菜單

圖1.24 MON51仿真器實(shí)物圖

● ERROR L107,ADDRESS SPACE OVERFLOW:這是因?yàn)橛脩舫绦虼a的總長度超過了Keil μVision中設(shè)定的允許長度。可將用戶程序允許長度設(shè)到仿真器所允許的最大值之內(nèi);若還不能解決,可將程序分段進(jìn)行調(diào)試。

● WARNING L1,UNRESOLVED EXTERNAL SYMBOL:這是由于在生成MON51仿真器的監(jiān)控程序時(shí),即執(zhí)行INSTALL批處理命令時(shí)沒有使用[BANK]選項(xiàng)。解決方法是將Startup.A51文件中第140、141行最前面加“;”號(hào)注釋掉。

注:使用MON51仿真器的時(shí)候項(xiàng)目工程必須加入Startup.A51文件并且做相應(yīng)的設(shè)置。

2.關(guān)于MON51仿真器的資源使用技巧

由于MON51仿真器需要占用51單片機(jī)的一些系統(tǒng)資源,給用戶在編寫自己的用戶代碼時(shí)帶來了不便,尤其需要注意以下兩個(gè)問題。

● 串口的使用歸屬:串口是51單片機(jī)經(jīng)常需要使用的功能模塊,而大多數(shù)51單片機(jī)只有一個(gè)串口,在MON51仿真器與PC相連的仿真狀態(tài)時(shí),該串口用于MON51仿真器與PC通信。若用戶的應(yīng)用程序中也用到串口,就會(huì)發(fā)生沖突,解決方法是在用戶程序裝載完畢后,運(yùn)行用戶程序,再斷開仿真器與PC的串行通信線,此時(shí)串口就可歸用戶程序使用了,當(dāng)然這時(shí)PC就不能在線調(diào)試了。

● 外部存儲(chǔ)空間的大?。寒?dāng)用戶的應(yīng)用程序越長,則其所占用的外部數(shù)據(jù)存儲(chǔ)將越大,當(dāng)超過了外部存儲(chǔ)空間的大小的時(shí)候,就會(huì)出現(xiàn)錯(cuò)誤,其解決的方法是對(duì)較長的程序進(jìn)行分段調(diào)試。所有的程序完成后在軟件仿真狀態(tài)(不用MON51仿真器)生成一個(gè)完整的HEX文件。另外,如果應(yīng)用系統(tǒng)中還有其他接口器件占用外部數(shù)據(jù)存儲(chǔ)空間,要合理安排。例如,如果有一塊E2PROM用于存放歷史數(shù)據(jù),可以在調(diào)試過程中用#define預(yù)處理命令將存放歷史數(shù)據(jù)的存儲(chǔ)空間定義在較小的范圍內(nèi)。

主站蜘蛛池模板: 乐东| 临清市| 云阳县| 龙门县| 沈阳市| 武隆县| 五家渠市| 盐亭县| 伊金霍洛旗| 高州市| 裕民县| 左贡县| 吉林市| 巨野县| 色达县| 昌图县| 内丘县| 民权县| 蓬莱市| 哈密市| 禹州市| 青铜峡市| 洪雅县| 滨海县| 崇明县| 汉川市| 西华县| 阳信县| 和硕县| 始兴县| 海盐县| 汽车| 八宿县| 濉溪县| 彰化市| 隆回县| 改则县| 东光县| 元谋县| 开封县| 东明县|