80C196單片機仿真軟件的設(shè)計與實現(xiàn)
CRunCode類封裝所有的操作模塊,仿真80C196單片機中的指令執(zhí)行部件,完成單步運行、一次運行和連續(xù)運行3種指令的執(zhí)行方式。C196Chip類仿真整個單片機模塊,除了指令執(zhí)行部件外,還包括各種外設(shè)模塊,完成中斷、串口等功能。對外提供統(tǒng)一的控制接口,完成單片機的初始化、啟停、訪問存儲器、訪問外設(shè)、訪問特殊功能寄存器。
CPU模塊中各個類的描述及其繼承關(guān)系。
2.3指令的仿真運行
80C196指令系統(tǒng)中有104種指令,按照操作碼和功能的不同,將指令劃分為13類,每個類模塊實現(xiàn)1類指令的功能。
CRunCode類封裝了13類指令的各個模塊,提供了統(tǒng)一的接口,以地址寄存器值作為輸入輸出。進入CRuncode-類的為地址寄存器值,根據(jù)此值取得指令,依指令操作碼的不同進入各個操作模塊。各個操作模塊完成指令的功能,并計算出下一條指令的地址值返回給CRunCode-類,CRunCode類再將此值寫入CPU的地址寄存器中。其執(zhí)行過程如圖3所示。
對于每一條指令的仿真,包括操作過程,操作結(jié)果與程序狀態(tài)字的改變力求做到與80C196指令集相一致。以兩個操作數(shù)的加法指令A(yù)DD Al,BL為例,其實現(xiàn)過程如下:
2.4編譯模塊設(shè)計
編譯模塊將用戶編寫的源程序編譯成CPU能識別的二進制機器語言的形式。為了降低系統(tǒng)的設(shè)計難度,采用了已經(jīng)具有的外部程序?qū)υ闯绦蜻M行處理。編譯模塊讀取由外部程序生成的列表文件,將程序信息轉(zhuǎn)化為本系統(tǒng)能處理的數(shù)據(jù)結(jié)構(gòu),并將生成的二進制操作碼裝入CPU的存儲器。
2.5程序仿真與控制的實現(xiàn)
程序運行有3種方式,即單步運行,運行一次和連續(xù)運行。程序的主要控制功能有復(fù)位、設(shè)置/清除中斷點、查看寄存器、查看程序狀態(tài)字等。編譯模塊對源程序進行預(yù)處理,將源程序轉(zhuǎn)化為二進制操作碼。CPU模塊將操作碼裝入存儲器成功后,初始化CPU的各種信號,并將程序地址寄存器的值置Ox2080,這是80C196匯編程序的起始地址。然后CPU模塊依據(jù)地址寄存器的值取操作碼,按照取址、譯碼、執(zhí)行的過程執(zhí)行每一條指令。在一條指令執(zhí)行完畢后,執(zhí)行中斷處理,刷新顯示結(jié)果以及檢查中斷點等操作。
本仿真軟件的關(guān)鍵技術(shù)在于CPU模塊的設(shè)計。這個模塊要完成80C196所有指令的功能,要分配存儲器資源,要控制軟件仿真過程中程序狀態(tài)字、特殊功能寄存器以及其他CPU信號的變化。采用面向?qū)ο缶幊谭椒ê头謱釉O(shè)計的思路,通過對指令的合理劃分,降低了指令系統(tǒng)的復(fù)雜度,通過對實際器件的抽象與封裝,實現(xiàn)了與實際硬件器件的功能等價,使得仿真結(jié)果與真實執(zhí)行情況相一致。
至此,該仿真軟件的基本功能已經(jīng)實現(xiàn),為仿真平臺的設(shè)計打下了基礎(chǔ),接下來的工作是以仿真軟件為基礎(chǔ),完成仿真平臺的開發(fā)與調(diào)試,主要包括各種外設(shè)的實現(xiàn),測試用例生成工具以及驅(qū)動測試的外部激勵產(chǎn)生模塊,以此搭建一個具有良好人機界面的測試環(huán)境,提高應(yīng)用軟件的質(zhì)量與可靠性。按照軟件要求計劃采用dll文件的方式將各個模塊生成庫文件,并在仿真軟件中預(yù)留各個庫文件的接口,在程序需要時調(diào)用相應(yīng)的庫文件即可,簡化了設(shè)計的難度,同時增加了仿真平臺的靈活性和通用型。
4結(jié) 語
本文提出一種采用VC++面向?qū)ο蠹夹g(shù)設(shè)計80C196單片機應(yīng)用軟件仿真環(huán)境的方法。據(jù)此方法研制的仿真軟件可仿真80C196指令集的全部指令,并可對80C196單片機嵌入式控制軟件進行仿真與運行。該項技術(shù)為全軟件測試平臺的開發(fā)奠定了基礎(chǔ),也可供相關(guān)領(lǐng)域的應(yīng)用參考。
評論