


版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗報告一、設計任務:利用微機原理所學的 8086 微處理器相關知識為核心,利用Proteus仿真軟件,設計一個關于計算器的仿真電路并編寫匯編代碼。 根據(jù) 8086 的結構和其尋址方式、 輸入輸出、 I/O 口讀寫等技術, 使用 匯編語言的基本語法、偽指令,結合 Proteus軟件SAMPLE防8086 Demo Board示例的理解分析,自行設計。二、需求分析:( 1)用 8086 作為核心處理器;(2)用 8255 芯片連接主機與外設;(3)用 74273 鎖存器對數(shù)據(jù)進行鎖存;(4)用數(shù)碼管顯示器來顯示輸入的數(shù)字以及輸出的結果;(5)由于需要輸入數(shù)字及運算符所以要用到鍵盤;(6)用蜂鳴器
2、在按下按鍵的同時發(fā)出聲響;(7)連接整個電路要用到導線以及總線將相應的引腳相連接。三、總體方案(選擇與論證)1. 方案的選擇:基于技術成熟的 Proteus軟件,以Proteus軟件SAMPLES 8086Demo Board示例為藍本并充分分析理解,在此基礎上提出自己的設 計方案。將例子中電路結構優(yōu)化精簡,舍棄不必要的芯片,并用匯編 來實現(xiàn)全部功能。即計算器能夠進行 4 位數(shù)的加、減、乘、除運算。在此基礎上,為使設計的計算器更具有實用性,我們通過循環(huán)調(diào)用的方式加入了對冪運算的功能。 與此同時,為優(yōu)化人機界面, 使計算器更為美觀和實用,我們加入軟件自帶的封裝好的矩陣鍵 盤和蜂鳴器。這就使得整個
3、設計更加緊湊。蜂鳴器實現(xiàn)了每按下 一次按鍵就發(fā)出一次聲響的功能以使按鍵檢測更加直觀,實際的 計算器無差別。此計算器擁有計數(shù)的功能,分自動計數(shù)和手動計 數(shù)兩種。自動計數(shù)即為一個簡單的計時器,用戶可按需要定時, 當?shù)筋A定時間時,計算器會發(fā)聲音提示用戶。手動計數(shù)有加 1 和 減 1 兩種,當用戶需要計數(shù)某些場合中尤為適用。2. 方案的論證:8086通過74273鎖存器與8255A相連,使8086能夠讀外部數(shù)據(jù) 和給外部芯片寫數(shù)據(jù)。8255A的A 口設置為輸出,B 口和C 口設置為 輸入,將8255A分別和4*5矩陣、數(shù)碼管、蜂鳴器相連接。8086不 斷循環(huán)掃描鍵盤使鍵盤輸入的數(shù)據(jù)能夠讀入 8086,
4、同時, 8086通過 8255A,將數(shù)據(jù)輸入給數(shù)碼管把相應的值顯示出來,將高電平送到蜂 鳴器的正極輸入端使其發(fā)出預定的聲音。 本方案在設計上無錯誤, 應 用界面友好的 Proteus 軟件來設計在理論可實現(xiàn)。在大一時學習了 C語言,對于程序設計有一定的基礎。本學期還 學習了匯編程序設計,結合C語言,對匯編程序的設計有一定的經(jīng)驗。 此外,小組中有 3 人曾參加工院的本科生科技創(chuàng)新項目, 對單片機的 編程熟練,并有一定的工程實踐經(jīng)驗。本小組成員團結性強,學習能 力好。能夠相互協(xié)調(diào)克服困難。本實驗應用的軟件技術成熟, 在網(wǎng)上有很多成熟的設計可供借鑒。圖1口CP圖2四、硬件設計整個設計如圖所示,808
5、6通過地址總線與74273相連實現(xiàn)數(shù)據(jù) 鎖存的功能,再通過8255A與外設接口相連接,通過其 A、B、C 口 實現(xiàn)對其它設備進行控制。這些設備包括:輸入鍵盤,蜂鳴器,4位數(shù)碼管,幕運算按鈕,計數(shù)按鈕。五、軟件設計本實驗的程序部分,其流程圖如下:開始檢測第二個按鍵清to輸出結果11i結束六、具體代碼實現(xiàn)由于代碼較多,因此放在最后的附錄七、調(diào)試與測試第一步:對實現(xiàn)基本加、減、乘、除運算的測試分別進行四種基本運算:1. 計算 25+37 的結果依次按下 2、5、+、3、7、=,在顯示器上顯示出結果: 63。 加法運算正確。2. 計算 27-9 的結果依次按下 2、7、-、9、 =,在顯示器上顯示出結
6、果: 18。 減法運算正確。3. 計算 15*2 的結果依次按下 1、5、* 、2、=,在顯示器上顯示出結果: 30。 乘法運算正確。4. 計算 568 的結果依次按下 5、6、 8、=,在顯示器上顯示出結果: 7。 除法運算正確。第二步:對實現(xiàn)每按一次按鍵蜂鳴器發(fā)一次預定聲音功能的測試。 執(zhí)行后,按下按鍵蜂鳴器出聲則此功能可以正常實現(xiàn)。第三步:對實現(xiàn)冪運算的功能進行測試計算 83的結果依次按下&人、3,在顯示器上顯示出結果:524。冪運算正確。第四步:對計數(shù)功能進行測試使整個電路開始工作,按下自動計數(shù)開始的按鈕,計數(shù)開始,到8結束,蜂鳴器發(fā)聲提示時間到。 此功能執(zhí)行成功。第五步:手動
7、計數(shù)加 1和減 1的功能測試按下手動加 1 按鈕,數(shù)碼管上顯示的值加 1,按下手動減 1 按鈕,數(shù)碼管上顯示的值減 1。功能執(zhí)行正常。八、關鍵技術1. 本實驗利用子程序思想將整個程序模塊化,使得程序清晰明了,并 且調(diào)用方便,移植性好,升級簡單;2. 運用矩陣鍵盤掃描和鍵值比較確保每一個鍵都能夠被8086 及時檢測到并正確識別;3. 用大循環(huán)將整個程序反復執(zhí)行,保證程序按設計執(zhí)行,不會出現(xiàn)跑 飛的情況;4. 正確設置8255A工作方式,是8086讀取鍵盤值和送數(shù)至數(shù)碼管高 效正確執(zhí)行。九、實際完成功能通過硬件電路的搭接和匯編程序的設計, 我們設計出的計算器可 以正確的完成以下功能:1. 對加、減
8、、乘、除的基本運算。通過鍵盤輸入并顯示要計算 的數(shù)字和執(zhí)行的運算,通過數(shù)碼顯示器顯示計算結果;2. 實現(xiàn)每次按下按鈕時蜂鳴器都能發(fā)出聲響。表明已有按鍵按 下,可以根據(jù)聲響的次數(shù)來判斷輸入數(shù)字的個數(shù)和是否誤輸?shù)那闆r,有效避免和降低了用戶錯誤的發(fā)生;3. 實現(xiàn)求冪運算的功能。通過鍵盤輸入底數(shù)和冪次,由數(shù)碼顯 示器顯示計算結果,在簡單計算器的基礎上,實現(xiàn)了更高級 的運算,實用性增強;4. 實現(xiàn)從計數(shù)的功能, 并有自動計數(shù)、 手動加 1 計數(shù)和手動減 1 計數(shù)功能可供選擇。按下自動計數(shù)鍵,電路便開始實現(xiàn)計數(shù) 的功能并由數(shù)碼顯示器顯示,計數(shù)到預定值時停止并提示用 戶。十、總結(任務分工等)通過小組人員的
9、共同努力, 我們順利實現(xiàn)了計算器的預計全部功 能,并在此基礎上增加了一些實用的功能。 我們小組的任務分工如下:在本次的實驗中,使我們熟練地掌握了 Proteus 軟件的運用,對 課本的知識理解更加深刻。 學會了運用所學的知識來解決實際的問題, 積累了一些動手實踐的經(jīng)驗。在上課時學習的都是基本的程序設計, 沒有什么子程序,程序短而且簡單,分析起來不困難。而在本實驗中, 要求設計的是一個完整的系統(tǒng), 這就要求我們從系統(tǒng)出發(fā), 把視野放 在整體上, 力求各個子模塊之間的相互協(xié)調(diào)和配合, 共同組成完整可 行的系統(tǒng)。本次實驗一改以往做實驗的風格, 通過一個大的綜合實驗和小組 結對的方式, 給學員更多的自
10、由發(fā)揮空間, 使學員的許多方面得到了 鍛煉。在一個系統(tǒng)中, 不是通過各個子模塊的簡單堆積就能夠?qū)崿F(xiàn)整 體的功能,而是各個模塊相互協(xié)調(diào),發(fā)揮各自的功能,才能完美實現(xiàn) 所需要的功能。因此,本實驗其實難度更大,也更有實際意義。其實 際意義早已超越了實驗本身。 通過一個綜合實驗, 我們更加充分的理 解了課本的程序語句, 不僅知道各條語句之間的相同點, 也理解了在 不同條件下它們的不同作用。本實驗在做的過程中, 我們從一個更高的層次對課本的知識進行 了一遍詳細的梳理。這次實驗,不管是對于課本的學習,還是今后參 加工作或者參加電子設計,都有很大的意義。、附錄實驗程序源碼DATA SEGMENTXDB?,?
11、,?,?,;存放數(shù)據(jù)的每一位X1DW?;存放第一個數(shù)據(jù)值X2DW?;存放第二個數(shù)據(jù)值YDW?;存放運算結果SDB?;存放運算符號值EDB?;按下等號鍵標記CCDB?;存放運算數(shù)據(jù)位數(shù)HDB0;存放按鍵行號LDB0;存放按鍵列號SJISZHI DB? ;存放計數(shù)值的變量DISCODE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71;段碼表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOVMOVMOV SJISZHI,0MOV口輸出,C 口輸出OUTMOVX的高
12、位KKK: CALLJMPAX,DATADS,AXAL,90H;設置為A 口輸入,B46H,ALDI,OFFSET X+3;DI 指向KEY;掃描按鍵; 以下為按鍵掃描子程序,程序返回后,在變量 H 和 L 中存放當KKK前按鍵的行列號KEYPROCCHECK:CALLDISP; 等待按鍵按下的同時進行顯示MOVAL,0F0H;所有行輸出低電平OUT44H,ALINAL,40HCMPAL,0FFH;讀列值JZCHECK;若都為高電平則無鍵按下,等待MOVCX,50LOOP$;延時消抖INAL,DX;重讀列值CMPAL,0FFHJZCHECK;無鍵按下一直等待MOVH,0;有鍵按下,先把行列號變
13、量清 0MOVL,0MOVBL,01HMOVBH,0FEH;掃描法讀鍵值:從第一行開始測試,即PCO輸出低電平NEXT:MOVAL,BHOUT44H,ALNEXTH: INAL,40H;讀列值,判斷是第幾列有鍵按下JZWAIT0ROLBL,1CMPBL,20H;當前行狀態(tài)下沒有任何列有鍵按下,則轉(zhuǎn)為對下一行的測試JZNEXTLINCH;每判斷一列,列號加 1JMPNEXTH;再對下一列進行判斷NEXTL: MOVH,0MOVBL,01HROLBH,1;對下一行測試,讓下一個PC口輸出低電平CMPBH,0EFHJZEXITINCLJMPNEXTTESTAL,BL;從第一列開始判斷WAIT0:IN
14、AL,40H;若有鍵按下, 則等該按鍵松開后再計算鍵值CMPAL,0FFHJNZWAIT0MOVCX,50LOOP$; 延時消抖INAL,40HCMPAL,0FFHJNZWAIT0CALLKEYVALUE ;調(diào)計算鍵值子程序EXIT: RETKEY ENDP;以下為計算鍵值子程序 ,通過行列號計算鍵值 (鍵值 =列號*5+行號);鍵值存放在 DL 寄存器中KEYVALUE PROCPUSH AXMOV AL,0FFHOUT 42H,ALCALL DELAYCALL DELAYCALL DELAYMOV AL,00HOUT42H,ALPOP AXMOVDL,LMOVDH,HMOVAL,5MULD
15、L;列號乘 5MOVDL,ALADDDL,DHCMPDL,0JZQICMPDL,1JZBACMPDL,2JZJIUCMPDL,5JZSHCMPDL,6JZWUCMPDL,7JZLIUCMPDL,9JZJISHU_CALL ;自動計數(shù)CMPDL,10JZYICMPDL,11JZERCMPDL,12JZSANCMPDL,14JZSJI_CALL ;手動加 1CMPDL,15JZCLR_CALL ;按下的是清除鍵CMPDL,16JZLINCMPDL,17JZOUTP_CALL ;按下的是等于鍵CMPDL,19JZSJIJ_CALL ;手動減 1JMPCONT_CALLSH:MOVDL,4CALLNU
16、MBERJMPEXIT1WU:MOVDL,5CALLNUMBERJMPEXIT1LIU:MOVDL,6CALLNUMBERJMPEXIT1QI:MOVDL,7CALLNUMBERJMPEXIT1BA:MOVDL,8CALLNUMBERJMPEXIT1JIU:MOVDL,9CALLNUMBERJMPEXIT1YI:MOV DL,1CALL NUMBERJMP EXIT1ER:MOV DL,2CALL NUMBERJMP EXIT1SAN:MOV DL,3CALL NUMBERJMP EXIT1CALL NUMBERJMPEXIT1CLR_CALL: CALLCLEAR;調(diào)清除鍵處理子程JMPEX
17、IT1JISHU_CALL:CALL ZJIS ;調(diào)用自動計數(shù)子程序JMPEXIT1SJIJ_CALLD: EC SJISZHI調(diào)用減1 計數(shù)字程序CALL SJISJI_CALLI:NCSJISZHICALL SJI ;調(diào)用手動計數(shù)子程序JMP EXIT1NUM_CALL: CALLNUMBER;調(diào)數(shù)字鍵處理子程JMPEXIT1CONT_CALL: MOVS,DL;存放運算鍵的鍵值MOVE,0CALLCOUNT;調(diào)運算鍵處理子程序,計算第一個加數(shù)JMPEXIT1JMP EXIT1EXIT1: RETKEYVALUE ENDP;以下為清除鍵處理子程序,按下清除鍵后, X 變量全部清 0CLEA
18、R PROCMOVX3,0MOVX2,0MOVX1,0MOVX0,0CALLBITPRETCLEAR ENDP;以下為等號鍵處理子程序,該子程序負責將第二個運算數(shù)據(jù)的數(shù)值計算出來存入 X2 變量;并根據(jù)運算符號,調(diào)用相應的運算子程序OUTP PROCPUSHAXPUSHDXPUSHBXINCECALLCOUNT;調(diào)運算鍵處理子程序,計算第二個運算數(shù)據(jù)CMPS,18JZADD_CALL;運算符為加號,則調(diào)用加法子程序CMPS,13JZSUB_CALL;運算符為減號,則調(diào)用減法子程序CMPS,8JZMUL_CALL;運算符為乘號,則調(diào)用乘法子程序CMPS,3JZDIV_CALL;運算符為除號,則調(diào)
19、用除法子程序CMPS,4JZCF_CALLADD_CALL: CALLADDPJMPSTORE1SUB_CALL: CALLSUBPJMPSTORE1MUL_CALL: CALLMULPJMPSTORE1CF_CALL: CALLCFPJMPSTORE1DIV_CALL: CALLDIVPJMPSTORE1STORE1: MOV AX,Y;以下程序?qū)⒏鬟\算子程序返回的運算結果,按位分解,送入 X 變量MOVDX,0MOVBX,1000DIVBXMOVX0, ALMOVAX,DXMOVBL,100DIVBLMOVX1,ALMOVAL,AHMOVAH,0MOVBL,10DIVBLMOVX2,ALM
20、OVX3,AHPOPBXPOPDXPOPAXRETOUTP ENDP;以下為運算鍵處理子程序,該程序?qū)⒌谝粋€運算數(shù)據(jù)的數(shù)值計 算出來并存入 X1 變量;或者將第二個運算數(shù)據(jù)的數(shù)值計算出來并存入X2 變量;將運算符的值存入S變量COUNT PROCPUSHAXPUSHBXPUSHDXMOVDX,0CALLBITP;測試 X 中的數(shù)據(jù)是多少位CMPCC,4;輸入的數(shù)據(jù)是4位數(shù)?JZC4CMPCC,3;輸入的數(shù)據(jù)是3位數(shù)?JZC3CMPCC,2;輸入的數(shù)據(jù)是2位數(shù)?JZC2JMPC1;輸入的數(shù)據(jù)是1位數(shù)?C4:MOVAX,0MOVAL,X0MOVBX,1000MULBXMOVDX,AXC3:MOVA
21、L,X1MOVBL,100MULBLADDDX,AXC2: MOVAL,X2MOVBL,10MULBLADDDX,AXC1: MOVAL,X3MOVAH,0ADDDX,AXCMPE,1JNZX1_SMOVX2,DX;按下的是等號,則將第二個運算數(shù)據(jù)的值存入X2變量JMPEXIT3X1_S: MOVX1,DX;按下的是運算符號,則將第一個運算數(shù)據(jù)的值存X1變量MOVX3,0;清空X變量MOVX2,0MOVX1,0MOVX0,0EXIT3: POP DXPOPBXPOPAXRETCOUNT ENDP;以下為數(shù)字鍵處理子程序;該程序,將輸入的數(shù)據(jù)按位存放在 X變量中,并由CC記錄數(shù)據(jù)的位數(shù)NUMBE
22、R PROCCMPE,1JNZCONTINUEMOVE,0CALLCLEARCONTINUE: CMPCC,0; 目前數(shù)據(jù)為 0 位,即沒有數(shù)據(jù),則轉(zhuǎn)到 SSSJZSSS; 若已有數(shù)據(jù),以下程序?qū)左移8位。;例如:先輸入“ 1”,當再輸入 2 時,; 先要將“ 1”從個位移到十位,然后再將“ 2”存放到個位PUSH AXPUSHDXMOVAL,X3MOVAH,X2MOVDL,X1MOVDH,X0MOVCX,8LL:SHLAX, 1RCLDX,1LOOPLLMOVX3,ALMOVX2,AHMOVX1,DLMOVX0,DHPOPDXPOPAXSSS:MOVDI,DL;將當前鍵入的數(shù)據(jù)存放到 X
23、的最低位INCCC;數(shù)據(jù)位數(shù)加 1CMPCC,4;判斷數(shù)據(jù)位數(shù)JNGEXIT2MOVCC,0;如果數(shù)據(jù)超過 4 位,重新從最低位開始存放MOVMOVMOVEXIT2: CALL 入的數(shù)據(jù)RETNUMBER ENDP;加法子程序ADDP PROCPUSHMOV ADDMOVPOPRETADDP ENDP ;減法子程序SUBP PROC PUSH MOV SUBX2,0X1,0X0,0DISP;調(diào)顯示子程序,顯示輸AXAX,X1AX,X2Y,AXAXAXAX,X1AX,X2MOVY,AXPOPAXRETSUBPENDP;乘法子程序MULPPROCPUSHAXPUSHDXMOVAX,X1MOVDX,
24、X2MULDXMOVY,AXPOPDXPOPAXRETMULPENDP;除法子程序DIVPPROCPUSHAXPUSHBXPUSHDXMOVDX,0AX,X1BX,X2BXY,AXDXBXAXAXDXCXAX,X1DX,X1CX,X2CXDXY,AXDX,X1MOVMOVDIVMOVPOPPOPPOPRETDIVP ENDP ;乘方子程序CFP PROCPUSHPUSHPUSHMOVMOVMOVDECLP:MULMOVMOVLOOPLPCXDXAX將 X 中的數(shù)值按位顯示出來BXAXBH,0SI,DISCODEPOPPOPPOPRETCFP ENDP;顯示子程序DISP PROCPUSHPUS
25、HMOVLEACALLCMPJZCMPJZCMPJZCMPJMPBITP;測試 X 位數(shù)CC,4QIANCC,3BAICC,2SHICC,1GQIAN:MOVAH,11100000B;從第 4位開始顯示MOVAL,AHOUT44H,ALMOVBL,X0MOVAL,SI+BXOUT42H,ALCALLDELYMOVAL,0OUT42H,ALBAI:MOVAH,11010000B;從第 3位開始顯示MOVAL,AHOUT44H,ALMOVBL,X1MOVAL,SI+BXOUT42H,ALCALLDELYMOVAL,0OUT42H,ALSHI: MOVAH,10110000B;從第 2位開始顯示MO
26、VAL,AHOUT44H,ALMOVBL,X2MOVAL,SI+BXOUT42H,ALCALLDELYMOVAL,0OUT42H,ALG: MOV AH,01110000B ;從第 1位開始顯示MOVAL,AHOUT44H,ALMOVBL,X3MOVAL,SI+BXOUT42H,ALCALLDELYJMPEXIT4EXIT4:DISPPOPPOPRETENDPAXBX;分析數(shù)據(jù)位數(shù)子程序BITPPROCCMPX0,0;如果X0不為0,則數(shù)據(jù)為 4 位數(shù)JNZFOURBITCMPX1,0;如果X1不為0,則數(shù)據(jù)為 3 位數(shù)JNZTHREEBITCMPX2,0;如果X2不為0,則數(shù)據(jù)為 2 位數(shù)J
27、NZTOWBITCMPX3,0;如果X3不為0,則數(shù)據(jù)為 1 位數(shù)JNZONEBITJMPZER0BIT;否則,沒有數(shù)據(jù)FOURBIT: MOVCC,4JMPEXIT5THREEBIT: MOVCC,3JMPEXIT5TOWBIT: MOV CC,2JMPEXIT5ONEBIT: MOVCC,1JMPEXIT5ZER0BIT: MOVCC,0EXIT5: RETBITP ENDP;延時子程序DELY PROCPUSHCXMOVCX,100LOOP$POPCXRETDELY ENDP;長延時子程序DELAY PROCPUSHCXMOVCX,60000LOOP$POPCXRETDELAY ENDP;手動計數(shù)子程序SJI PROCPUSH DXPUSH BXPUSH CXPUSH AXCALLCLEAR ;先顯示 0LEASI,DISCODEMOVAL,SJISZHIM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村板車出售合同范例
- 公司注銷業(yè)務合同范本
- 中醫(yī)診所招聘合同范本
- 單位出售土地合同范本
- 公司車定維修合同范本
- 共享出租場地合同范本
- 勞務聯(lián)營合同范例
- 加油站出租合同范本
- 企業(yè)賦能合同范本
- 二手房房東出租合同范例
- 大客戶營銷的黃金法則
- 鋼棧橋設計計算書
- 貿(mào)易術語案例討論題匯總
- 建筑工地緊急事件處理流程圖
- 中山市培養(yǎng)引進緊缺適用人才導向目錄(2011-2012年)
- 小學三年級下冊開學語文老師家長會發(fā)言
- 對講機測試報告
- 3、分段計費問題
- 防滲墻專項施工方法
- 執(zhí)業(yè)(助理)醫(yī)師資格證書遺失補辦申請表
- 精品資料(2021-2022年收藏)垃圾焚燒發(fā)電廠監(jiān)理規(guī)劃
評論
0/150
提交評論