專利名稱:便攜式單cpu仿真器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種單片微機(jī)仿超真器單片機(jī)仿真器是一種軟件開(kāi)發(fā)工具,已有技術(shù)的單片機(jī)仿真器,需借助PC微機(jī)才能實(shí)現(xiàn)匯編語(yǔ)言及高級(jí)語(yǔ)言(PL/M、C語(yǔ)言)調(diào)試程序,還需使用昂貴的PC機(jī)軟件。在脫離PC機(jī)后,只能輸入和查看16進(jìn)制的機(jī)器碼,而且程序的匯編和反匯編工作需要由人工查指令表完成;這些導(dǎo)致了低檔仿真器操作復(fù)雜繁瑣,而高檔仿真器對(duì)設(shè)備的依賴性大,成本高,尤其是對(duì)廣大的青少年的計(jì)算機(jī)愛(ài)好者難以普及。
本發(fā)明的目的在于提供一種完全擺脫對(duì)PC機(jī)的依賴,配置一些簡(jiǎn)單的外設(shè),以單片機(jī)匯編語(yǔ)言實(shí)現(xiàn)宏匯編和高級(jí)語(yǔ)言調(diào)試單片機(jī)程序的技術(shù),填補(bǔ)了中檔仿真器的空白。
本發(fā)明由硬件和軟件兩部分組成硬件由基本系統(tǒng)及擴(kuò)展系統(tǒng)組成,基本系統(tǒng)由系統(tǒng)板、顯示器及鍵盤組成,系統(tǒng)板由單片微控制器(CPU)、程序存貯器、數(shù)據(jù)存貯器、仿真存貯器及串/并行擴(kuò)展接口組成,擴(kuò)展系統(tǒng)有EPROM編程器,其特征是基本系統(tǒng)中1、系統(tǒng)板上還有仿真信號(hào)控制電路、硬件控制電路及掉電保護(hù)電路;2、鍵盤是標(biāo)準(zhǔn)的ASCII鍵盤;3、顯示器是LED圖形或字符型液晶顯示器。
擴(kuò)展系統(tǒng)中1、通過(guò)I/O口接有微型打印機(jī);2、通過(guò)I/O口還接有語(yǔ)音系統(tǒng);3、通過(guò)RS-232接口可接有高級(jí)語(yǔ)言調(diào)試終端或圖形庫(kù)終端。
軟件由監(jiān)控程序控制調(diào)用各有關(guān)子程序,如機(jī)器碼輸入輸出程序、機(jī)器碼顯示程序、全速運(yùn)行程序、斷點(diǎn)運(yùn)行程序、單步運(yùn)行程序、EPROM固化程序和串行通訊程序,其特征是還有匯編程序、反匯編程序、宏匯編程序、圖形符號(hào)輸入程序及語(yǔ)音程序。
微控制器的數(shù)據(jù)/地址總線分別與存貯器、控制電路、并行擴(kuò)展接口和顯示器相接,其控制信號(hào)與硬件控制電路相接,分別再控制其它電路,其P0、P1、P2及P3均與仿真接口相接,作為仿真信號(hào)。本發(fā)明的微控制器既完成程序的輸入輸出和調(diào)試工作,又實(shí)現(xiàn)單片機(jī)仿真功能,實(shí)現(xiàn)了單一CPU型的仿真器。
程序存貯器為一EPROM,固化有整個(gè)系統(tǒng)的監(jiān)控程序,其數(shù)據(jù)/地址線與微控制器相接,片選、讀信號(hào)由硬件控制電路發(fā)出。
仿真存貯器為靜態(tài)存貯器,其數(shù)據(jù)/地址線與微控制器相接,片選、讀寫信號(hào)由硬件控制電路發(fā)出,內(nèi)裝有用戶輸入的仿真程序。
數(shù)據(jù)存貯器為靜態(tài)存貯器,其數(shù)據(jù)/地址線與微控制器相接,片選、讀寫信號(hào)由硬件控制電路發(fā)出,內(nèi)裝有用戶輸入的源程序,圖形符號(hào)代碼及微控制器的狀態(tài)信息。
硬件控制電路和仿真信號(hào)控制電路將微控制器發(fā)出的控制信號(hào)經(jīng)緩沖器緩沖后送到硬件控制電路,再分別控制仿真信號(hào)控制電路和其它電路。為使單一微控制器既能完成程序開(kāi)發(fā),又能仿真出讓,需實(shí)現(xiàn)兩種狀態(tài)的轉(zhuǎn)換,本發(fā)明是采用“數(shù)據(jù)地址信號(hào)轉(zhuǎn)讓法”,硬件控制電路是一組或門和觸發(fā)器組成,當(dāng)數(shù)據(jù)線和地址線上均為“1”時(shí),觸發(fā)器被觸發(fā),并發(fā)出切換信號(hào)以控制信號(hào)轉(zhuǎn)換(或通向本系統(tǒng)板或通向仿真接口),當(dāng)仿真器復(fù)位時(shí),觸發(fā)器為初始狀態(tài)(監(jiān)控系統(tǒng)狀態(tài))。
掉電保護(hù)電路作為仿真存貯器和數(shù)據(jù)存貯器的掉電保護(hù)之用。
程序的匯編語(yǔ)言輸入和輸出使用者可通過(guò)本發(fā)明連接的標(biāo)準(zhǔn)ACSII鍵盤輸入?yún)R編語(yǔ)言、指令,仿真器對(duì)當(dāng)前的語(yǔ)言進(jìn)行匯編(無(wú)需事先進(jìn)行人工匯編)并存入指定的地址中,整個(gè)用戶界面模擬PC機(jī)的DEBUG系統(tǒng),可不占用大量的內(nèi)存存貯匯編語(yǔ)言(不具有“帶符號(hào)的地址跳轉(zhuǎn)”、“偽指令”及“模塊鍵接”等宏匯編功能)仿真器在反匯編程序時(shí),通過(guò)液晶顯示器輸出匯編語(yǔ)句,還可由微型打印機(jī)打出。
程序的宏匯編語(yǔ)言及圖形符號(hào)輸入使用者在匯編語(yǔ)言輸入的基礎(chǔ)上,使用“帶符號(hào)的地址跳轉(zhuǎn)”、“偽指令”及“模塊鍵接”等宏匯編功能,本發(fā)明的仿真器將輸入的匯編語(yǔ)句進(jìn)行壓縮(省略過(guò)多的空格符)并存入數(shù)據(jù)存貯器,待輸入完畢后進(jìn)行宏匯編(無(wú)需對(duì)偏移地址進(jìn)行計(jì)算)以便于在程序的輸入過(guò)程隨時(shí)進(jìn)行修改。圖形符號(hào)輸入程序是在宏匯編的基礎(chǔ)上,添加“圖形符號(hào)匯編語(yǔ)言”程序,圖形符號(hào)所對(duì)應(yīng)的語(yǔ)句、子程序,均事先固化在EPROM中并制出圖形符號(hào)表相對(duì)照,用戶按圖形符號(hào)輸入表中所指定的地址讀出并存貯在數(shù)據(jù)存貯器中,當(dāng)系統(tǒng)對(duì)其編譯時(shí),是調(diào)用宏匯編對(duì)有關(guān)的語(yǔ)句、子程序進(jìn)行宏匯編生成機(jī)器碼,其中所有的圖形符號(hào)均存放于圖形庫(kù)終端中。
程序的語(yǔ)音讀出及語(yǔ)音提示當(dāng)對(duì)程序進(jìn)行反匯編后,可通過(guò)附加的語(yǔ)音系統(tǒng)將其逐條讀出,使用者可不必看顯示器便知道存貯器中的程序,適于特殊環(huán)境下使用。對(duì)本發(fā)明的仿真器進(jìn)行操作時(shí)出現(xiàn)的錯(cuò)誤亦可通過(guò)語(yǔ)音系統(tǒng)讀出并改正之。
程序的高級(jí)語(yǔ)言調(diào)試由于單CPU(監(jiān)控、仿真共用CPU)本身功能的限制,為能完成如“C、PL/M”等高級(jí)語(yǔ)言的交義匯編調(diào)試,可在本發(fā)明仿真器的串行通訊接口附加一高級(jí)語(yǔ)言調(diào)試終端(自帶CPU)即可。
本發(fā)明的硬件擴(kuò)展了外設(shè),內(nèi)部增加了硬件控制電路,仿真信號(hào)控制電路和掉電保護(hù)電路。軟件增加了宏匯編程序、圖形符號(hào)輸入程序和語(yǔ)音讀出程序,使其在無(wú)PC機(jī)的情況下完成需PC機(jī)支持的許多功能。
本發(fā)明與已有技術(shù)相比,其優(yōu)點(diǎn)是1.可以脫離PC機(jī)獨(dú)立工作;2.可直接用宏匯編編程、調(diào)試程序,當(dāng)配有高級(jí)語(yǔ)言或圖形庫(kù)終端時(shí),可進(jìn)行圖形符號(hào)和高級(jí)語(yǔ)言的編程和調(diào)試;3.具有語(yǔ)音提示及語(yǔ)音程序助讀和錯(cuò)誤語(yǔ)音告警功能;4.功能齊全,成本低,利于推廣,特別適用于教學(xué);5.體積小,攜帶方便。
圖1為本發(fā)明的系統(tǒng)框2為本發(fā)明的硬件電原理3為本發(fā)明的監(jiān)控程序主流程4為本發(fā)明宏匯編程序流程圖之一圖5為本發(fā)明宏匯編程序流程圖之二圖6為本發(fā)明匯編程序流程7為本發(fā)明及匯編程序流程8為本發(fā)明語(yǔ)音讀出程序流程9為本發(fā)明圖形符號(hào)輸入程序流程圖之一圖10為本發(fā)明圖形語(yǔ)言輸入程序流程圖之二實(shí)施例本發(fā)明的系統(tǒng)框圖如圖1,由系統(tǒng)板(虛線內(nèi))1、液晶顯示器2、鍵盤3、組成基本系統(tǒng),并配以擴(kuò)展系統(tǒng)(由EPROM編程器4、微型打印機(jī)5、語(yǔ)音系統(tǒng)8及通過(guò)串行通訊接口7接有圖形庫(kù)/高級(jí)語(yǔ)言調(diào)試終端)。本發(fā)明的硬件電原理圖如圖2。微控制器的數(shù)據(jù)/地址總線分別與存貯器、控制電路、并行擴(kuò)展接口和顯示器相接,其控制信號(hào)與硬件控制電路相接,分別再控制其它電路,其p0、p1、P2及p3均與仿真接口相接,作為仿真信號(hào)。
程序存貯器為一EPROM,固化有整個(gè)系統(tǒng)的監(jiān)控程序,其數(shù)據(jù)/地址線與微控制器相接,片選、讀信號(hào)由硬件控制電路發(fā)出。
仿真存貯器為靜態(tài)存貯器,其數(shù)據(jù)/地址線與微控制器相接,片選、讀寫信號(hào)由硬件控制電路發(fā)出,內(nèi)裝有用戶輸入的仿真程序。
數(shù)據(jù)存貯器為靜態(tài)存貯器,其數(shù)據(jù)/地址線與微控制器相接,片選、讀寫信號(hào)由硬件控制電路發(fā)出,內(nèi)裝有用戶輸入的源程序、圖形符號(hào)代碼及微控制器的狀態(tài)信息。
硬件控制電路是一組或門和觸發(fā)器組成,當(dāng)數(shù)據(jù)線和地址線上均為“1”時(shí),觸發(fā)器被觸發(fā),并發(fā)出切換信號(hào)以控制信號(hào)轉(zhuǎn)換(或通向本系統(tǒng)板或通向仿真接口),當(dāng)仿真器復(fù)位時(shí),觸發(fā)器為初始狀態(tài)(監(jiān)控系統(tǒng)狀態(tài))。
本發(fā)明的軟件由監(jiān)控程序作為主系統(tǒng)進(jìn)行管理,所有的其它軟件的運(yùn)行均由監(jiān)控程序調(diào)用。本發(fā)明除具有常用的仿真器全部運(yùn)行程序外,還增有宏匯編程序、匯編程序、反匯編程序、圖形符號(hào)輸入程序及語(yǔ)音讀出程序。
本發(fā)明匯編程序的流程圖如圖6,其部分源程序如下<pre listing-type="program-listing"><![CDATA[INITIALIZE ;初始化 MOV DPTR,#CODE_TABLE ;將機(jī)器碼指令表的首地址置于DPTR中 MOV R0,#BUFFER;將鍵盤/顯示緩沖區(qū)首地址置于R0中, MOV R1,#00H ;清各寄存器,Rn中值變?yōu)榱? MOV R2,#00H ; MOV R3,#00H ; MOV R4,#00H ;MOV R7,#00H ;內(nèi)裝有匯編的機(jī)器碼(同時(shí)是指令表的指針) MOV 0CH,#00H ;清內(nèi)存,00~0F中分別寄存放語(yǔ)句匯編后的 . 機(jī)器碼入該語(yǔ)句的長(zhǎng)度 . NOV 0FH,#00H ; CLR A ;清累加器START ;開(kāi)始 CJNE @R0,#CDH,REL1;看一下第n個(gè)字符是否是回車,即“沒(méi)有輸入” MOV A,#01H ;至“無(wú)輸入”標(biāo)志01于A中并返回 RETREL1MOV B,@R0 ;將第n個(gè)字符先放于B中保存 CLR A ;將機(jī)器碼中的值讀入到A中 MOVC A,@A+DPTR CJNE A,B,NEXT_CODE;比較一下是否相同,若不同則轉(zhuǎn)到NEXT_CODE CJNE A,#0DH,REL2 ;是否是回車,即無(wú)操作數(shù)的匯編指令 MOV 0FH,R7 ;妝前的R7值就是機(jī)器碼,R7值同時(shí)是指令表的 CLR A;(成功匯編標(biāo)志)指針。將其裝入0F中返回A置零表示匯編成功 RETREL2CJNE A,#20H,REL3 ;是否是空格符,即有無(wú)操作數(shù)因?yàn)椴僮鲾?shù)與主 INC R0, 機(jī)器碼間有空格符分開(kāi) SJMP OPERATION_CODE;轉(zhuǎn)到操作數(shù)求值程序REL3 INC R0, ; INC DPTR ;各指針加一,繼續(xù)比較不一個(gè)字符 SJMP REL1NEXT_CODE;當(dāng)前比較的指令不同,換下一個(gè)指令繼續(xù) CJNE R7,4#0FFH,REL4 ;R7的值到了FF否?即所有的指令部比較了 MOV A,#03H;否?若是,置A值為03,返回 RETREL4 INC R7 ;R7值加一,即指向指令表中下一指令?! ? MOV A,R7 ;由R7值算出指令表中下一指令的地址并放入 ANL A,#11110000BDPTR中 SWAP A, ADD A,#TABLE_H MOV DPH,A;高八值地址裝入DPTR的高八位上 MOV A,R7 ANL A,#00001111B ;低八位地址裝入DPTR的低八位上 SWAP A, MOV DPL,A, MOV R0,#BUFFER;重新置鍵盤/顯示緩沖區(qū)首地址 LJMP REL1 ;再進(jìn)行比較 . . .OPERATION_CODE 比較操作數(shù),并求值INITIALIZE 初始化 . .(略) .]]></pre>
反匯編程序的流程圖如圖7,其部分源程序如下<pre listing-type="program-listing"><![CDATA[...VN_ASM ;反匯編 MOV A,R7 ;R7中為機(jī)器碼,將其值放于A中 ANL A,#11110000B ;計(jì)算出指令表的地址并放于DPTR中 SWAP A, ADD A,#TABLE_H MOV DPH,A MOV A,R7 ANL A,#00001111B SWAP A MOV DPL,ALOOP CLR A ;讀指令表反匯編 MOVO A,@A+DPTR CJNE A,#00H,V_1 ;有無(wú)操作數(shù), PUSH DPH ;有,將原來(lái)用戶程序的地址取出,將 PUSH DPL跟在機(jī)器碼后的操作數(shù)讀出反匯編 MOV DPH,7DH MOV DPL,7EH MOVX A,@DPTR INC DPTR MOV 7DH,DPH MOV 7EH,DPL INC R0 LCALL HEX_ASC ;將操作數(shù)轉(zhuǎn)為ASCII形式,并放入 POP DPL 顯示/鍵盤緩沖區(qū)準(zhǔn)備顯示 POP DPH INC R0 INC DPTR SJMP LOVP ;繼續(xù)反匯編V_1CJNE A,#0DH,V_2 ;結(jié)束否? CLR A ;結(jié)束了,置A值為零,成功標(biāo)志 RETV_2 MOV@R0,A ;將反匯編出的語(yǔ)句放入顯示/鍵盤 INC R0 緩沖區(qū)準(zhǔn)備顯示 INC DPTR SJMP LOOP ;繼續(xù)反匯編 . . (略) .]]></pre>
宏匯編程序的流程圖如圖4及5,其部分源程序如下<pre listing-type="program-listing"><![CDATA[ . . . CJNE@R0,#3AH,GO-ON ;是否是“”符,ASCII碼為3A0 POP R0 因?yàn)闃?biāo)號(hào)后必須跟“”符以示與 LJMP SIGN程序指令的區(qū)別,若是則轉(zhuǎn)到SIGNGO-ON . . .SIGN ;處理標(biāo)號(hào)的程序 MOV DPTR,#TABLE-SIGN ;將標(biāo)號(hào)表的首地址放于DPTR中 MOV R7,#00H;清R7,R7中為標(biāo)號(hào)的表中順序值.REL1MOV B,@R0 ;將第n個(gè)字符放入B中 MOV A,@DPTR;讀標(biāo)號(hào)表中的第n個(gè)字符 CJNE A,B,NEXT-SIGN;是否相同,若不同則轉(zhuǎn)到NEXT-SIGN CJNE A,#3AH,REL2 比較完了 LCALL ERROR;有相同的標(biāo)號(hào),出錯(cuò) MOV A,#01H;置出錯(cuò)標(biāo)志01于A中,返回 RETREL2 INC R0 INC DPTR SJMP REL1 ;繼續(xù)比較NEXT-SIGN CJNE R7,#0FFH,REL3;向有的標(biāo)號(hào)比較完了? LSJMP GO-ONREL3INC R7 MOV A,R7 ANL A,#11110000B SWAP A ADD A,#TABLE-H MOV DPH,A MOV A,R7 ANL A,#00001111B SWAP A, MOV DPL,A MOV R0,#BUFFER;重新置鍵盤/顯示緩沖區(qū)首地址 LJMP REL1 ;再進(jìn)行比較GO-ON POP DPH;取上一次標(biāo)號(hào)表最后一個(gè)標(biāo)號(hào)的順序值 PUP DPL 并放入DPTR LCALL DPTR+;調(diào)把DPTR加1b(十進(jìn)制)的子程序 MOV R0,#BUFFER;將新標(biāo)號(hào)裝入表中,即建立新標(biāo)號(hào)REL4 MOV A,@R0 MOV@DPTR,A CJNE@R0,#3AH,REL5 ;裝入完? INC DPTRMOV 0A,7DH,;把地址計(jì)數(shù)器值裝入標(biāo)號(hào)表中?! ? MOV @DPTR,A MOV A,7EH MOV @DPTR,A RET ;返同 INC R0REL5INC R0 INC DPTR SJMP REL4;繼續(xù)裝入 . .(略) .]]></pre>語(yǔ)音程序的流程圖如圖8,其部分源程序如下<pre listing-type="program-listing"><![CDATA[ LCALL VN_ASM ;調(diào)用反匯編程序 ANL D1,#11110000B;打開(kāi)語(yǔ)音 INC R0 MOV@R0,#0DH ;在鍵盤/顯示緩沖區(qū)的待續(xù)字符后置結(jié)束 標(biāo)志 MOV R0,#BUFFER ;置鍵盤/顯示緩沖區(qū)的首地址于R0中LOOPCJNE @R0,#0DH,REL1 ;全部讀完? SJMP NEXT_V ;是的,去讀下一條語(yǔ)句REL1MOV DPTR,#TABLE2 ;將ASCII碼變控制碼的表的首地址置入 DPTR中LOOP1CLR A MOV C A,@A+DPTR ;讀入一個(gè)控制碼的ASCII碼 MOV B,@R0;讀入一個(gè)待續(xù)機(jī)器碼的ASCII碼 CJNE A,B,REL2;相同嗎? MOV A,DPL;DPL的值實(shí)際就是控制碼的值,將它置于A LCALL VOICE 中并調(diào)語(yǔ)音讀出VOICE. SJMP NEXT-V ;繼續(xù)下一個(gè)字符的發(fā)音REL2INC DPTR ;DPTR加一,讀下一個(gè)控制碼的ASCII值 SJMP LOOP1;繼續(xù)比較 NEXT-V INC R0 ;R0指向鍵盤/顯示緩沖區(qū)中的下一個(gè)字符 SJMP LOOP ;繼續(xù) . . (略) .]]></pre>圖形符號(hào)輸入程序的流程圖如圖9及10。
權(quán)利要求
1.一種便攜式單CPU仿真器,其硬件由微控制器、程序存貯器、數(shù)據(jù)存貯器、仿真存貯器、仿真接口、串/并行接口、EPROM編程器、鍵盤及顯示器組成,其特征在于(1).還包括有硬件控制電路、語(yǔ)音系統(tǒng)、打印機(jī)和通過(guò)串行通訊口連接的圖形庫(kù)/高級(jí)語(yǔ)言調(diào)試終端;(2).鍵盤是一個(gè)標(biāo)準(zhǔn)ASCII鍵盤;(3).顯示器是一個(gè)液晶顯示器。
2.根據(jù)權(quán)利要求1所述的便攜式單CPU仿真器,其特征在于液晶顯示器可以是字符型的,也可以是圖形型的。
3.根據(jù)權(quán)利要求1所述的便攜式單CPU仿真器,其特征在于打印機(jī)是一種微型打印機(jī)。
4.根據(jù)權(quán)利要求1所述的便攜式單CPU仿真器,其特征在于硬件控制電路是由一組或門和觸發(fā)器組成,由RST信號(hào)及地址/數(shù)據(jù)線信號(hào)觸發(fā)并發(fā)出切換信號(hào)控制其它硬件電路。
5.一種便攜式單CPU仿真器,其軟件包括有機(jī)器碼輸入程序、機(jī)器碼顯示程序、全速運(yùn)行程序、單步運(yùn)行程序、斷點(diǎn)運(yùn)行程序、EPROM固化程序、打印程序及通訊程序,其特征在于還包括宏匯編程序、匯編程序、反匯編程序、圖形符號(hào)輸入程序及語(yǔ)音程序。
全文摘要
本發(fā)明涉及一種單片機(jī)仿真器。單片機(jī)仿真器是一種需借助于PC機(jī)的軟件開(kāi)發(fā)工具,本發(fā)明是在系統(tǒng)板上增加了硬件控制電路,使單一CPU仿真器脫離PC機(jī)完成監(jiān)控和仿真功能。本發(fā)明配有標(biāo)準(zhǔn)英文鍵盤、圖形/字符型液晶顯示器、微型打印機(jī)等,以實(shí)現(xiàn)無(wú)PC機(jī)條件下進(jìn)行匯編、反匯編、宏匯編程序的輸入及調(diào)試。本發(fā)明配有語(yǔ)音系統(tǒng),給出語(yǔ)音提示或讀出輸入的內(nèi)容。本發(fā)明通過(guò)通訊口連接有用于簡(jiǎn)化編程的圖形庫(kù)高級(jí)語(yǔ)言終端。
文檔編號(hào)G06F19/00GK1127390SQ9411875
公開(kāi)日1996年7月24日 申請(qǐng)日期1994年12月3日 優(yōu)先權(quán)日1994年12月3日
發(fā)明者劉若飛 申請(qǐng)人:劉若飛