




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機原理實驗報告1.設計任務:根據微機原理課程所學相關知識及實驗教程相關內容,在基于proteus平臺,使用匯編語言,以8086為核心的情況下,配合可編程并行接口器件8255A,LED數碼管等器件實現可進行簡單四位數加減乘除法及清零、乘方、對數、二進制轉換等擴展功能的十進制計算器。2.需求分析:操控核心為微處理器8086芯片,可編程并行接口芯片8255A對輸入掃描的矩陣按鍵,顯示模塊LED數碼管,其他輔助器件如74LS138譯碼器、74LS373等。3.總體方案(選擇與論證)流程:第一步,確定鍵盤是否有輸入(使用程序不斷進行掃描)。第二步,如果有輸入就調用子程序進行判斷,是數值則進行存儲并同時
2、進行顯示,是運算符號等就調用相應的子程序進行操作。第三步,繼續掃描鍵盤是否有輸入,從而實現4位十進制數以內的加減乘除法或者擴展功能運算。第四步,運算完成后將運算的結果儲存并顯示到LED顯示器上。4.硬件設計實驗中根據需求需以下器件:微處理器8086芯片當引腳接高電平時,CPU工作于最小模式。此時,引腳信號2431的含義及其功能如下: (1)IO/M/(memory I/O select):存儲器、I/O端口選擇控制信號。 信號指明當前CPU是選擇訪問存儲器還是訪問I/O端口。為高電平時訪問存儲器,表示當前要進行CPU與存儲器之間的數據傳送。為低電平時,訪問I/O端口,表示當前要進行CPU與I/
3、O端口之間的數據傳送。 (2)WR/(write):寫信號,輸出,低電平有效。 信號有效時,表明CPU正在執行寫總線周期,同時由信號決定是對存儲器還是對I/O端口執行寫操作。(3)INTA/(interrupt acknowledge):可屏蔽中斷響應信號,輸出,低電平有效。 CPU通過信號對外設提出的可屏蔽中斷請求做出響應。為低電平時,表示CPU已經響應外設的中斷請求,即將執行中斷服務程序。 (4)ALE(address lock enable):地址鎖存允許信號,輸出,高電平有效。 CPU利用ALE信號可以把AD15 AD0地址/數據、A19/S6A16/S3地址/狀態線上的地址信息鎖存在
4、地址鎖存器中。 (5)DT/(data transmit or receive):數據發送/接收信號,輸出,三態。 DT/信號用來控制數據傳送的方向。DT/為高電平時,CPU發送數據到存儲器或I/O端口;DT/為低電平時,CPU接收來自存儲器或I/O端口的數據。 (6)DEN/(data enable):數據允許控制信號,輸出,三態,低電平有效。信號用作總線收發器的選通控制信號。當為低電平時,表明CPU進行數據的讀/寫操作。 (7)HOLD(bus hold request):總線保持請求信號,輸入,高電平有效。在DMA數據傳送方式中,由總線控制器8237A發出一個高電平有效的總線請求信號,通
5、過HOLD引腳輸入到CPU,請求CPU讓出總線控制權。 (8)HLDA(hold acknowledge):總線保持響應信號,輸出,高電平有效。HLDA是與HOLD配合使用的聯絡信號。在HLDA有效期間,HLDA引腳輸出一個高電平有效的響應信號,同時總線將處于浮空狀態,CPU讓出對總線的控制權,將其交付給申請使用總線的8237A控制器使用,總線使用完后,會使HOLD信號變為低電平,CPU又重新獲得對總線的控制權。 可編程并行接口芯片8255A微機系統的信息交換有兩種方式:并行通信接口方式和串行通信接口方式。接口電路在CPU和I/O設備之間起著信號的變換和傳輸的作用。8255A可為86系列CPU
6、與外部設備之間提供并行輸入/輸出的通道。由于它是可編程的,可以通過軟件來設置芯片的工作方式,因此,用8255A連接外部設備時,通常不用再附加外部電路,使用教方便。并行接口是在多根數據線上,以數據字節/字與I/O設備交換信息。在輸入過程中,輸入設備把數據送給接口,并且使狀態線“輸入準備好”有效。接口把數據存放在“輸入緩沖寄存器”中,同時使“輸入回答”線有效,作為對外設的響應。外設在收到這個回答信號后,就撤消數據和“輸入準備好”信號。數據到達接口中后,接口會在“狀態寄存器”中設置輸入準備好標志,或者向CPU發一個中斷請求。CPU可用查詢方式或中斷方式從接口中讀取數據。接口中的數據被讀取后,接口會自
7、動清除狀態寄存器中的標志,且撤消對CPU的中斷請求。在輸出過程中,每當輸出寄存器可以接收數據,接口就會將狀態寄存器中“輸出準備好”狀態置1或向CPU發一個中斷請求,CPU可用查詢或中斷方式向接口輸出數據。當CPU輸出的數據到達接口后,接口會清除“輸出準備好”狀態,把數據送往外設,并向外設發一個“數據輸出準備好”信號。外設受到驅動后,便接收數據,并向接口電路發一個“輸出回答”信號,接口收到該回答信號后,又將狀態寄存器中“輸出準備好”置位,以便CPU輸出下一個數據。定義工作方式控制字:LED數碼管LED為發光二極管構成的顯示器件,亦稱數碼管。由7個字符段和一個小數點段組成,每段對應一個發光二極管,
8、當發光二極管點亮時,相應的字符段點亮。LED有共陰極和共陽極兩種供應狀態。共陰極顯示時,將LED顯示的COM接地,將八個字符段端a、b、c、d、e、f、g、dp依次與一個8位I/O口的最低到最高位連接,當I/O給LED的哪個字符段送入一個高電平時,該段就被點亮,從而可從這7個字符段中被點亮的構成相應的字符顯示出來。同理,COM陽極即將COM端接Vcc,其顯示原理與COM陰極的基本相同,但I/O口送入低電平是相應的段才被點亮。5.軟件設計程序流程圖:(1)總程序流程圖:計算鍵值掃描加法運算減法運算顯示乘法運算存儲除法運算數值?運算符?“ = ” ?清零“ + ” ?“ - ” ?“ * ” ?(
9、2)鍵盤掃描程序流程圖:開始初始化延時12ms鍵掃描保存鍵值鍵閉合?鍵釋放?結束鍵閉合?YYYNNN6.具體代碼實現 DATA SEGMENT X DB ?,?,?,? ;存放數據的每一位 X1 DW ? ;存放第一個數據值 X2 DW ? ;存放第二個數據值 Y DW ? ;存放運算結果 S DB ? ;存放運算符號值 E DB ? ;按下等號鍵標記 CC DB ? ;存放運算數據位數 H DB 0 ;存放按鍵行號 L DB 0 ;存放按鍵列號Z1 DB ?Z2 DB ?Z3 DB ?Z4 DB ? DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
10、,6FH,77H,7CH,39H,5EH,79H,71H ;段碼表 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,90H ;設置為A口輸入,B口輸出,C口輸出 OUT 46H,AL MOV DI,OFFSET X+3 ;DI指向X的高位 KKK: CALL KEY ;掃描按鍵 JMP KKK;以下為按鍵掃描子程序,程序返回后,在變量H和L中存放當前按鍵的行列號 KEY PROC CHECK: CALL DISP ;等待按鍵按下的同時進行顯示 MOV AL,0F0H ;所有行輸出
11、低電平 OUT 44H,AL IN AL,40H CMP AL,0FFH ;讀列值 JZ CHECK ;若都為高電平則無鍵按下,等待 MOV CX,100 LOOP $ ;延時消抖 IN AL,DX ;重讀列值 CMP AL,0FFH JZ CHECK ;無鍵按下一直等待 MOV H,0 ;有鍵按下,先把行列號變量清0 MOV L,0 MOV BL,01H MOV BH,0FEH ;掃描法讀鍵值:從第一行開始測試,即PC0輸出低電平 NEXT: MOV AL,BH OUT 44H,AL NEXTH: IN AL,40H ;讀列值,判斷是第幾列有鍵按下 TEST AL,BL ;從第一列開始判斷
12、JZ WAIT0 ROL BL,1 CMP BL,80H ;當前行狀態下沒有任何列有鍵按下,則轉為對下一行的測試 JZ NEXTL INC H ;每判斷一列,列號加1 JMP NEXTH ;再對下一列進行判斷 NEXTL: MOV H,0 MOV BL,01H ROL BH,1 ;對下一行測試,讓下一個PC口輸出低電平 CMP BH,0EFH JZ EXIT INC L JMP NEXT WAIT0: IN AL,40H ;若有鍵按下,則等該按鍵松開后再計算鍵值 CMP AL,0FFH JNZ WAIT0 MOV CX,100 LOOP $ ;延時消抖 IN AL,40H CMP AL,0FF
13、H JNZ WAIT0 CALL KEYVALUE ;調計算鍵值子程序 EXIT: RET KEY ENDP ;以下為計算鍵值子程序,通過行列號計算鍵值(鍵值=列號*4+行號) ;鍵值存放在DL寄存器中 KEYVALUE PROC MOV DL,L MOV DH,H SHL DL,1 SHL DL,1 ;列號乘4 ADD DL,DH CMP DL,9 ;按下的是數字鍵 JNG NUM_CALL CMP DL,16 JL CONT_CALL ;按下的是運算鍵 CMP DL,16 JZ OUTP_CALL ;按下的是等于鍵 CMP DL,17 JZ CLR_CALL ;按下的是清除鍵 NUM_CA
14、LL: CALL NUMBER ;調數字鍵處理子程序 JMP EXIT1 CONT_CALL: MOV S,DL ;存放運算鍵的鍵值 MOV E,0 CALL COUNT ;調運算鍵處理子程序,計算第一個加數 JMP EXIT1 OUTP_CALL: CALL OUTP ;調等號鍵處理子程序 JMP EXIT1 CLR_CALL: CALL CLEAR ;調清除鍵處理子程序 EXIT1: RET KEYVALUE ENDP ;以下為清除鍵處理子程序,按下清除鍵后,X變量全部清0 CLEAR PROC MOV X3,0 MOV X2,0 MOV X1,0 MOV X0,0 CALL BITP R
15、ET CLEAR ENDP;以下為等號鍵處理子程序,該子程序負責將第二個運算數據的數值計算出來存入X2變量;并根據運算符號,調用相應的運算子程序 OUTP PROC PUSH AX PUSH DX PUSH BX INC E CALL COUNT ;調運算鍵處理子程序,計算第二個運算數據 CMP S,10 JZ ADD_CALL ;運算符為加號,則調用加法子程序 CMP S,11 JZ LOG_CALL ;運算符為對數,則調用對數子程序 CMP S,12 JZ JCE_CALL ;運算符為階乘號,則調用階乘子程序 CMP S,13 JZ DIVP_CALL ;運算符為除號,則調用除法子程序 C
16、MP S,14JZ K_CALL CMP S,15CALL ER JMP STORE1 ADD_CALL: CALL ADDP JMP STORE1 LOG_CALL: CALL LOG JMP STORE1 JCE_CALL: CALL JCE JMP STORE1 DIVP_CALL: CALL DIVP JMP STORE1K_CALL:CALL K STORE1: MOV AX,Y ;以下程序將各運算子程序返回的運算結果,按位分解,送入X變量 MOV DX,0 MOV BX,1000 DIV BX MOV X0, AL MOV AX,DX MOV BL,100 DIV BL MOV X
17、1,AL MOV AL,AH MOV AH,0 MOV BL,10 DIV BL MOV X2,AL MOV X3,AH POP BX POP DX POP AX RET OUTP ENDP;以下為運算鍵處理子程序,該程序將第一個運算數據的數值計算出來并存入X1變量;或者將第二個運算數據的數值計算出來并存入X2變量;將運算符的值存入S變量 COUNT PROC PUSH AX PUSH BX PUSH DX MOV DX,0 CALL BITP ;測試X中的數據是多少位 CMP CC,4 ;輸入的數據是4位數 ? JZ C4 CMP CC,3 ;輸入的數據是3位數 ? JZ C3 CMP CC
18、,2 ;輸入的數據是2位數 ? JZ C2 JMP C1 ;輸入的數據是1位數 ? C4: MOV AX,0 MOV AL,X0 MOV BX,1000 MUL BX MOV DX,AX C3: MOV AL,X1 MOV BL,100 MUL BL ADD DX,AX C2: MOV AL,X2 MOV BL,10 MUL BL ADD DX,AX C1: MOV AL,X3 MOV AH,0 ADD DX,AX CMP E,1 JNZ X1_S MOV X2,DX ;按下的是等號,則將第二個運算數據的值存入X2變量 JMP EXIT3 X1_S: MOV X1,DX ;按下的是運算符號,則
19、將第一個運算數據的值存X1變量 MOV X3,0 ;清空X變量 MOV X2,0 MOV X1,0 MOV X0,0 EXIT3: POP DX POP BX POP AX RET COUNT ENDP;以下為數字鍵處理子程序;該程序,將輸入的數據按位存放在X變量中,并由CC記錄數據的位數 NUMBER PROC CMP E,1 JNZ CONTINUE MOV E,0 CALL CLEAR CONTINUE: CMP CC,0 ;目前數據為0位,即沒有數據,則轉到SSS JZ SSS;若已有數據,以下程序將X左移8位。;例如:先輸入“1”,當再輸入2時,;先要將“1”從個位移到十位,然后再將
20、“2”存放到個位 PUSH AX PUSH DX MOV AL,X3 MOV AH,X2 MOV DL,X1 MOV DH,X0 MOV CX,8 LL: SHL AX, 1 RCL DX,1 LOOP LL MOV X3,AL MOV X2,AHMOV Z3,AH MOV X1,DLMOV Z2,DL MOV X0,DHMOV Z1,DH POP DX POP AX SSS: MOV DI,DL ;將當前鍵入的數據存放到X的最低位MOV Z4,DL INC CC ;數據位數加1 CMP CC,4 ;判斷數據位數 JNG EXIT2 MOV CC,0 ;如果數據超過4位,重新從最低位開始存放
21、MOV X2,0 MOV X1,0 MOV X0,0 EXIT2: CALL DISP ;調顯示子程序,顯示輸入的數據 RET NUMBER ENDP ;加法子程序 ADDP PROC PUSH AX MOV AX,X1 ADD AX,X2 MOV Y,AX POP AX RET ADDP ENDP;對數子程序 LOG PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AX,X1MOV BX,0MOV CX,2MOV DX,0LO:DIV CXCMP AX,0JZ G2INC BXJMP LOG2:MOV Y,BXPOP DXPOP CXPOP BXPOP AXRETLO
22、G ENDP;階乘子程序 JCE PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AX,X1MOV DX,AXSUB DX,1MOV CX,DXMOV BX,DXCHENG:MUL DXDEC BXMOV DX,BXLOOP CHENGMOV Y,AXPOP DXPOP CXPOP BXPOP AXRETJCE ENDP;除法子程序 DIVP PROC PUSH AX PUSH BX PUSH DX MOV DX,0 MOV AX,X1 MOV BX,X2 DIV BX MOV Y,AX POP DX POP BX POP AX RET DIVP ENDP;次方子程序
23、K PROC PUSH AX PUSH DX PUSH CX MOV AX,X1 MOV DX,AX MOV CX,X2DEC CX N:MUL DXMOV DX,X1 LOOP N MOV Y,AX POP CX POP DX POP AX RET K ENDP;二進制轉換成十進制子程序ER PROC PUSH AXPUSH BXPUSH CXMOV BL,8MOV AL,Z1MUL BLMOV CX,AXMOV BL,4MOV AL,Z2MUL BLADD CX,AXMOV BL,2MOV AL,Z3MUL BLADD CX,AXMOV AL,Z4MOV BL,1MUL BLADD CX,
24、AXMOV Y,CXPOP CXPOP BXPOP AXRETER ENDP ;顯示子程序 ,將X中的數值按位顯示出來 DISP PROC PUSH BX PUSH AX MOV BH,0 LEA SI,DISCODE CALL BITP ;測試X位數 CMP CC,4 JZ QIAN CMP CC,3 JZ BAI CMP CC,2 JZ SHI CMP CC,1 JMP G JMP NONE QIAN: MOV AH,11100000B ;從第4位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X0 MOV AL,SI+BX OUT 42H,AL CALL DELY MO
25、V AL,0 OUT 42H,AL BAI: MOV AH,11010000B ;從第3位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X1 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL SHI: MOV AH,10110000B ;從第2位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X2 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL G: MOV AH,01110000B ;從第1位開始顯示 MOV AL,AH OUT 44H,
26、AL MOV BL,X3 MOV AL,SI+BX OUT 42H,AL CALL DELY JMP EXIT4 NONE: MOV AL,0 ;X中沒有數據,不顯示 OUT 42H,AL EXIT4: POP AX POP BX RET DISP ENDP;分析數據位數子程序 BITP PROC CMP X0,0 ;如果X0不為0,則數據為4位數 JNZ FOURBIT CMP X1,0 ;如果X1不為0,則數據為3位數 JNZ THREEBIT CMP X2,0 ;如果X2不為0,則數據為2位數 JNZ TOWBIT CMP X3,0 ;如果X3不為0,則數據為1位數 JNZ ONEBIT
27、 JMP ZER0BIT ;否則,沒有數據 FOURBIT: MOV CC,4 JMP EXIT5 THREEBIT: MOV CC,3 JMP EXIT5 TOWBIT: MOV CC,2 JMP EXIT5 ONEBIT: MOV CC,1 JMP EXIT5 ZER0BIT: MOV CC,0 EXIT5: RET BITP ENDP;延時子程序 DELY PROC PUSH CX MOV CX,100 LOOP $ POP CX RET DELY ENDP CODE ENDS END START7.調試與測試第一步,進行數碼管顯示的仿真。編寫一段直接賦值送到數碼管顯示的程序,進行數碼管
28、顯示的仿真。編寫程序,輸入使數碼管顯示“HELO”的程序,進行仿真,通過多次修改,最終可得結果如圖:第二步,進行鍵盤掃描的仿真。編寫代碼,將掃描到的鍵值送到數碼管顯示。編寫程序,使數碼管顯示所掃描到的鍵值,進行仿真,通過多次修改可得結果。測試步驟為:首先選取任意keypad鍵盤,連接好電路,按下鍵盤上數字的8,如圖可見,電路線的顏色變化說明產生了脈沖。松開鼠標后,此時數碼管顯示為所掃描到的鍵值:再換其他案件,并使數碼管顯示相應掃描到的鍵值。第三步,在數碼管顯示和鍵盤掃描程序都正確的基礎上,逐步增加代碼,增加功能,逐步實現按鍵值的存儲與顯示、清零、加法、減法、乘法、除法等功能的仿真。第四步,在確
29、立好了之前的計算器基礎應有程序都正確后,又加入了幾個擴展模塊,再次模擬仿真,將調試不通過的擴展部分刪去,只留下可執行的模塊。1.實現二進制與十進制轉換功能:輸入二進制111b:按下二進制轉換鍵:再按下=號鍵,可見數碼管顯示轉換后的十進制數:2.實現求階乘功能:1.按下要求的數,數碼管開始顯示:2.按下求階乘按鍵,可見產生了脈沖:3.再按下=號鍵,可見數碼管顯示結果:計算器擴展后還有其他擴展功能,在此不作贅述。8.關鍵技術一、鍵盤掃描根據如上鍵盤及電路,可以先掃描列,再掃描行,先給出PC0為低電平,PC1、PC2、PC3均為高電平。若不按鍵盤,則PA0、PA1、PA2、PA3、PA4、PA5均為
30、高電平,然后轉入下一行測試,給下一行提供低電平、依次類推。若其中有鍵按下,則其對應位應顯示低電平。這樣,就把按下的鍵給定位了。根據以上鍵盤,通過計算按鍵的值來定位該位按鍵。鍵值=行*4+列,而行、列值可通過循環來實現。二、數據存儲與顯示首先定義X0、X1、X2、X3四個變量,分別存放按下數據的每一位的值,若為數字鍵,首先按下的數字存放在X3中,然后可以通過移位將輸入的數據依次存放于X0、X1、X2、X3中,要將它的十進制的值,則只要分別乘以1000、100、10、1然后相乘后保存到原先定義好的變量X1中即可。同理,當輸入第二個數據后,將其顯示并保存于X2變量。為了能在數碼管中顯示,首先應定義一個數據段,這個數據段存放的二進制數做位數碼管的輸入,從而控制數碼管的值,十進制數0到15對應的輸入分別為 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H。因此,我們就將這一連串的數據存放到以變量名為DISCODE為地址的數據段中,并讓DI指向DISCODE,要想輸出一個數的話,只要讓DI的地址加上這個數的值即可。聯系上述所說的X0 、X1、X2、X3、要輸出它們的值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥渣委托處理協議書
- 酒店事故賠償協議書
- 路政改革擴建協議書
- 酒店經營管理協議書
- 鄰居違建協商協議書
- 門面轉讓退款協議書
- 項目資料移交協議書
- 解除店長職位協議書
- 鄰居物資互換協議書
- 隱名股東股東協議書
- 2025屆高考作文復習:時評類作文分析 課件
- 教科版科學三年級下冊《課本問題課后研討題》參考答案-5398920
- 強制執行后還款和解協議書范本(2篇)
- 老年期常見心理問題的護理(老年護理課件)
- T-CAICI 89-2024 通信建設安全生產標準化基本要求
- 中國古代文學(B)(1)形成性考核任務一先秦文學-
- 《民法典》2024年知識考試題庫(含答案)
- 江蘇省啟東市高中數學 第二章 平面向量 第7課時 2.3.2 向量的坐標表示(2)教案 蘇教版必修4
- 民辦非企業年審年度工作總結
- 137案例黑色三分鐘生死一瞬間事故案例文字版
- 高中英語外研版 單詞表 必修1
評論
0/150
提交評論