80C51系列單片機仿真器選購指南
第六章 如何測試通用仿真器
在選擇了仿真器生產廠商后,用戶還需要對仿真器的性能做仔細的測試,保證您選擇的仿真器能夠達到該仿真器保證的性能以及作為仿真器應該達到的性能。
在選擇一種仿真器前,通過該仿真器的廣告和銷售人員的介紹,用戶能基本上了解該仿真器的突出性能。這些突出性能應該是該仿真器確實存在的功能,雖然可能有被夸大但一般都不會有欺騙的成分。這些性能好不好需要有針對性的一一驗證,這里只能建議用戶將目光注意在實際仿真性能上,而不要過分注意一些與仿真器無關或關系不大的功能。
很多的仿真器雖然具備一些附加的功能,但是用戶必須要注意到這些仿真器可能在一些最基本的仿真功能卻做不好,這種現象在國產的仿真器中非常普遍!由于用戶并不專業于仿真器的測試,因此在購買中不知道對這些仿真器的死點進行驗證。等以后在學習特別是在開發設計中,這些設計中的死點可能給您帶來莫名其妙的問題。您可能要花幾倍的時間來尋找其中的原因,因為您首先懷疑是您系統的問題而不懷疑是仿真器的問題。所以選擇一個性能可靠的仿真器是十分重要的,這需要非常專業化的測試程序來實現。
以下的測試程序由廣州致遠電子有限公司提供,經過長時間的使用證明能基本上反映出一個仿真器設計水平的高低。廣州致遠電子有限公司在提供這些測試程序時聲明:這些測試程序只是指出仿真器設 計中容易出現的問題,但并不有意攻擊任何含有上述問題的仿真器廠家。
1.單步性能的測試
測試說明:單步是仿真器設計中比較難實現的功能。照通常的理解,用戶每執行一個單步應該準確實現理想運行的單步性能。例如,運行一個機器周期的指令,內部的所有時序應該都動作一個機器周 期而不能出現不動作或動作過度的現象。不過很遺憾的看到國內的仿真器多數不能達到這個指標。
測試程序:
ORG 0000H
SETB TR0 /* 打開定時器0 */
TestStart:
NOP /* 定時器0 運行1個機器周期, TL0 加1 */
MOV A,#0FFH /* 定時器0 運行1個機器周期, TL0 加1 */
MUL AB /* 定時器0 運行4 個機器周期, TL0 加4 */
LJMP TestStart /* 定時器0 運行2 個機器周期, TL0 加2 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序;
(2) 在運行前打開TL0 的顯示,以便單步運行后能觀察TL0 的變化;
(3) 使用當前仿真器環境提供的單步功能開始單步運行;
(4) 單步運行后檢查TL0 變化的數值是否與指令的周期數相同。
測試結論:仿真器如果沒有照嚴格正規的設計,程序的單步運行性能將不準確,一般會出現實際運行時間變長的現象,這在時間要求較高的單步運行將不能仿真程序的真正運行。
2.中斷性能的測試
測試說明:中斷是一種非正常的程序跳轉,單步仿真有一定的難度,尤其在低檔仿真器中。在當前采用Bondout 技術制作的仿真器中一般可以做到正確仿真,但是仍有一些仿真器不能正確單步仿真中斷。
測試程序:
ORG 0000H
LJMP TestStart
ORG 000BH /* 定時器0 的中斷服務程序 */
RETI
TestStart:
SETB EA /* 開放全局中斷允許 */
SETB ET0 /* 開放T0 中斷允許 */
TestLoop:
SETB TF0 /* 設置T0 的中斷標志 */
INC A /* A 數值加一,以便觀察程序持續運行 */
LJMP TestLoop /* 連續運行 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序。
(2) 每次SETB TF0 后程序將進入T0 的中斷服務程序,執行完畢后返回主程序繼續運行。
(3) 主程序能在TestLoop 中連續運行,因此A 能連續加一,但是每循環一次就進入一次中斷。
測試結論:仿真器如果沒有照嚴格正規設計,程序的中斷性能將不準確。可能出現程序不能跳轉到中斷服務程序,或沒有返回到正確的主程序,或A 不能每次循環連續的加1。
評論