選擇分類:當前分類——當前分類
本站推薦:
價廉物美的STC 89C516RD在線仿真器
文章長度[] 加入時間[2007/6/20] 更新時間[2025/2/5 11:27:09] 級別[0] [評論] [收藏]

價廉物美的STC 89C516RD在線仿真器

    仿真器對單片機初學者來說既是那么耳熟,同時又有些陌生,這主要是因為市場上傳統的仿真器價格都在千元以上,對經濟不是非常寬裕的人來說是不小的開支。同時仿真器是用來提高調試程序效率的,也不是非需不可的,所以站長在自學單片機開始的時候也沒有用過仿真器,碰到程序出錯的時候,只好苦思冥想,或者在程序中插入一些驅動端口的指令,然后再接上一些發光二極管做簡單指示,一般調試一個程序,反復燒寫幾十次芯片是很經常的。

    現在我們介紹一種新型的廉價在線仿真器:它使用一片宏晶公司 【SST公司】的STC89C516RD 的單片機,仿真機通過串口與 PC 連接,該型號單片機是51系列單片機中的一種,具有ISP(在系統可編程)功能,程序可串行下載,可仿真63K用戶程序空間,具有450個外部RAM字節。

   本仿真器是由湖南的一位知名老師開發的,他開發單片機十幾年,經常在電子報刊上發表單片機方面的文章,現在STC89C516RD仿真器銷售累計超過800臺,被當地少年宮用于單片機教學效果非常好,高中生只要半天時間就能掌握操作技能,同時仿真器的定價也考慮到大多數單片機初學者的經濟承受能力,遠低于而網上同類型產品,我們開發推廣這個產品的目的在于讓更多的人熟悉掌握單片機技術。  

廉價仿真器的產品特點:

1、和市場上采用SST公版監控程序的仿真器有本質的區別,采用SST公版監控程序的仿真器單步運行緩慢,并且每次下載都要手動復位,而我們的仿真器下載程序極快,17K的程序代碼下載只需4S。

2、我們自己開發監控程序,所以仿真器具有脫機運行功能,可以簡化開發的過程!而采用SST公版監控程序的仿真器是不具有脫機功能的。

3、我們的仿真器克服了單片機的FLASHROM容易損壞的缺點,而改用XDATA RAM保存數據減少了耗時的FLASHROM操作,無論是跨步還是單步執行的速度奇快,性能也大大提高。

4、為解決單步執行區存在頻繁讀寫的問題,創新地采用循環寫入法,用多個FLASHROM來做單步執行區,避免了對某一個固定字節的讀寫,產品壽命提高56倍。

5、仿真器采用Monitor-51 V4.8的驅動。支持Keil V7.0 uVision2、uVision3。

6、下載用戶程序,采用“比對”法,可以減少寫入的次數!同時提高了下載速度!

7、仿真器的端口可以驅動8mA電流,輕松驅動LED等負載

廉價仿真器的主要性能:

1、 直接支持 KEIL C51 的 IDE 開發仿真環境。
2、 可單步、斷點、全速運行調試程序、可參考變量、RAM變量。
3、 支持匯編、C語言混合調試。
4、 片內 63K 程序空間可以隨時進行在線程序更新。
5、 完全仿真 P0、P2 、P1、P3口(P3.0,P3.1除外)。
6、 系統仿真頻率配置 11.0592 MHz晶振,采用115.2kb波特率通訊,可以極速下載程序!。
7、 可以仿真標準的 89C51、89C52、89C58、SST89C58 等51內核的單片機。
8、 仿真時僅2個sp占用,仿真更加全面真實。監控程序和用戶程序采用獨立的模擬堆棧,互不影響。
9、  不需用復位鍵復位仿真機,即可N次下載仿真!
10、監控程序自我修復功能,不會出現監控程序被用戶程序覆蓋后無法再仿真的情況,這也是本仿真器的一大特色!
11、片上帶有450字節的xdata,您可以在仿真時選擇使用他們,進行xdata的仿真。
12、仿真時監控和用戶代碼分離,而且監控代碼被硬件鎖定,不可能產生不能仿真的軟故障。
13、有脫機運行用戶程序模式,這時仿真機就相當于目標板上燒好的一個芯片,可以完全真實的運行,完全不占用任何資源。這種情況下實際上就變了一個下載器,而且下次上電時仍然可以運行上次下載的程序。

    這是本仿真器的一個特色。你可以在仿真的過程中設置一個標記,之后即使脫離仿真狀態,仿真機中的用戶程序也可以單獨運行,而且這種運行狀態就像是燒錄好的芯片一樣,是完全真實的運行,沒有占用任何用戶資源。

    標記設立的方法:當你裝載程序到仿真機中后,在斷開連接之前,在非全速運行狀態下,在命令行輸入:“e c:0ffffh=0”。仿真器就會在程序空間的0FFFFh地址位置寫一個0,這個內部標志就是脫機運行用戶程序標記。如果程序正在全速運行則標記寫不進去,建議在下載完代碼之后立即做這個操作。

標記設立的方法如下圖:

    這時再斷開連接,按仿真機復位鍵之后,仿真器不再擦除用戶先前仿真時下載的用戶程序代碼,同時仿真機將進入3秒鐘的等待連接時間,3秒鐘過后,開始進入用戶程序運行。這時的運行結果就如同燒片結果一樣。即使是斷電后再啟動,用戶程序也不會消失,復位后可以照常運行。

操作過程:正常仿真->設立標志->復位->自動延遲3秒->進入脫機用戶程序運行

    如果你希望返回到仿真狀態,只要在啟動時的3秒鐘等待連接時間段,從電腦連接進入KEIL UV2的調試環境。連接后會自動擦除脫機運行標記和用戶空間,重新根據用戶操作進行新的調試,這時就和平時仿真的情況一樣的了。因為標記已擦除,下次重新進入仿真時也不會只有3秒鐘的等待,而是無限等待了,這和剛開始使用時是一樣的。

廉價仿真器占用資源:☆ T2定時器、UART口! XRAM:1BAH-2FFH ☆ FE00H-FFFFH

仿真軟件安裝,就是Keil C51軟件的安裝。(請自行安裝!)

二、Keil C51 V6.12軟件安裝:

    首先我們要安裝Keil C51 V6.12軟件,這個軟件也是STC89C516RD仿真器電腦端調試軟件。

點擊這里可以下載Keil C51 V6.12軟件(已經漢化解密)

    將網上下載到的KEILc51v612.rar文件經過vrv解壓縮軟件解壓縮到某個目錄下,如復D:\keilC51 然后執行D:\keilC51\setup\setup.exe 安裝程序,選擇安裝Eval Version版進行(試用版)進行安裝,這時會有2K程序限制。這2K是指最終代碼大小,通常已經足夠使用。

    您也可以選擇FULL Version正式版安裝。注冊碼:K199U-20071-12A9U當出現Please insert the add-on disk的提示畫面,可按next按鈕(不用插入軟盤)安裝好之后就可以使用,沒有代碼大小的限制,這是完全版,比 Eval版增 加浮點庫等內容。軟件安裝成功后請執行補丁程序和漢化程序,詳細看內部說明. KEIL 51軟件安裝完成后,雙擊桌面圖標運行軟件:

2.2 仿真器硬件連接

§仿真器直接插入用戶的應用板MCU的位置(注意晶振部分不能和目標板連接)。

§仿真器通過串口插頭,插入COM口與PC通訊。

§仿真器上電后,LED指示燈會閃爍2下。

§仿真器可以由目標板提供電源,也可以獨立提供電源。建議使用目標板提供電源!

2.3 仿真器使用設置

仿真器采用Monitor-51 V4.8協議,在使用之前應必須對軟件項目進行如下設置:

1、單擊“Project”菜單,再在下拉菜單中單擊“” 在下圖中,單擊“Target”選擇工作頻率(11。0592MHz)。

2、單擊“Debug”中單擊 “Keil Monitor-51 Driver”,即選擇了C51-II仿真器。

7、 單擊“Settings”選擇您要使用串口,波特率 115200。

4、單擊“Serial Interrupt”選擇通過串口中斷,停止用戶運行程序。

此項選擇非常重要!必須選擇

為了不用仿真機的復位鍵,而能N次仿真,必須在用戶程序中定義如下的變量:

char code reserve [3] _at_ 0x23; //Mon51用! *

這樣仿真機就會在程序空間:0x23,0x24,0x25放入一個中斷跳轉語句。以后只要有串口中斷,便會去執行MON51程序,從而避免了用復位鍵復位仿真機!

三、例程介紹

控制P3.7、P3.6交替閃爍。(Keil C51、匯編)

#include <REG52.H>

//************************************************

char code reserve [3] _at_ 0x23; //Mon51用! *

//************************************************

sbit Led1=P3^6; //定義IO腳

sbit Led2=P3^7;

/*------------延時程序-----------------------------*/

void Delay (int i)

{

while (i--);

}

//*************************

void main (void)

{

while (1)

{

Led1 ^=1; //異或1

Led2 ^=Led1; //異或LED1

Delay(30000); //延時0。5秒

}

}

匯編:

org 0000h

ljmp start

org 0100h

start: ;開始

CPL p3.6 ;取反P3。6

CPL p3.7 ;取反P3。7

call Delay ;延時

sjmp start

;*************************

;延時子程序255mS

Delay:

mov r6,#0

De1:

mov r7,#0

djnz r7,$

djnz r7,$

djnz r6,De1

ret

四、調試過程

4.1 建立工程項目

添加文件(Led_F.C):

4.2 編譯工程項目

4.3 調試工程,進入DEBUG畫面,如果未出現下面畫面,請檢查“Debug”中是否選擇了“Keil Monitor-51 Driver”。


4.4 通訊中斷出現下面畫面,請先按下仿真機上的復位按鍵,再點擊“Try Again”。每次重新調試,不必復位仿真機,可以N次下載。當出現通訊中斷或用戶程序死機在按復位鍵。

五、注意事項

5.1 插入用戶板時請注意方向,否則回燒毀C51-II仿真器。

5.2 請在斷電時,拔插通訊線。

5. 3 出現如下畫面,說明用戶程序太大,超出63.5K,或占用了XDATA資源,被Mon51禁止。這是一種軟件保護的方法,同時MON51監控程序被硬件鎖定,不能被修改!

   在線仿真器STC89C516RD是完全依托KEIL 51軟件強大的功能來實現仿真的,所以必須配合KEIL 51軟件才能工作,學習使用STC89C516RD在線仿真器的過程也就是對KEIL 51軟件的學習過程,這里我們詳細介紹一下一個匯編文件如何在KEIL 51軟件中如何創建、設置、編譯、仿真的。  

1。匯編源文件的建立

    點擊菜單文件中的新建...命令新建一個文本編輯窗口,在里面輸入下面的程序范例:(可以將藍色字體復制-粘貼入窗口)

MOV A,#0FEH
MAIN:MOV P1,A
RL A
LCALL DELAY
AJMP MAIN

DELAY:MOV R7,#255
D1:MOV R6,#255
D2:DJNZ R6,D2
DJNZ R7,D1
RET

END

(這是一個使單片機P1口的8個發光二極管輪流點亮的簡單程序)

    然后點擊菜單文件中的保存命令保存文件,注意必須輸入文件的后綴名,我們這里用的是匯編語言所以后綴為*.ASM,例如保存為001.asm

2.建立一個項目:

     點擊工程菜單中選擇彈出的下拉式菜單中的新建 工程...,接著彈出一個標準Windows文件對話窗口,在"文件名"中輸入您的第一個程序項目名稱,這里我們用"test",這是筆者慣用的名稱,大家不必照搬就是了,只要符合Windows文件規則的文件名都行。"保存"后的文件擴展名為uv2,這是KEIL uVision2項目文件擴展名,以后我們可以直接點擊此文件以打開先前做的項目。


   這時會彈出讓你選擇單片機型號的對話框,我們選擇ATMEL---AT89C51


    然后點擊Target 1前面的“+”,出現Source Group 1,選中右鍵點選“增加文件到組 Source Group 1”


    這時選擇文件類型為Asm 源文件,再選中001.asm文件,再按添加,在隨后出現的提示框中按“確定”

    STC89C516RD 仿真器采用Mon51協議,在使用之前應必須對軟件項目進行如下設置:

    1、單擊工程菜單,再在下拉菜單中單擊"目標target 1屬性" 在下圖中,單擊"Target"輸入仿真器的工作頻率(11.0592MHz)。

    2、在調試菜單中點選"Keil Monitor-51 Driver",即選擇了STC89C516RD硬件仿真器。


    3、單擊設置選項選擇您要使用串口波特率115200,注意和圖片中的是錯誤的,應該是115200。!。


4、如果需要生成HEX代碼給編程器燒寫芯片的話,需要選中“生成 HEX 文件”的選項,按鈕“選擇OBJ文件夾...”是用來選擇最終HEX文件的存放目錄的。


5、按F7快捷鍵可以進行編譯,編譯成功后如會出現上圖紅箭頭所指的文字,表示編譯成功!

   然后可以進行硬件仿真了,將仿真器按照圖中的位置放入51單片機試驗開發板的40腳活動插座中,這時仿真器的電源由實驗開發板提供,開始仿真時務必按一下仿真器上的復位按鈕。

  現在按Ctrl+F5可以進入仿真,這時再按F5全速運行狀態。

    這時你會看到實驗板開發板P1的八個紅色LED,輪流點亮,表示運行成功,你可以查看相關的變量和參數,非常方便,這里我們完整演示一個匯編語言的仿真過程,其實KEIL C最擅長的還是C語言,建議有基礎的網友盡量采用C語言。

    當調試時出現下面的界面時說明KEIL軟件和仿真器之間通訊失敗,請先退出仿真

    然后按F7,進行通訊連接,再按Ctrl+F5可以進入仿真,這時再按F5全速運行狀態。

五、注意事項

1、插入用戶板時請注意方向,否則會燒毀STC89C516RD仿真器。

2、如何配合實驗板或者用戶板仿真時需要斷開用戶板或者實驗板的晶振回路,否則仿真器上晶振和用戶板的晶振相互并聯會無法工作。!

3、仿真器可以由目標板提供電源(5V),也可以獨立提供電源。建議使用目標板提供的電源!

疑問解答:

1:仿真機的工作原理是什么?

答:這個問題很專業也是問的最多。一句話是無法回答的。只能簡單說明:就是通過Keil開發平臺,將用戶的程序下載到MON51仿真機中,根據Keil開發平臺的命令,不斷地執行用戶程序,再將臨時數據傳回Keil開發平臺的過程。MON51仿真機的軟件,基本上由:通訊模塊、Keil命令解析模塊、51系列單片機的指令分析模塊、斷點處理模塊、運行模塊、單步執行模塊等組成。

3:MON51仿真機的“運行到斷點處(光標處)”和“單步運行” 、“跨步”、“全速運行”有什么區別?

答:這些功能是每一個仿真機所具有的。但它們實現的方法是不同的。這里的仿真機是借用單片機的IAP功能,來實現仿真的。所以上述幾種運行模式(除開單步運行),全部改寫了用戶下載到FLASGROM中的程序代碼。在斷點表中保存了斷點的地址,和用戶代碼。仿真器的監控程序會在用戶要設立斷點的地址處寫入一條指令: LCALL STOP 。STOP是停止用戶程序,保存用戶數據,并恢復監控程序的數據后,再進入監控程序的一段處理程序。實際上就是任務切換。當用戶執行到斷點處時,會通過LCALL STOP,自動進入監控程序。再把用戶的數據發送到Keil平臺。

“跨步”運行實際上也是一種變相的斷點運行模式。只不過斷點不是用戶定義的,而是Keil開發平臺計算的。是隱含處理的。這里很明顯,如果改用FLASHROM保存中間數據,則要頻繁地刪除、寫入數據,STOP的執行速度就會明顯下降。而用RAM保存,是最快的。而且沒有壽命問題。

“全速運行” 有2中方式:一種是不帶中斷響應運行。它完全不再受Keil平臺的控制,一旦開始運行,用戶只有通過手動復位,停止用戶程序。

另一種是帶中斷運行。既勾選Serial Interrupt 選項。這樣便會在用戶程序的串口中斷向量處,寫入一條指令LJMP BREAK ,這樣發生中斷后,就跳轉到MON51監控程序的中斷處理程序。BREAK程序判別Keil平臺是否發來停機命令。如果是停機命令(0x1B),便會進入STOP程序,保存用戶程序數據,并進入MON51監控程序。如果不是,則退出中斷程序,繼續運行應戶程序!這也是所謂的“夭折功能”。它也不是什么新技術,任何仿真機都有。而且實現也很簡單!

“單步運行”是比較繁雜的一種運行模式。仔細分析51系列單片機的指令,可以知道,雖然有100多條指令,但把轉移指令、判位指令、數據轉移指令、運算指令等歸類后,實際只有10種類型的指令。首先MON51監控程序分析是哪一種指令,如果是轉移類指令(LJMP、AJMP 、SJMP、 LCALL、 ACAL、RET、 RETI),MON51監控程直接計算PC指針的地址,并不執行。而其它類的指令則,全部復制到單步執行區(最大9個字節)。再在后面添加2條轉移指令 LCALL STOP 、LCALL STOP。為什么要2個LCALL STOP 。主要是用來判別:判位指令是否發生了跳轉而設的。進入“單步運行”后,MON51監控程跳轉到單步執行區,就可以執行用戶的一條指令。然后進入STOP程序。完成一次單步!如果大量采用單步執行的話,單步執行區會被頻繁修改,嚴重影響壽命!這是現在所有采用IAP技術仿真的弊!如果有個單片機內部有9個字節的RAM執行區就好了,專業仿真機就要下崗了。

實際上我們的監控程在讀取、寫入特殊功能寄存器時,也要用“單步運行”方法來實現!例如:“mov a,direct ; mov direct,R0”這倆條指令必須要用“單步運行”來實現。如果用戶程序有大量的此類指令,壽命問題就會暴露出來。我們做破壞性實驗,就是循環執行它。

現在市面上所有的仿真機,都不會去說明FLASHROM是在什么地方被寫入?壽命是如何受影響的?也許是揚長避短吧,或許是根本就不知道。通過上面的分析就知道,FLASHROM中到底是哪里被頻繁寫入了。有些網站要求,盡量少用“單步”,也就是回避這個問題!

4:廉價仿真器SP堆棧占用了2個字節,是什么意思?

這個問題,我被無數次問起,但我首先問一下:你做的軟件預留了多少個字節做堆棧?一般的回答是:把剩余的字節全部做堆棧!試想一下,誰做軟件只預留幾個字節做堆棧。更何況是2個字節!

仿真器監控程占用用戶堆棧,是在STOP程序運行時占用的,進入STOP程序時,單片機的硬件已經將PC指針自動壓入用戶堆棧。此時占用2個字節。隨后因為要保護用戶的臨時數據,必須要用到ACC、DPTR。所以必須先保存好這3個寄存器的值才行。直接壓入用戶堆棧,最簡單!但占用了3個字節。▽嶋H上用戶的堆棧,絕對不應該是5個字節的余量)。所以許多網站上,都說采用了新技術,占用2個字節的堆棧。實際上不壓入堆棧,用單片機內部不用的寄存器就可以保存就可以了!例如:看門狗寄存器WDTD或IAP操作的寄存器組:SFAL、SFAH、SFDT(但不能用SFCM寄存器)所以SP堆棧占用了2個字節的技術并不神秘!

5:廉價仿真機采用XDATA保存數據,哪我要使用它們,怎么辦?

首先我要說明:簡單的東西,肯定是有弊端的。如果要用它們,就只有自己擴展RAM了。當用戶使用自己擴展的外部RAM時(必須定義AUXR寄存器的EXTRAM位。,地址可以從00H開始,連續存放。

注:本文是站長自己收集并向別人學習的精彩文集,本站沒有本文介紹的仿真器,需要本仿真器者請訪問http://www.xie-gang.com/

1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
91嫩草黄片动漫版