西電網信院微機原理實驗(七)
阿新 • • 發佈:2021-02-19
實驗七 基於8255的開關狀態顯示實驗
1、編寫程式,設定8255的PA口為開關量輸入,PC口為開關量輸出,要求能隨時將PA口的開關狀態通過PC口的發光二極體顯示出來。
8255晶片:
CPU對8255的讀/寫操作,是對哪個埠的讀/寫操作,是通過CS,A1和A0三個引腳的狀態來識別的,讀寫操作是通過WR和RD訊號控制的。
8255有三種基本工作方式,A組可採用方式0到方式2,而B組只能採用方式0和方式1,這是由8255的方式控制暫存器控制。
題目分析:
假設8255的埠地址為0200H(埠A),0202H(埠B),0204H(埠C),0206H(控制埠)。CPU地址線A2連線8255引腳A1,CPU地址線A1連線8255引腳A0。
b) 設定8255引腳A1=0,A0=0,選中埠A,接受輸入,D0—D7為A埠輸入值。
c) 設定8255引腳A1=1,A0=0,選中埠C,D0—D7的值將在埠C輸出。
CPU不斷改變輸出的地址,以便達到將埠A讀入資料輸出到埠C的目的。
由於發光二極體採用共陽極接法,故將埠A讀入資料取反後輸出到埠C。
彙編程式碼:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AL,90H ; 控制A輸入C輸出
MOV DX,206H
OUT DX,AL
RUN:
MOV AL, 0H
MOV DX, 200H
IN AL, DX ;埠A讀入
NOT AL
MOV DX, 204H
OUT DX, AL ;埠C輸出
JMP RUN
CODE ENDS
END START
電路連線圖:
實驗部分過程截圖:
2、用8255A實現一電子秒錶,計時範圍0-99.99秒,應具有“START”,“STOP”,“CLEAR”三個按鍵,分別完成開始,停止,清零功能。
題目分析:
假設8255的埠地址為0200H(埠A),0202H(埠B),0204H(埠C),0206H(控制埠)。CPU地址線A2連線8255引腳A1,CPU地址線A1連線8255引腳A0。
設定埠地址為0202H,即選中埠B時,準備輸出AL=40H,數字0。
START:在埠地址0200H,依次輸出AL=0001B、0010B、0100B、1000B選中1,2,3,4數碼管。在埠地址0202H,依次輸出0到9的數字。每一次四個數碼管顯示結束,都需要判斷是否出現進位。
判斷按鍵狀態:設定埠地址0204H,讀入C埠的資料,從而判斷此時按鍵的狀態。
STOP:通過判斷C埠的資料,當輸入為 0000 0110 時,表示暫停。此時顯示當前計時即可。當檢測到C埠輸入為 0000 0101 時,表示繼續計時。
CLEAR:當C埠輸入為0000 0011時,數碼管上的數字全部清零,重新開始計時。
電路連線說明:
程式流程圖:
彙編程式碼:
DATA SEGMENT
NUMBER DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
MIN1 DB 0
MIN2 DB 0
SEC1 DB 0
SEC2 DB 0
CIR DW 800
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AL, 89H
MOV DX, 206H ;初始化
OUT DX, AL ;A,B輸出,C輸入
MOV BX, 0H
LEA SI, NUMBER
OUTPUT:
MOV AL, 00000001B
MOV DX, 200H ;選中第4個數碼管
OUT DX, AL
MOV BL, SEC2 ;輸出SEC2
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S4:
LOOP S4
MOV AL, 00000010B
MOV DX, 200H ;選中第3個數碼管
OUT DX, AL
MOV BL, SEC1
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S3:
LOOP S3
MOV AL, 00000100B
MOV DX, 200H ;選中第2個數碼管
OUT DX, AL
MOV BL, MIN2
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S2:
LOOP S2
MOV AL, 00001000B
MOV DX, 200H ;選中第3個數碼管
OUT DX, AL
MOV BL, MIN1
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S1:
LOOP S1
;四個數碼管顯示結束,判斷C埠狀態
MOV DX, 204H
IN AL, DX
CMP AL, 06H
JE STOP ;STOP暫停計時
CMP AL, 03H
JE TAIL1 ;CLEAR清零計時
;沒有按按鍵或者按了STRAT,增加秒數並判斷是否進位
INC SEC2
CMP SEC2, 10
JNZ OUTPUT
;SEC2 = 10,進位
MOV SEC2, 0H
INC SEC1
CMP SEC1, 10
JNZ OUTPUT
;SEC1 = 10,進位
MOV SEC1, 0H
INC MIN2
CMP MIN2, 10
JNZ OUTPUT
;MIN2 = 10, 進位
MOV MIN2, 0H
INC MIN1
CMP MIN1, 10
JNZ OUTPUT
;MIN1 = 10,清零
MOV MIN1, 0H
JMP OUTPUT
STOP:
MOV AL, 00000001B
MOV DX, 200H ;選中第4個數碼管
OUT DX, AL
MOV BL, SEC2
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S8:
LOOP S8
MOV AL, 00000010B
MOV DX, 200H ;選中第3個數碼管
OUT DX, AL
MOV BL, SEC1
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S7:
LOOP S7
MOV AL, 00000100B
MOV DX, 200H ;選中第2個數碼管
OUT DX, AL
MOV BL, MIN2
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S6:
LOOP S6
MOV AL, 00001000B
MOV DX, 200H ;選中第1個數碼管
OUT DX, AL
MOV BL, MIN1
MOV AL, [SI+BX]
MOV DX, 202H
OUT DX, AL
MOV CX, CIR
S5:
LOOP S5
; 判斷是繼續計時、暫停還是清零
MOV DX, 204H
IN AL, DX
CMP AL, 05H ;START按鍵按下
JE OUTPUT
CMP AL, 03H ;CLEAR按鍵按下
JE TAIL2
JMP STOP
TAIL1:
CALL ZERO
JMP OUTPUT
TAIL2:
CALL ZERO
JMP STOP
ZERO PROC
MOV SEC2, 0H
MOV SEC1, 0H
MOV MIN1, 0H
MOV MIN2, 0H
RET
ZERO ENDP
CODE ENDS
END START
電路連線圖:
實驗部分過程截圖:
參考文獻:
《微型計算機原理及應用(第三版)》李伯成、侯伯亨等編著