8086簡易計算器的設計-計算機硬件-微機原理-課程設計_第1頁
8086簡易計算器的設計-計算機硬件-微機原理-課程設計_第2頁
8086簡易計算器的設計-計算機硬件-微機原理-課程設計_第3頁
8086簡易計算器的設計-計算機硬件-微機原理-課程設計_第4頁
8086簡易計算器的設計-計算機硬件-微機原理-課程設計_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上計算機硬件技術實踐報告題目 簡易計算器的設計 姓名 專業 自動化(電站方向) 班級 學號 上海電力學院自動化工程學院一、設計題目及目的本次課程設計的實驗目的是:通過該實驗掌握較復雜程序的設計;能獨立完成用程序對8086、8255A控制鍵盤和LED顯示的控制,完成計算器加減法的應用;獨立編寫程序,明白和掌握程序的原理和實現方式;學習和掌握計算機中常用接口電路的應用和設計技術,充分認識理論知識對應用技術的指導性作用;進一步加強理論知識與應用相結合的實踐和鍛煉,為以后的設計提供經驗。這次設計實踐,加深了我對專業知識和理論知識學習的認識和理解,使我的設計水平和對所學的知識的應

2、用能力以及分析問題解決問題的能力得到全面提高。我們的具體任務是用8086設計一個能實現09整數加減乘除法的運算器,并用2位LED數碼顯示,鍵盤包括0-9,+ ,-,=,NO/C共16個按鍵。二、小組成員分工及成果在實驗課程要求下,我們選擇基于8086CPU的模擬計算器設計。要完成設計首先需要構建簡單的微型計算機應用系統,其次是確定組成各部件的芯片,然后畫原理圖,根據相應的原理以及實現過程,編寫出相應的匯編代碼。再根據原理圖連接硬件電路,電路連接完成后進行調試。設計過程中我們用到了8086CPU、可編程并行輸入/輸出芯片8255A、74HC138、74HC373、矩陣式鍵盤、LED數碼管。我們的

3、模擬計算器能實現2位十進制數以內的加減乘除法運算。首先,本組的三個成員一起討論研究簡易計算器設計的主要方案。粗略設計程序流程圖以確定簡易計算器設計的大概框架。明確目的后各自查詢資料了解設計原理、逐步清晰設計思路。以下為大體分工:主要負責:1、設計主要程序,編寫;2、查找資料驗證修改;主要負責:1、選擇需要用的各個芯片;2、設計硬件原理圖;主要負責:1、各個芯片功能的資料查找; 2、設計程序流程圖三、設計方案思路用8086設計一個能實現09整數加減乘除法的運算器,并用2位LED數碼顯示,鍵盤包括0-9,+ ,-,=,NO/C共16個按鍵。1、通過小鍵盤做加減乘除運算。2、數碼管顯示器作輸入數據和

4、結果數據的顯示。3、數字用小鍵盤09,“C、= ”做功能鍵4、運算順序:a.首先輸入一個原始數據(在09之間,否則無反應)顯示器跟隨顯示 b.按“+、”顯示器內容不變 c.再次輸入一個數據(在09之間,否則無反應)顯示器跟隨顯示 d.按“=”顯示器顯示結果數據 e.按C顯示“00”數據清0,并重新開始運算 f.若輸入一個數據后直接按“=”則數據不變設計思路:將整個程序劃分為鍵盤掃描部分,顯示部分,運算程序部分。首先利用程序不斷掃描鍵盤是不是有輸入,如果沒有就一直掃描,如果有就停止掃描,完成輸入,利用匯編的程序核對輸入鍵的數值,通過調用子程序實現運算。運算完成后將運算的結果儲存并顯示到LED顯示

5、器上。 軟件流程大致如下:開始,然后是系統的初始化,進行鍵盤掃描,對掃描的鍵值進行判斷(分為數字鍵和功能鍵),若為數字鍵,則執行數字鍵處理程序,即顯示數字并將數值存儲;若為功能鍵,則先判斷是否為清屏,如是清屏,則執行清屏子程序,如是加減乘除運算鍵則調用相應程序運算,如是等號鍵,則先判斷上個符號位,調用相對應的運算子程序進行運算,如此就可以得到需要的結果了。 四、硬件原理圖(包括芯片的選型介紹)硬件電路圖:(見圖1) 圖1 原理圖1、鍵盤輸入模塊鍵盤是常用信息輸入元件,其實鍵盤也是由一個個按鈕組成,如果是獨立按鈕的話必須要對應一個I/O口對它進行檢測,而鍵盤往往只需要鍵盤按鈕數一半的I/O口對它

6、進行檢測,也許對一個比較簡單的系統I/O口數一般不是問題,但對于一個大型、復雜的系統來說I/O資源就顯得非常珍貴了,盡量減少I/O使用是非常利于降低成本,另外一方面鍵盤比用獨立按鍵要美觀,同時硬件上的節省必然導致軟件上編程的復雜。我們設計時使用的是4*4式鍵盤,如圖2所示。圖2 鍵盤圖中有4行4列,4根行線與PC口相連,4根列線與PA口相連。按鍵設置在行、列交點處(數字或字符為其鍵號),行、列線分別連接到按鍵開關的兩端。鍵盤中有無按鍵按下是由行線送入全掃描字、列線讀入行線狀態來判斷。這就是:給行線所有I/O線均置成低電平,然后讀入列線電平狀態。如果有按鍵按下,總會有一根列線電平被拉至低電平,從

7、而使列線輸入不全為1。2、可編程并行通信接口芯片8255A 圖3 8255A(1)并行輸入/輸出端口A,B,C 8255A內部包括三個8位的輸入輸出端口,分別是端口A、端口B、端口C,相應信號線是PA7PA0、PB7PB0、PC7PC0。端口都是8位,都可以作為輸入或輸出。通常將端口A和端口B定義為輸入/輸出的數據端口,而端口C則既可以作數據端口,又可以作為端口A和端口B的狀態和控制信息的傳送端口。(2)A組和B組控制部件端口A和端口C的高4位(PC7PC4)構成A組;由A組控制部件實現控制功能。端口B和端口C的低4位(PC3PC0)構成B組;由B組控制部件實現控制功能。 A組和B組利用各自的

8、控制單元來接收讀寫控制部件的命令和CPU通過數據總線(D0D7)送來的控制字,并根據他們來定義各個端口的操作方式。(3)數據總線緩沖存儲器 三態雙向8位緩沖器,是8255A與8086CPU之間的數據接口。與I/O操作有關的數據、控制字和狀態信息都是通過該緩沖器進行傳送。(4) 讀/寫控制部件8255A是能完成讀/寫控制功能的部件。能接收CPU的控制命令,并根據控制命令向各個功能部件發出操作指令。CS 片選信號:由CPU輸入,有效時表示該8255A被選中。 RD, WR 讀、寫控制信號:由CPU輸入。RD有效表示CPU讀8255A,WR有效表示CPU寫8255ARESET 復位信號:由CPU輸入

9、。RESET信號有效,清除8255A中所有控制字寄存器內容,并將各個端口置成輸入方式。圖4 8255A內部結構定義工作方式控制字:工作方式0:8255A中各端口的基本輸入/輸出方式。圖5 8255A工作方式控制3、顯示模塊圖6 顯示器顯示原理:顯示子程序把數據每一位獨立顯示,每次從最高位顯示到最低位,在掃描鍵盤的時候不斷調用顯示子程序,形成了從高位到低位的不斷循環顯示,由于循環速度快,看起來就好像一起顯示的。4、74HC373圖7 74HC373其中AD0-AD7為數據輸入端,A0-A7為輸出端。當三態允許控制端OE為低電平時,A0-A7為正常邏輯狀態,可用來驅動負載或總線,當OE為高電平時,

10、A0-A7成高阻態,不驅動總線。當鎖存允許端LE為高電平時,A隨數據AD而變,當LE為低電平AD被鎖存在已建立的數據電平。5、74HC138圖8 74HC13874HC138是一款高速器件,74HC138引腳兼容低功耗肖特基TTL(LSTTL)系列。74HC138譯碼器可接受3位二進制加權地址輸入(A0, A1和A2),并當使能時,提供8個互斥的低有效輸出(Y0至Y7)。74HC138特有3個使能輸入端:兩個低有效(E1和E2)和一個高有效(E3)。除非E1和E2置低且E3置高,否則74HC138將保持所有輸出為高,74HC138為反相輸出,它按照三位二進制輸入碼和賦能輸入條件,從8 個輸出端

11、中譯出一個 低電平輸出。兩個低電平有效的賦能輸入端和一個高電平有效的賦能輸入端減少了擴展所需要的外接門或倒相器。6、8086CPU圖98086CPU的40條引腳信號可按功能分可分為四類,它們是:地址總線,數據總線,控制總線,其它(時鐘與電源)。 最小模式下一些引腳功能(MN/MX接5V):AD15AD0,地址/數據總線 A19/S6A16/S3,地址/狀態總線 RD,讀信號 WR,寫信號 M/IO,存儲器/輸入輸出控制信號ALE,地址鎖存允許信號READY(Ready),準備就緒信號INTR,可屏蔽中斷請求信號INTA,中斷響應信號 NMI,非屏蔽中斷請求信號RESET,系統復位信號 DEN,

12、數據允許信號 DT/R,數據發送/接收控制信號HOLD,總線保持請求信號輸入 HLDA,總線保持響應信號 TEST,測試信號 CLK,時鐘輸入信號 VCC(+5V),GND 放鍵?保存第一個數據保存第二個數據減號?乘號?除號?清零?等號?OPER為0加號?開始8255A初始化有無壓鍵繼續掃描是數字鍵五、程序流程圖NYYY保存“+”在OPERNNYY保存“-”在OPERNY保存“”在OPERNYY保存“”在OPERN繼續掃描鍵盤NYN清零顯示器和數據YN進行+、運算,并將結果進行顯示,等待C被按下六、程序清單,要有適當的注釋DATA SEGMENT NUM1 DB 03H DUP(0) NUM

13、DB 03H DUP(0)DATA ENDSSTACK SEGMENT DW 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKPORTA EQU 30H ;A口地址PORTB EQU 32H PORTC EQU 34HPORT8255 EQU 36H ;8255片選始地址MAIN PROC FAR(8255初始化)START: MOV AX,DATA ; 數據段 MOV DS,AX ;將AX的內容傳送給DS MOV DX,PORT8255 ;把8255計數器里的內容放到DX寄存器 MOV AL,81H ;A組方式0;

14、A口輸出,C口高四位輸入 OUT DX,AL ;B組方式0;B口輸出,C口低四位輸入LOPL: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL ;ZF=1,即結果為0,則轉到LOPL CMP AL,0FH ;把AL和0FH相比較 JZ CCCL ;ZF=1,即結果為0,則轉到CCCL CMP AL,0AH ;把AH和0AH相比較 JZ LOPL ;ZF=1,即結果為0,則轉到LOPL JNC LOPL ;若CF=0,表示第一個數大,轉向LOPL OUT 32H,AL ;輸出B口數據ALLOPL2: L

15、EA SI,NUM ;將NUM的偏移地址給SI MOV SI,AL ;將AL的數據存放在SI中 PUSH AX ;AX出棧LOPL1: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL1 ;ZF=1,即結果為0,則轉到LOPL1 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL ;ZF=1,即結果為0,則轉到CCCL CMP AL,0AH ;把AL和0AH相比較 JZ XX1 ;ZF=1,即結果為0,則轉到XX1 CMP AL,0BH ;把AL和0BH相比較 JZ XX2 ;ZF=1,即結果

16、為0,則轉到XX2 CMP AL,0CH ;把AL和0CH相比較 JZ XX3D ;ZF=1,即結果為0,則轉到XX3D CMP AL,0DH ;把AL和0DH相比較 JZ XX4D ;ZF=1,即結果為0,則轉到XX4D JMP LOPL1 ;轉移到LOPL1CCCL: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLXX3D: CALL XX3 ;調用XX3程序XX4D: CALL XX4 ;調用XX4程序MAIN ENDP XX1 PROC NOP ;加LOPL3: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KE

17、Y程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL3 ; ZF=1,即結果為0,則轉到LOPL3 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL ; ZF=1,即結果為0,則轉到CCCL CMP AL,0AH ;把AL和0AH相比較 JZ LOPL3 ; ZF=1,即結果為0,則轉到LOPL3 JNC LOPL3 ;若CF=0,表示第一個數大,轉向LOPL3 OUT 32H,AL ;輸出B口數據AL PUSH AX ;AX出棧 LEA SI,NUM ;將NUM的偏移地址給SI MOV SI+1,AL ;將AL的數據存放在SI+1中LOPL4: XOR AH,AH

18、 ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL4 ;ZF=1,即結果為0,則轉到LOPL4 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL ; ZF=1,即結果為0,則轉到CCCL CMP AL,0EH ;把AL和0EH相比較 JZ XXX1 ; ZF=1,即結果為0,則轉到XXX1 JMP LOPL4 ;轉移到LOPL4XXX1: LEA SI,NUM MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH ; 相與,高四位置0,低四位保持不變,賦給DL ADD AL,D

19、L DAA ;轉化成BCD碼 OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLXX1 ENDPXX2 PROC NOP ;減LOPL5: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL5 ;ZF=1,即結果為0,則轉到LOPL5 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL ;ZF=1,即結果為0,則轉到CCCL CMP AL,0AH ;把AL和0AH相比較 JZ LOPL5 ; ZF=1,即結果為0,則轉到LOPL5 JNC LOPL5 OUT 32H,A

20、L ;輸出B口數據AL PUSH AX ;AX出棧 LEA SI,NUM ;將NUM的偏移地址給SI MOV SI+1,AL ;將AL的數據存放在SI+1中LOPL6: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL6 ; ZF=1,即結果為0,則轉到LOPL6 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL7 ;ZF=1,即結果為0,則轉到LOPL7 CMP AL,0EH ;把AL和0EH相比較 JZ XXX2 ;ZF=1,即結果為0,則轉到XXX2 JMP LOPL6 ;轉移到LOP

21、L6XXX2: LEA SI,NUM ;將NUM的偏移地址給SI MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH SUB AL,DL ADD AL,00H DAA OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLCCCL7: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPL XX2 ENDPXX3 PROC ;乘LOPL7: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL7 ;ZF=1

22、,即結果為0,則轉到LOPL7 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL2 ;ZF=1,即結果為0,則轉到CCCL2 CMP AL,0AH ;把AL和0AH相比較 JZ LOPL7 ; ZF=1,即結果為0,則轉到LOPL7 JNC LOPL7 ;若CF=0,表示第一個數大,轉向LOPL OUT 32H,AL ;輸出B口數據AL PUSH AX ;AX出棧 LEA SI,NUM ;將NUM的偏移地址給SI MOV SI+1,AL ;將AL的數據存放在SI+1中LOPL8: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H

23、;把AH和00H相比較 JZ LOPL8 ;ZF=1,即結果為0,則轉到LOPL8 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL3 ; ZF=1,即結果為0,則轉到CCCL3 CMP AL,0EH ;把AL和0EH相比較 JZ XXX3 ;ZF=1,即結果為0,則轉到XXX3 JMP LOPL8 ;轉移到LOPL8XXX3: LEA SI,NUM ;將NUM的偏移地址給SI MOV AL,SI AND AL,0FH MOV DL,SI+1 AND DL,0FH MUL DL ; DL*AL AAM ;商放AH,余數放AL MOV CL,4 SAL AH,CL ;把AH向左移四位

24、 OR AL,AH ;或指令,有1置1 OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLCCCL2: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLCCCL3: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLXX3 ENDPXX4 PROC ;除LOPL9: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL9 ; ZF=1,即結果為0,則轉到LOPL9 CMP AL,0FH

25、 ;把AL和0FH相比較 JZ CCCL5 ; ZF=1,即結果為0,則轉到CCCL5 CMP AL,0AH ;把AL和0AH相比較 JZ LOPL9 ;ZF=1,即結果為0,則轉到LOPL9 JNC LOPL9 ;若CF=0,表示第一個數大,轉向LOPL9 OUT 32H,AL ;輸出B口數據AL PUSH AX ;AX出棧 LEA SI,NUM ;將NUM的偏移地址給SI MOV SI+1,AL ;將AL的數據存放在SI+1中LOPL10: XOR AH,AH ;抑或指令,使AH清零 CALL KEY ;調用KEY程序 CMP AH,00H ;把AH和00H相比較 JZ LOPL10 ;Z

26、F=1,即結果為0,則轉到LOPL10 CMP AL,0FH ;把AL和0FH相比較 JZ CCCL4 ;ZF=1,即結果為0,則轉到CCCL4 CMP AL,0EH ;把AL和0EH相比較 JZ XXX4 ; ZF=1,即結果為0,則轉到XXX4 JMP LOPL10 ;轉移到LOPL10XXX4: LEA SI,NUM ;將NUM的偏移地址給SI MOV AL,SI AND AL,0FH ;與指令,高四位清零,低四位不變 MOV BL,SI+1 AND BL,0FH AND AX,000FH DIV BL ; ALBL,商放在AL中,余數放在AH中 OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLCCCL4: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPLCCCL5: MOV AL,00H OUT 32H,AL ;輸出B口數據AL JMP LOPL ;轉移到LOPL XX4 ENDPKEY PROC NOP LEA SI,NUM1 MOV AL,0EH OUT 30H,AL ;輸出A口數據AL IN AL,34H CMP AL,07H ;把AL和07H相比較 JZ LL7 ; ZF=1,即結果為0,則轉到LL7 CMP AL,0BH ;把AL和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論